{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/utils/apollo/apollo-retry-links.js","webpack:///./app/apolloClient.js","webpack:///./app/containers/NodeSolutionCenter/actions.js","webpack:///./app/containers/DataClassifierData/constants.js","webpack:///./app/components/CenterContent/index.js","webpack:///./app/components/Hoverable/index.js","webpack:///./app/containers/DataClassification/utils.js","webpack:///./app/containers/PermissionChecker/useSwimlanesForPermissionCheck.js","webpack:///./app/containers/PermissionChecker/index.js","webpack:///./app/containers/UserProfileData/constants.js","webpack:///./app/components/TextLink/index.js","webpack:///./app/components/SectionHeader/index.js","webpack:///./app/components/NodeView/NodeViewBody.js","webpack:///./app/components/NodeView/PreviewCard.js","webpack:///./app/components/NodeView/index.js","webpack:///./app/containers/NodeSolutionCenter/selectors.js","webpack:///./app/components/Popover/PopoverBody.js","webpack:///./app/components/Popover/PopoverAnchor.js","webpack:///./app/components/Popover/index.js","webpack:///./app/utils/constants.js","webpack:///./app/components/SizeMe/index.js","webpack:///./app/components/DynamicFormattedMessage/index.js","webpack:///./app/utils/hocHelpers.js","webpack:///./app/components/Dropdown/DropdownMenu.js","webpack:///./app/components/Dropdown/DropdownItem.js","webpack:///./app/components/Dropdown/InlineDropdownAnchor.js","webpack:///./app/components/Dropdown/InlineTextDropdown.js","webpack:///./app/components/Dropdown/DropdownAnchor.js","webpack:///./app/components/Dropdown/index.js","webpack:///./app/components/SonraiBadge/index.js","webpack:///./app/components/SwimlaneDisplay/index.js","webpack:///./app/containers/AccessActivity/styles.css?deb3","webpack:///./app/components/ChartTooltip/index.js","webpack:///./app/components/JsonView/index.js","webpack:///./app/containers/Tickets/reducers.js","webpack:///./app/containers/TicketListFilterPanel/selectors.js","webpack:///./app/containers/PolicyEdit/EditPolicyModal.js","webpack:///./app/containers/PolicyEdit/selectors.js","webpack:///./app/containers/ControlCenter/utils.js","webpack:///./app/containers/TicketDetails/messages.js","webpack:///./app/containers/TicketDetails/components/TicketNotFound.js","webpack:///./app/containers/TicketAutoRemediateWizard/constants.js","webpack:///./app/containers/TicketAutoRemediateWizard/reducers.js","webpack:///./app/containers/TicketAutoRemediateWizard/actions.js","webpack:///./app/containers/TicketAutoRemediateWizard/queries.js","webpack:///./app/containers/TicketAutoRemediateWizard/sagas.js","webpack:///./app/containers/TicketAutoRemediateWizard/selectors.js","webpack:///./app/containers/TicketAutoRemediateWizard/messages.js","webpack:///./app/containers/TicketAutoRemediateWizard/utils.js","webpack:///./app/containers/TicketAutoRemediateWizard/Step1.js","webpack:///./app/containers/TicketAutoRemediateWizard/Step2.js","webpack:///./app/containers/TicketAutoRemediateWizard/Step3.js","webpack:///./app/containers/TicketAutoRemediateWizard/index.js","webpack:///./app/containers/TicketDetails/components/SnoozeTicketModal.js","webpack:///./app/containers/TicketDetails/components/AssignToMe.js","webpack:///./app/containers/TicketDetails/components/ReassignToUserModal.js","webpack:///./app/containers/TicketDetails/components/TicketDetailsHeaderActions.js","webpack:///./app/containers/TicketDetails/components/TicketDetailsHeaderProperties.js","webpack:///./app/containers/TicketDetails/components/ErrorChangeStatusModal.js","webpack:///./app/containers/TicketDetails/TicketDetailsHeader.js","webpack:///./app/utils/propsOfInterestUtils.js","webpack:///./app/components/PolicySearchConditions/index.js","webpack:///./app/containers/TicketDetails/components/TicketPolicyEvidence.js","webpack:///./app/containers/TicketDetails/components/ShowPath.js","webpack:///./app/containers/TicketDetails/components/CRMAlertDetails.js","webpack:///./app/containers/TicketDetails/components/TicketCRMEvidence.js","webpack:///./app/containers/TicketDetails/components/TicketEvidence.js","webpack:///./app/containers/TicketDetails/components/DetailsTab.js","webpack:///./app/containers/TicketDetails/components/Comment.js","webpack:///./app/containers/TicketDetails/components/TicketCommentsDisplay.js","webpack:///./app/containers/TicketDetails/components/AddTicketComment.js","webpack:///./app/containers/TicketDetails/components/TicketCommentsTab.js","webpack:///./app/containers/TicketDetails/components/TicketHistoryTab.js","webpack:///./app/containers/TicketDetails/components/SimilarTicketsTab.js","webpack:///./app/containers/TicketDetails/TicketDetailsTabs.js","webpack:///./app/containers/TicketDetails/components/Escalation.js","webpack:///./app/containers/TicketDetails/TicketDetailsEscalation.js","webpack:///./app/containers/TicketDetails/RemediationModal.js","webpack:///./app/containers/TicketDetails/Ticket.js","webpack:///./app/components/SplitterLayout/index.js","webpack:///./app/components/ContextMenu/index.js","webpack:///./app/containers/Explorer/selectors.js","webpack:///./app/containers/Explorer/constants.js","webpack:///./app/containers/Explorer/reducer.js","webpack:///./app/containers/Explorer/actions.js","webpack:///./app/containers/Explorer/sagas.js","webpack:///./app/containers/Explorer/NodePreview.js","webpack:///./app/containers/Explorer/NodeSearch.js","webpack:///./app/containers/Explorer/FilterPanel.js","webpack:///./app/containers/Explorer/index.js","webpack:///./app/containers/RapSheet/processData.js","webpack:///./app/components/SunburstVis/SunburstPieChart.js","webpack:///./app/components/SunburstVis/SunburstMultiView.js","webpack:///./app/components/SunburstVis/SunburstBreadcrumb.js","webpack:///./app/components/SunburstVis/SunburstLegend.js","webpack:///./app/components/SunburstVis/index.js","webpack:///./app/containers/RapSheet/reducer.js","webpack:///./app/containers/RapSheet/sagas.js","webpack:///./app/containers/RapSheet/RapSheetAlerts.js","webpack:///./app/containers/RapSheet/index.js","webpack:///./app/containers/TicketListFilterPanel/reducer.js","webpack:///./app/containers/TicketListFilterPanel/index.js","webpack:///./app/containers/Tickets/components/TicketList.js","webpack:///./app/assets/sonrailogo.png","webpack:///./app/assets/gcplogo.png","webpack:///./app/assets/gcpwhite.png","webpack:///./app/assets/hashicorpvaultlogo.png","webpack:///./app/assets/hashicorplogo.png","webpack:///./app/assets/kuberneteslogo.png","webpack:///./app/assets/servicenowsmall.png","webpack:///./app/assets/slackicon.png","webpack:///./app/assets/jiraicon.png","webpack:///./app/components/Icon/index.js","webpack:///./app/containers/AccessActivity/selectors.js","webpack:///./app/containers/SwimlaneDetails/constants.js","webpack:///./app/assets/logo.png","webpack:///./app/assets/clouds1.webm","webpack:///./app/assets/SmallIconWhite.png","webpack:///./app/assets/bkgr_img_bar.png","webpack:///./app/react-auth0-wrapper.js","webpack:///./app/containers/DataClassification/AddDecryptionKeyModal.js","webpack:///./app/containers/DataClassification/ClassificationDataView.js","webpack:///./app/containers/DataClassification/NoClassificationsView.js","webpack:///./app/containers/DataClassification/Form/SubmitFormBaseComponent.js","webpack:///./app/containers/DataClassification/Form/SubmitFormAuthenticationSection.js","webpack:///./app/containers/DataClassification/Form/SubmitFormClassifiersSection.js","webpack:///./app/containers/DataClassification/Form/SubmitFormScanModeSection.js","webpack:///./app/containers/DataClassification/Form/SubmitFormColumnSamplesSizeSection.js","webpack:///./app/containers/DataClassification/Form/SubmitFormOutputLimitSection.js","webpack:///./app/containers/DataClassification/Form/SubmitFormMaxSamplesPerClassifierSection.js","webpack:///./app/containers/DataClassification/Form/SubmitFormOutputModeSection.js","webpack:///./app/containers/DataClassification/Form/SubmitFormIncludeSamplesSection.js","webpack:///./app/containers/DataClassification/Form/SubmitFormEncryptionSection.js","webpack:///./app/containers/DataClassification/SubmitForm.js","webpack:///./app/containers/DataClassification/actions.js","webpack:///./app/containers/DataClassification/selectors.js","webpack:///./app/containers/DataClassification/SubmitFormModal.js","webpack:///./app/containers/DataClassification/reducers.js","webpack:///./app/containers/DataClassification/sagas.js","webpack:///./app/containers/DataClassification/index.js","webpack:///./app/containers/NotFoundPage/messages.js","webpack:///./app/containers/NotFoundPage/index.js","webpack:///./app/containers/RapSheet/constants.js","webpack:///./app/components/SelectBar/index.js","webpack:///./app/containers/ChangeDetectionManager/constants.js","webpack:///./app/components/CloudAccount/index.js","webpack:///./app/containers/SonraiData/constants.js","webpack:///./app/containers/EscalationData/actions.js","webpack:///./app/containers/RapSheet/actions.js","webpack:///./app/components/UserWidget/index.js","webpack:///./app/components/Checkbox/PlainCheckbox.js","webpack:///./app/components/Checkbox/index.js","webpack:///./app/components/ShimmerLoader/TextLineShimmer.js","webpack:///./app/components/ShimmerLoader/SquareShimmer.js","webpack:///./app/components/ShimmerLoader/IconShimmer.js","webpack:///./app/components/ShimmerLoader/TitleShimmer.js","webpack:///./app/components/ShimmerLoader/BlockShimmer.js","webpack:///./app/components/ShimmerLoader/RectangleShimmer.js","webpack:///./app/components/LoadingAnim/messages.js","webpack:///./app/components/LoadingAnim/index.js","webpack:///./app/containers/PlatformSettingsData/actions.js","webpack:///./app/components/MarkdownDisplay/index.js","webpack:///./app/containers/PolicyEdit/messages.js","webpack:///./app/containers/PermissionChecker/WithPermission.js","webpack:///./app/components/BarLoadingAnimation/index.js","webpack:///./node_modules/empty-module sync nonrecursive js$","webpack:///./app/assets/light-bootstrap-dashboard.css?1990","webpack:///./app/assets/light-bootstrap-dashboard.css","webpack:///./app/components/MarkdownEditor/index.js","webpack:///./app/global-styles.css?f391","webpack:///./app/global-styles.css","webpack:///./app/assets/webfonts/roboto-v18-latin-100.woff2","webpack:///./app/assets/webfonts/roboto-v18-latin-100.woff","webpack:///./app/assets/webfonts/roboto-v18-latin-300.woff2","webpack:///./app/assets/webfonts/roboto-v18-latin-300.woff","webpack:///./app/assets/webfonts/roboto-v18-latin-regular.woff2","webpack:///./app/assets/webfonts/roboto-v18-latin-regular.woff","webpack:///./app/assets/webfonts/roboto-v18-latin-500.woff2","webpack:///./app/assets/webfonts/roboto-v18-latin-500.woff","webpack:///./app/assets/webfonts/comfortaa-v12-latin-regular.woff2","webpack:///./app/assets/webfonts/comfortaa-v12-latin-regular.woff","webpack:///./app/containers/IHelp/messages.js","webpack:///./app/containers/IHelp/index.js","webpack:///./app/components/CloudBadge/index.js","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/css/pe-icon-7-stroke.css?7abe","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/css/pe-icon-7-stroke.css","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.eot?e777","webpack:///./app/components/Error/index.js","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.eot","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.woff","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.ttf","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/fonts/Pe-icon-7-stroke.svg","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/css/helper.css?ccb5","webpack:///./app/assets/pixeden-stroke-7-icons/pe-icon-7-stroke/css/helper.css","webpack:///./app/appConstants.js","webpack:///./app/containers/NodeViewMiniPopout/selectors.js","webpack:///./app/containers/NodeViewMiniPopout/constants.js","webpack:///./app/containers/NodeViewMiniPopout/actions.js","webpack:///./app/containers/NodeViewMiniPopout/messages.js","webpack:///./app/containers/NodeViewMiniPopout/reducers.js","webpack:///./app/containers/NodeViewMiniPopout/sagas.js","webpack:///./app/containers/NodeViewMiniPopout/index.js","webpack:///./app/components/Checkbox/checkbox.css?8ea1","webpack:///./app/components/Checkbox/checkbox.css","webpack:///./app/components/DataTable/styles.css?3231","webpack:///./app/components/DataTable/styles.css","webpack:///./app/containers/ThemeManager/Themeable.js","webpack:///./app/components/Tooltip/index.js","webpack:///./app/containers/SonraiData/selectors.js","webpack:///./app/components/GraphVis/styles.css?9b2f","webpack:///./app/components/GraphVis/styles.css","webpack:///./app/containers/PolicyEdit/constants.js","webpack:///./app/containers/Tickets/constants.js","webpack:///./app/containers/DataClassifierData/actions.js","webpack:///./app/components/MarkdownDisplay/styles.css?1505","webpack:///./app/components/MarkdownDisplay/styles.css","webpack:///./app/components/NodeView/styles.css?8314","webpack:///./app/components/NodeView/styles.css","webpack:///./app/components/JSONDisplay/index.js","webpack:///./app/components/StyledReactstrapDropdownMenu/index.js","webpack:///./app/containers/TicketDetailsData/constants.js","webpack:///./app/components/NodeView/NodeViewDetailMetadataBody.js","webpack:///./app/containers/ChangeDetectionManager/actions.js","webpack:///./app/containers/RapSheet/selectors.js","webpack:///./app/containers/AccessActivity/styles.css","webpack:///./app/components/SunburstVis/styles.css?5c06","webpack:///./app/components/SunburstVis/styles.css","webpack:///./app/components/SplitterLayout/gridStyles.css?394c","webpack:///./app/components/SplitterLayout/gridStyles.css","webpack:///./app/components/SplitterLayout/styles.css?441e","webpack:///./app/components/SplitterLayout/styles.css","webpack:///./app/images/favicons/favicon.ico","webpack:///./app/images/favicons/icon-72x72.png","webpack:///./app/images/favicons/icon-96x96.png","webpack:///./app/images/favicons/icon-128x128.png","webpack:///./app/images/favicons/icon-144x144.png","webpack:///./app/images/favicons/icon-152x152.png","webpack:///./app/images/favicons/icon-192x192.png","webpack:///./app/images/favicons/icon-384x384.png","webpack:///./app/images/favicons/icon-512x512.png","webpack:///./app/utils/graphDataUtils.js","webpack:///./app/images/favicons/favicon-32x32.png","webpack:///./app/images/favicons/favicon-16x16.png","webpack:///./app/images/favicons/apple-touch-icon.png","webpack:///./app/images/favicons/safari-pinned-tab.svg","webpack:///./app/images/favicons/browserconfig.xml","webpack:///./app/.htaccess","webpack:///./app/components/ChooseOrgModal/messages.js","webpack:///./app/components/ChooseOrgModal/index.js","webpack:///./app/components/SonraiPage/styles.js","webpack:///./app/components/SonraiPage/SonraiPageContent.js","webpack:///./app/components/SonraiPage/SonraiPageFooter.js","webpack:///./app/components/SonraiPage/index.js","webpack:///./app/containers/Login/styles.js","webpack:///./app/containers/Login/index.js","webpack:///./app/containers/AppLayout/AppLayoutErrorBoundry.js","webpack:///./app/containers/SonraiData/reducer.js","webpack:///./app/containers/SonraiData/index.js","webpack:///./app/containers/ControlFrameworkData/reducer.js","webpack:///./app/containers/ControlFrameworkData/index.js","webpack:///./app/containers/PlatformSettingsData/reducers.js","webpack:///./app/containers/PlatformSettingsData/static-queries.js","webpack:///./app/containers/PlatformSettingsData/sagas.js","webpack:///./app/containers/PlatformSettingsData/index.js","webpack:///./app/containers/TicketDetailsData/index.js","webpack:///./app/containers/EscalationData/reducers.js","webpack:///./app/containers/EscalationData/static-queries.js","webpack:///./app/containers/EscalationData/sagas.js","webpack:///./app/containers/EscalationData/index.js","webpack:///./app/containers/DataClassifierData/reducer.js","webpack:///./app/containers/DataClassifierData/static-queries.js","webpack:///./app/containers/DataClassifierData/sagas.js","webpack:///./app/containers/DataClassifierData/index.js","webpack:///./app/containers/ChangeDetectionManager/reducers.js","webpack:///./app/containers/ChangeDetectionManager/index.js","webpack:///./app/containers/SolutionCenter/Loadable.js","webpack:///./app/containers/GraphExplorer/Loadable.js","webpack:///./app/components/Logo/index.js","webpack:///./app/components/NavBarLink/index.js","webpack:///./app/containers/GlobalNavBar/messages.js","webpack:///./app/containers/GlobalNavBar/styles.js","webpack:///./app/containers/GlobalNavBar/index.js","webpack:///./app/containers/GlobalNavBar/selectors.js","webpack:///./app/containers/QuickSearch/constants.js","webpack:///./app/containers/QuickSearch/reducer.js","webpack:///./app/containers/QuickSearch/actions.js","webpack:///./app/containers/QuickSearch/sagas.js","webpack:///./app/containers/QuickSearch/selectors.js","webpack:///./app/containers/QuickSearch/index.js","webpack:///./app/containers/Search/Loadable.js","webpack:///./app/containers/AppLayout/messages.js","webpack:///./app/components/HeaderSearchBar/messages.js","webpack:///./app/components/HeaderSearchBar/index.js","webpack:///./app/containers/UserMenu/index.js","webpack:///./app/containers/GlobalHeaderBar/index.js","webpack:///./app/containers/NodeSolutionCenter/Loadable.js","webpack:///./app/containers/WidgetResultExplorer/constants.js","webpack:///./app/containers/WidgetResultExplorer/actions.js","webpack:///./app/containers/WidgetResultExplorer/selectors.js","webpack:///./app/containers/WidgetResultExplorer/reducer.js","webpack:///./app/containers/WidgetResultExplorer/sagas.js","webpack:///./app/containers/WidgetResultExplorer/messages.js","webpack:///./app/containers/WidgetResultExplorer/index.js","webpack:///./app/containers/ControlCenter/Loadable.js","webpack:///./app/containers/ControlGroup/selectors.js","webpack:///./app/containers/ControlGroup/reducer.js","webpack:///./app/containers/ControlGroup/constants.js","webpack:///./app/containers/ControlGroup/actions.js","webpack:///./app/containers/ControlGroup/messages.js","webpack:///./app/containers/ControlGroup/AddPolicyModal.js","webpack:///./app/containers/ControlGroup/EditControlGroupModal.js","webpack:///./app/containers/ControlGroup/DescriptionRenderer.js","webpack:///./app/containers/ControlGroup/PolicyActions.js","webpack:///./app/containers/ControlGroup/index.js","webpack:///./app/containers/Deploy/Loadable.js","webpack:///./app/containers/HelpCenter/Loadable.js","webpack:///./app/containers/PolicyEdit/Loadable.js","webpack:///./app/containers/NewAccountState/index.js","webpack:///./app/containers/SecurityCenter/Loadable.js","webpack:///./app/containers/UserManagement/Loadable.js","webpack:///./app/containers/BotManagement/Loadable.js","webpack:///./app/containers/BotDetails/Loadable.js","webpack:///./app/containers/RoleManagementPage/Loadable.js","webpack:///./app/containers/RoleDetails/Loadable.js","webpack:///./app/containers/Tickets/Loadable.js","webpack:///./app/containers/TicketDetails/Loadable.js","webpack:///./app/containers/UserProfileView/Loadable.js","webpack:///./app/containers/SwimlaneManager/Loadable.js","webpack:///./app/containers/SwimlaneDetails/Loadable.js","webpack:///./app/containers/SearchManager/Loadable.js","webpack:///./app/containers/MonitoredResources/Loadable.js","webpack:///./app/containers/UserActivity/Loadable.js","webpack:///./app/containers/PlatformSettings/Loadable.js","webpack:///./app/containers/SlackApplicationAuthorization/Loadable.js","webpack:///./app/containers/Escalation/Loadable.js","webpack:///./app/containers/EscalationDetails/Loadable.js","webpack:///./app/containers/SwimlaneCheckup/Loadable.js","webpack:///./app/containers/SwimlaneCheckupDetails/Loadable.js","webpack:///./app/containers/TicketTemplatesPage/Loadable.js","webpack:///./app/containers/TicketTemplateDetailsPage/Loadable.js","webpack:///./app/containers/DataClassifierManagement/Loadable.js","webpack:///./app/containers/ObjectivesManager/Loadable.js","webpack:///./app/containers/AppLayout/AcceptLicenseModal.js","webpack:///./app/containers/AppLayout/selectors.js","webpack:///./app/containers/AppLayout/styles.js","webpack:///./app/containers/AppLayout/index.js","webpack:///./app/containers/DisabledUserPage/Loadable.js","webpack:///./app/containers/NotFoundPage/Loadable.js","webpack:///./app/containers/Loading/index.js","webpack:///./app/axiosConfig.js","webpack:///./app/containers/UserProfileData/sagas.js","webpack:///./app/containers/UserProfileData/reducer.js","webpack:///./app/containers/UserProfileData/index.js","webpack:///./app/containers/ThemeManager/reducer.js","webpack:///./app/assets/base-theme.js","webpack:///./app/containers/ThemeManager/selectors.js","webpack:///./app/containers/ThemeManager/sagas.js","webpack:///./app/containers/ThemeManager/index.js","webpack:///./app/containers/App/index.js","webpack:///./app/containers/LanguageProvider/selectors.js","webpack:///./app/containers/LanguageProvider/index.js","webpack:///./app/i18n.js","webpack:///./app/app.js","webpack:///./app/framekiller.js","webpack:///./app/components/BulkActionToolbar/ToolbarDivider.js","webpack:///./app/components/BulkActionToolbar/ActiveToolbar.js","webpack:///./app/components/BulkActionToolbar/InactiveToolbar.js","webpack:///./app/components/BulkActionToolbar/ToolbarItem.js","webpack:///./app/components/BulkActionToolbar/index.js","webpack:///./app/components/Badge/Pill.js","webpack:///./app/containers/ThemeManager/constants.js","webpack:///./app/components/WidgetCard/messages.js","webpack:///./app/components/WidgetCard/styles.js","webpack:///./app/components/WidgetCard/WidgetCardContent.js","webpack:///./app/components/WidgetCard/index.js","webpack:///./app/components/Select/index.js","webpack:///./app/components/Scrollable/index.js","webpack:///./app/components/EmptyWidgetResults/messages.js","webpack:///./app/components/EmptyWidgetResults/index.js","webpack:///./app/components/DropdownActions/DropdownMenu.js","webpack:///./app/components/DropdownActions/DropdownItem.js","webpack:///./app/components/DropdownActions/DropdownAnchor.js","webpack:///./app/components/DropdownActions/index.js","webpack:///./app/components/PathWidget/PathWidget.js","webpack:///./app/components/PathWidget/NestedPathWidget.js","webpack:///./app/components/PathWidget/FlatPathWidget.js","webpack:///./app/components/PathWidget/index.js","webpack:///./app/configureStore.js","webpack:///./app/containers/ChangeDetectionManager/sagas.js","webpack:///./app/components/TableLoader/index.js","webpack:///./app/components/CreatedByBadge/index.js","webpack:///./app/components/SearchInput/index.js","webpack:///./app/components/BorderlessButton/styles.js","webpack:///./app/components/BorderlessButton/index.js","webpack:///./app/components/Button/index.js","webpack:///./app/components/Expandable/index.js","webpack:///./app/containers/TicketDetailsData/actions.js","webpack:///./app/components/ProfileIcon/index.js","webpack:///./app/components/NodeView/styles.js","webpack:///./app/utils/checkStore.js","webpack:///./app/auth/auth-db-cleanup.js","webpack:///./app/auth/auth-db.js","webpack:///./app/components/Card/styles.js","webpack:///./app/components/Card/TopTitle.js","webpack:///./app/components/Card/BottomTitle.js","webpack:///./app/components/Card/CardBody.js","webpack:///./app/components/Card/Toolbar.js","webpack:///./app/components/Card/index.js","webpack:///./app/containers/EscalationData/selectors.js","webpack:///./app/containers/NodeSolutionCenter/constants.js","webpack:///./app/containers/ControlFrameworkData/constants.js","webpack:///./app/containers/AccessActivity/ShowPathModal.js","webpack:///./app/components/NodeView/NodeViewDetailSrn.js","webpack:///./app/assets/sadcloud.png","webpack:///./app/components/BounceLoadingAnimation/index.js","webpack:///./app/components/NodeView/NodeViewDetailAccount.js","webpack:///./app/components/IconDivider/index.js","webpack:///./app/components/TimeoutLoader/index.js","webpack:///./app/containers/DataClassification/messages.js","webpack:///./app/components/NodeView/NodeViewDetailAccessKeys.js","webpack:///./app/components/NodeView/messages.js","webpack:///./app/components/NodeView/NodeViewDetailsClassification.js","webpack:///./app/components/NodeView/NodeViewSrn.js","webpack:///./app/components/NodeView/NodeViewDetailBlockStorage.js","webpack:///./app/components/NodeView/NodeViewDetailPublicKey.js","webpack:///./app/components/MFADevice/index.js","webpack:///./app/components/ServicePrincipal/index.js","webpack:///./app/components/ConsoleEnabled/index.js","webpack:///./app/components/NodeView/NodeViewDetailsSection.js","webpack:///./app/components/NodeView/NodeViewDetails.js","webpack:///./app/containers/ThemeManager/actions.js","webpack:///./app/components/NodeView/NodeViewDetailString.js","webpack:///./app/components/NodeView/NodeViewDetailCode.js","webpack:///./app/utils/injectReducer.js","webpack:///./app/containers/App/constants.js","webpack:///./app/auth/permissions.js","webpack:///./app/containers/TicketListFilterPanel/constants.js","webpack:///./app/containers/AccessActivity/messages.js","webpack:///./app/containers/AccessActivity/ListCard.js","webpack:///./app/globalTranslations.js","webpack:///./app/utils/injectSaga.js","webpack:///./app/containers/SwimlaneDetails/actions.js","webpack:///./app/utils/loadable.js","webpack:///./app/containers/SonraiData/actions.js","webpack:///./app/components/InlineEdit/index.js","webpack:///./app/components/InlineEditableText/index.js","webpack:///./app/components/Badge/index.js","webpack:///./app/components/BorderedCard/styles.js","webpack:///./app/components/BorderedCard/index.js","webpack:///./app/components/PageLoader/index.js","webpack:///./app/assets/poster.png","webpack:///./app/components/DataTable/constants.js","webpack:///./app/components/DataTable/TableActions.js","webpack:///./app/components/DataTable/getColumnProps.js","webpack:///./app/components/DataTable/ExpandRenderer.js","webpack:///./app/components/DataTable/AGGridDataTable.js","webpack:///./app/components/DataTable/ConfigurableTable.js","webpack:///./app/components/GraphVis/nodeIcons.js","webpack:///./app/components/Breadcrumb/index.js","webpack:///./app/components/EmptySection/index.js","webpack:///./app/components/ActionToolbar/ToolbarItem.js","webpack:///./app/components/ActionToolbar/ToolbarDivider.js","webpack:///./app/components/ActionToolbar/index.js","webpack:///./app/containers/FeatureFlags/selectors.js","webpack:///./app/containers/FeatureFlags/index.js","webpack:///./app/containers/UserProfileData/selectors.js","webpack:///./app/containers/ControlFrameworkData/actions.js","webpack:///./app/components/SquareLoadingAnimation/index.js","webpack:///./app/containers/PlatformSettingsData/constants.js","webpack:///./app/components/SavedSearchDisplay/index.js","webpack:///./app/containers/BotManagement/static-queries.js","webpack:///./app/components/NodeView/NodeViewDetailBool.js","webpack:///./app/components/NodeView/NodeViewDetailDate.js","webpack:///./app/components/NodeView/NodeViewDetailInt.js","webpack:///./app/components/NodeView/NodeViewDetailLabel.js","webpack:///./app/components/NodeView/NodeViewDetailMetadata.js","webpack:///./app/components/Tag/index.js","webpack:///./app/components/NodeView/NodeViewTab.js","webpack:///./app/components/ChartLegendEntry/index.js","webpack:///./app/containers/Tickets/selectors.js","webpack:///./app/components/CodeBlock/index.js","webpack:///./app/components/SlideoutPanel/index.js","webpack:///./app/containers/PolicyEdit/PolicyEditor.js","webpack:///./app/components/MissingDataNode/messages.js","webpack:///./app/components/MissingDataNode/index.js","webpack:///./app/containers/NodeViewLayouts/AccountNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/AccountNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/AccountNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/AccountNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/AccountNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/AccountNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/AccountNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/UserNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/UserNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/UserNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/UserNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/UserNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/UserNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/UserNodeViewCardLayout/index.js","webpack:///./app/components/InfoCard/Property.js","webpack:///./app/components/InfoCard/DateProperty.js","webpack:///./app/components/InfoCard/BoolProperty.js","webpack:///./app/components/InfoCard/index.js","webpack:///./app/containers/NodeViewLayouts/DataNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/DataNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/DataNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/DataNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/DataNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/DataNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/DataNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/DataContainerNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/DataContainerNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/DataContainerNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/DataContainerNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/DataContainerNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/DataContainerNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/DataContainerNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/DataStoreNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/DataStoreNodeViewCardLayout/reducers.js","webpack:///./app/containers/NodeViewLayouts/DataStoreNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/DataStoreNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/DataStoreNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/DataStoreNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/DataStoreNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/PublicKeyNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/PublicKeyNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/PublicKeyNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/PublicKeyNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/PublicKeyNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/PublicKeyNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/PublicKeyNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/RoleNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/RoleNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/RoleNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/RoleNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/RoleNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/RoleNodeViewCardLayout/index.js","webpack:///./app/components/PolicyVersionWidget/PolicyEntryInfo.js","webpack:///./app/components/PolicyVersionWidget/index.js","webpack:///./app/containers/NodeViewLayouts/PolicyNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/PolicyNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/PolicyNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/PolicyNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/PolicyNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/PolicyNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/PolicyNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/ImageNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/ImageNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/ImageNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/ImageNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/ImageNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/ImageNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/ImageNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/NetworkConnectionsWidget.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/FilterAndPath.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/AccessWidget.js","webpack:///./app/containers/NodeViewLayouts/ComputeNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/GenericNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/ActionTypeNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/ActionTypeNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/ActionTypeNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/ActionTypeNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/ActionTypeNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/ActionTypeNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/ActionTypeNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/ActionNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/ActionNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/ActionNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/ActionNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/ActionNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/ActionNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/ActionNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/IdentityNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/IdentityNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/IdentityNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/IdentityNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/IdentityNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/IdentityNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/IdentityNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/GroupNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/GroupNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/GroupNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/GroupNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/GroupNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/GroupNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/GroupNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/AuditNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/AuditNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/AuditNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/AuditNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/AuditNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/AuditNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/SecretStoreNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/SecretStoreNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/SecretStoreNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/SecretStoreNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/SecretStoreNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/SecretStoreNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/SecretNodeViewCardLayout/AwsVaultSecret.js","webpack:///./app/containers/NodeViewLayouts/SecretNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/EncryptionKeyNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/EncryptionKeyNodeViewCardLayout/reducer.js","webpack:///./app/containers/NodeViewLayouts/EncryptionKeyNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/EncryptionKeyNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/EncryptionKeyNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/EncryptionKeyNodeViewCardLayout/index.js","webpack:///./app/containers/NodeViewLayouts/K8sClusterNodeViewCardLayout/loadable.js","webpack:///./app/containers/NodeViewLayouts/K8sNamespaceNodeViewCardLayout/loadable.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/loadable.js","webpack:///./app/containers/NodeSolutionCenter/reducers.js","webpack:///./app/containers/NodeSolutionCenter/sagas.js","webpack:///./app/containers/NodeSolutionCenter/index.js","webpack:///./app/containers/CreateUpdateTicketModal/constants.js","webpack:///./app/containers/CreateUpdateTicketModal/reducers.js","webpack:///./app/containers/CreateUpdateTicketModal/actions.js","webpack:///./app/containers/CreateUpdateTicketModal/queries.js","webpack:///./app/containers/CreateUpdateTicketModal/utils.js","webpack:///./app/containers/CreateUpdateTicketModal/sagas.js","webpack:///./app/containers/CreateUpdateTicketModal/selectors.js","webpack:///./app/containers/CreateUpdateTicketModal/messages.js","webpack:///./app/containers/CreateUpdateTicketModal/components/FormErrorMessage.js","webpack:///./app/containers/CreateUpdateTicketModal/DefaultFields.js","webpack:///./app/containers/CreateUpdateTicketModal/components/TemplateFieldCheckbox.js","webpack:///./app/containers/CreateUpdateTicketModal/components/TemplateFieldSelect.js","webpack:///./app/containers/CreateUpdateTicketModal/components/TemplateField.js","webpack:///./app/containers/CreateUpdateTicketModal/components/TemplateFields.js","webpack:///./app/containers/CreateUpdateTicketModal/TicketTemplateForm.js","webpack:///./app/containers/CreateUpdateTicketModal/index.js","webpack:///./app/utils/hookUtils.js","webpack:///./app/components/TicketTable/messages.js","webpack:///./app/components/TicketTable/TicketListColumns.js","webpack:///./app/components/TicketTable/TicketDetails.js","webpack:///./app/components/TicketTable/utils.js","webpack:///./app/components/TicketTable/AssignToUserModal.js","webpack:///./app/components/TicketTable/AcceptRiskModal.js","webpack:///./app/components/TicketTable/SnoozeModal.js","webpack:///./app/components/TicketTable/CommentModal.js","webpack:///./app/components/TicketTable/AddTagsModal.js","webpack:///./app/components/TicketTable/index.js","webpack:///./app/containers/UserProfileData/actions.js","webpack:///./app/containers/ThemeManager/ThemeContext.js","webpack:///./app/utils/widgetUtils.js","webpack:///./app/utils/reducerInjectors.js","webpack:///./app/utils/sagaInjectors.js","webpack:///./app/containers/TicketDetailsData/reducer.js","webpack:///./app/auth/hooks/sonrai-users-permissions.js","webpack:///./app/assets/iamghost.png","webpack:///./app/components/TicketStatusIcon/index.js","webpack:///./app/containers/LanguageProvider/reducer.js","webpack:///./app/containers/LanguageProvider/constants.js","webpack:///./app/reducers.js","webpack:///./app/containers/TicketDetailsData/utils.js","webpack:///./app/containers/TicketDetailsData/queries.js","webpack:///./app/containers/TicketDetailsData/sagas.js","webpack:///./app/components/GraphVis/VisNetwork.js","webpack:///./app/components/GraphVis/index.js","webpack:///./app/containers/PermissionChecker/WithoutPermission.js","webpack:///./app/components/FormLabel/index.js","webpack:///./app/utils/sonraiUtils.js","webpack:///./app/containers/NodeSolutionCenter/HeaderLabelLink.js","webpack:///./app/components/SmolExpand/index.js","webpack:///./app/components/Subscription/index.js","webpack:///./app/containers/NodeViewHeader/constants.js","webpack:///./app/containers/NodeViewHeader/actions.js","webpack:///./app/containers/NodeViewHeader/messages.js","webpack:///./app/containers/NodeViewHeader/AddSwimlaneForm.js","webpack:///./app/containers/NodeViewHeader/reducers.js","webpack:///./app/containers/NodeViewHeader/selectors.js","webpack:///./app/containers/NodeViewHeader/AddTagForm.js","webpack:///./app/containers/NodeSolutionCenter/messages.js","webpack:///./app/components/ChangeDetectionModal/EnableChangeDetection.js","webpack:///./app/components/ChangeDetectionModal/AddProperty.js","webpack:///./app/components/ChangeDetectionModal/EditProperty.js","webpack:///./app/components/ChangeDetectionModal/ManageChangeDetection.js","webpack:///./app/components/ChangeDetectionModal/index.js","webpack:///./app/containers/NodeViewHeader/ChangeDetectionActions.js","webpack:///./app/containers/Deploy/KeyVaultConfig.js","webpack:///./app/containers/NodeViewHeader/KeyVaultActions.js","webpack:///./app/containers/NodeViewHeader/sagas.js","webpack:///./app/containers/NodeViewHeader/index.js","webpack:///./app/containers/ControlFrameworkData/selectors.js","webpack:///./app/containers/SearchQuery/constants.js","webpack:///./app/auth/current-org.js","webpack:///./app/containers/EscalationData/constants.js","webpack:///./app/containers/DataClassifierData/selectors.js","webpack:///./app/components/WidgetPopup/ChangeDetectionPopup.js","webpack:///./app/components/WidgetPopup/index.js","webpack:///./app/containers/AccessActivity/constants.js","webpack:///./app/components/DidAccessWidget/index.js","webpack:///./app/components/AccessedUsingWidget/index.js","webpack:///./app/components/CanAccessWidget/index.js","webpack:///./app/components/ActivityFromRegions/index.js","webpack:///./app/components/PropertiesWidget/index.js","webpack:///./app/containers/AccessActivity/reducers.js","webpack:///./app/containers/AccessActivity/actions.js","webpack:///./app/containers/AccessActivity/sagas.js","webpack:///./app/containers/ChangeDetectionManager/selectors.js","webpack:///./app/containers/AccessActivity/UnderlyingActionsModal.js","webpack:///./app/containers/AccessActivity/index.js","webpack:///./app/containers/Activity/constants.js","webpack:///./app/containers/Activity/reducers.js","webpack:///./app/containers/Activity/actions.js","webpack:///./app/containers/Activity/selectors.js","webpack:///./app/containers/Activity/queries.js","webpack:///./app/containers/Activity/sagas.js","webpack:///./app/components/CustomDateRange/index.js","webpack:///./app/containers/Activity/PerformedActions.js","webpack:///./app/components/UnderlyingActionsModal/index.js","webpack:///./app/containers/Activity/index.js","webpack:///./app/components/EffectivePermissionWidget/index.js","webpack:///./app/containers/Access/messages.js","webpack:///./app/components/DirectPolicyWidget/index.js","webpack:///./app/utils/injectMultipleSagas.js","webpack:///./app/utils/injectMultipleReducers.js","webpack:///./app/containers/Access/constants.js","webpack:///./app/containers/Access/reducers.js","webpack:///./app/containers/Access/actions.js","webpack:///./app/containers/Access/sagas.js","webpack:///./app/containers/Access/selectors.js","webpack:///./app/containers/Access/index.js","webpack:///./app/containers/DataClassification/Loadable.js","webpack:///./app/components/DynamicHeightGrid/utils.js","webpack:///./app/components/DynamicHeightGrid/AutoLayout.js","webpack:///./app/components/DynamicHeightGrid/ColumnLayout.js","webpack:///./app/containers/NodeSolutionCenter/NodeView.js","webpack:///./app/components/CopyToClipboard/messages.js","webpack:///./app/components/CopyToClipboard/index.js","webpack:///./app/containers/TicketListFilterPanel/actions.js","webpack:///./app/utils/styleUtils.js","webpack:///./app/components/ImmutablePureComponent/index.js","webpack:///./app/containers/SearchQuery/actions.js","webpack:///./app/components/CombinedSearches/messages.js","webpack:///./app/components/CombinedSearches/index.js","webpack:///./app/containers/Search/actions.js","webpack:///./app/containers/DataClassification/constants.js","webpack:///./app/containers/SecurityCenter/constants.js","webpack:///./app/components/IconLayer/index.js","webpack:///./app/components/NodeView/NodeViewTabs.js","webpack:///./app/containers/SecurityCenter/selectors.js","webpack:///./app/containers/Tickets/messages.js","webpack:///./app/containers/SonraiData/sagas.js","webpack:///./app/containers/ControlFrameworkData/sagas.js","webpack:///./app/components/ImportanceWidget/index.js","webpack:///./app/components/IconCount/index.js","webpack:///./app/components/EmptyText/index.js","webpack:///./app/components/BotWidget/index.js","webpack:///./app/components/SonraiCountDisplay/index.js","webpack:///./app/components/TabBar/theme.js","webpack:///./app/components/TabBar/Tab.js","webpack:///./app/components/TabBar/index.js","webpack:///./app/components/BigStatWidget/BigStat.js","webpack:///./app/components/BigStatWidget/index.js","webpack:///./app/containers/TicketDetailsData/selectors.js","webpack:///./app/components/TableWidget/TableWidgetQueryResult.js","webpack:///./app/components/TableWidget/index.js","webpack:///./app/containers/Search/constants.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","2","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","ConfigValueHolder","configName","defaultValue","config","_","isUndefined","this","INITIAL_DELAY","MAX_DELAY","JITTER","MAX_ATTEMPTS","retryOnShutdownLink","onError","args","operation","networkError","forward","shouldRetryOnShutdown","delay","getValue","Observable","subscriber","next","complete","flatMap","statusCode","cache","InMemoryCache","createClient","httpLink","createHttpLink","uri","getGraphEndpoint","fetchOptions","authLink","setContext","headers","getCurrentToken","token","authorization","currentOrg","getCurrentOrg","warn","queryNameLink","previousContext","queryName","operationName","requestIDLink","uuid","timeStartLink","ApolloLink","start","performance","now","logTimeLink","map","logSlowQueriesTime","context","getContext","time","willRetryOnShutdown","errorLink","graphQLErrors","store","getStore","locations","path","dispatch","setGlobalError","auth0Client","getAuth0Client","getAuthDB","logoutEvent","LogoutEventType","UNAUTH_RESP","logout","link","concat","retryOnFailedLink","RetryLink","initial","max","jitter","attempts","ApolloClient","defaultOptions","query","fetchPolicy","errorPolicy","forceFetch","mutate","getClient","client","getData","createAction","GET_DATA","getDataSuccess","RELOAD_SWIMLANES","GET_DATA_SUCCESS","setSwimlaneDataLoading","SET_SWIMLANE_DATA_LOADING","getSwimlaneDataSucces","GET_SWIMLANE_DATA_SUCCESS","setSwimlaneDataFailure","SET_SWIMLANE_DATA_FAILURE","getCrmDataSuccess","GET_CRM_DATA_SUCCESS","clearData","REMAINING_TAG_SEARCH","CLEAR_DATA","setResourceMonitoring","GET_TAG_OPTIONS","GET_TAG_OPTIONS_SUCCESS","SET_RESOURCE_MONITORING","toggleResourceMonitoring","TOGGLE_RESOURCE_MONITORING","getTicketCount","GET_TICKET_COUNT","setTicketCount","SET_TICKET_COUNT","setShouldUpdateNodeSwimlanes","SET_SHOULD_UPDATE_NODE_SWIMLANES","fetchEffectivePermissionsForActor","FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR","fetchEffectivePermissionsForActorSuccess","FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR_SUCCESS","fetchUberPolicy","FETCH_UBER_POLICY","fetchUberPolicyError","FETCH_UBER_POLICY_ERROR","fetchUberPolicySuccess","FETCH_UBER_POLICY_SUCCESS","getCrmTickets","GET_CRM_TICKETS","setCrmTickets","SET_CRM_TICKETS","FETCH_CUSTOM_CLASSIFIERS","SET_CUSTOM_CLASSIFIERS","SET_CUSTOM_CLASSIFIERS_ERROR","CREATE_CUSTOM_CLASSIFIER","CREATE_CUSTOM_CLASSIFIER_SUCCESS","CREATE_CUSTOM_CLASSIFIER_ERROR","UPDATE_CUSTOM_CLASSIFIERS","UPDATE_CUSTOM_CLASSIFIERS_SUCCESS","UPDATE_CUSTOM_CLASSIFIERS_ERROR","DELETE_CUSTOM_CLASSIFIERS","DELETE_CUSTOM_CLASSIFIERS_SUCCESS","DELETE_CUSTOM_CLASSIFIERS_ERROR","CenterContent","children","horizontalOnly","style","container","display","justifyItems","alignItems","textAlign","defaultProps","Hoverable","props","setState","hovered","styles","base","cursor","disabled","transition","state","hoverStyle","renderContent","pprops","finalStyle","onMouseEnter","startHover","onMouseLeave","endHover","React","PureComponent","supportedConfigs","label","cloudType","__type","CLASSIFICATION_TYPE_BUCKET","serviceType","CLASSIFICATION_TYPE_DB","__auth","AUTH_MODE_USERNAME_KV","__parent","AUTH_MODE_USERNAME_SECRETMGR","hasOnlyClassifications","withValidNodeData","utilFunc","utilFuncWithValidation","nodeData","isImmutable","fromJS","hasClassifications","findMatchingconfig","isClassificationSupported","isDB","getAuthMode","configs","doesConfigMatch","configKeys","keys","filter","startsWith","fieldsFromNodeData","pick","propsMatch","isEqual","parentMatches","getParents","find","parent","isBase64Encoded","sample","match","isValidPEM","keyData","lines","split","debug","headerSegments","footerSegments","doIfValidInt","callback","includes","asNumber","Number","formatDataForDataAnatomy","getIn","List","schema","tables","size","srn","table","column","columns","toResoucreIdMap","toSwimlaneMap","alreadyFetched","Set","refreshSwimlanes","getState","swimlanes","selectSwimlanes","createResourceMap","toJS","values","updateResourceMaps","fetchSwimlaneByResouceId","resourceId","gql","getSwimlaneAndUpdate","variables","fetchSwimlaneBySrn","queryFetch","swimlane","isSrn","val","createGetResourceId","initialized","setLoading","has","add","createGetSwimalneSRN","mapStateToProps","createStructuredSelector","queryTypes","selectQueryTypes","withConnect","connect","compose","WrappedComponent","comp","setInitialized","user","useAuth0","useState","useEffect","getResourceId","getSwimlaneSRN","permissions","useSonraiUserPermissions","userData","userHasPermission","permissionName","isFunction","id","username","org","identity","displayName","getDisplayName","LOAD_USER","FETCH_USER_PROFILE","SET_USER_PROFILE","SAVE_USER_PROFILE","HIDE_SOLUTION_CARD","UNHIDE_SOLUTION_CARDS","SET_USER_PROFILE_TABLES","ACCEPT_LICENSE","SET_SECURITY_CENTER_WELCOME_MODAL","TOGGLE_SWIMLANE_MANAGER","SET_SONRAI_USER_SRN","SET_USER_PROFILE_ERROR","TextLink","theme","neutralLight","primary","light","neutralMedium","color","Color","darken","secondary","red","fontWeight","to","newTab","invert","getInvertedColor","getColor","onClick","typeColors","themeable","SectionHeader","small","marginTop","fontSize","ResponsiveGridLayout","SizeMe","Responsive","grid","overflow","padding","NodeViewBody","breakpoints","lg","md","sm","xs","className","cols","rowHeight","margin","measureBeforeMount","useCSSTransforms","layouts","isDraggable","isResizable","Component","PreviewCard","gridTemplateRows","gridTemplateAreas","height","header","gridTemplateColumns","gridArea","body","overflowY","overflowX","nameContainer","whiteSpace","textOverflow","textDecoration","headerContent","iconMenu","alignSelf","selectedSrn","title","getNodeViewPushParams","getTypeFromSrn","truncateMiddle","friendlyName","actions","NodeViewDetails","fields","detailStyle","marginBottom","Radium","nodeSolutionCenterDomain","Map","selectData","createSelector","nodeSolutionCenter","selectTagOptions","selectSonraiTags","tags","selectDetailsLoading","selectNodeId","nodeId","qs","parse","location","search","selectFields","types","toLowerCase","toSkip","SKIP_PROPERTIES","getFieldsForType","field","selectNodeData","selectIsMonitored","selectShouldUpdateNodeSwimlanes","selectEffectivePermissions","selectUsedEffectivePermissions","selectEffectivePermissionsLoading","selectUsedEffectivePermissionsLoading","selectUberPolicy","selectTicketCount","selectCrmTickets","PopoverBody","propTypes","PropTypes","node","PopoverAnchor","Popover","onVisibilityChange","onToggle","tooltipShown","isOpen","placement","position","trigger","tooltip","arrowRef","tooltipRef","getArrowProps","getTooltipProps","ref","borderless","getTriggerProps","triggerRef","RESTART_ON_REMOUNT","DAEMON","ONCE_TILL_UNMOUNT","ComposedComponent","options","monitorWidth","monitorHeight","refreshRate","refreshMode","sizeMeHOC","sizeMe","width","DynamicFormattedMessage","defaultMessage","DropdownMenu","toggle","Children","child","cloneElement","DropdownItem","option","borderBottom","BorderlessButton","clickOption","InlineDropdownAnchor","DropdownToggle","tag","data-toggle","caret","selectedOption","DropdownAnchor","border","defaultprops","Dropdown","dropdownExpanded","currentState","defaultOption","checkForValues","selectedValue","forEach","toggleDropdown","isPlainObject","SonraiBadge","SwimlaneDisplay","hasTooltip","place","effect","clickable","getSwimlaneSrnFromResourceId","textStyle","justifyContent","clipboardButton","hasLink","hasCopy","getSwimlaneNameFromSrn","pathname","stringify","getSwimlaneTooltip","static","content","transform","locals","ChartTooltip","onHover","onEndHover","colorShadow","borderRadius","backgroundColor","marginRight","marginLeft","colorLib","hex","boxShadow","alpha","rgb","string","displayStyles","filterMatch","JsonView","obj","stringifiedText","setStringifiedText","onStringify","isObject","JSON","jsonText","tokens","CodeMirror","runMode","json","tokenStyles","trim","reduce","allStyles","highlightText","assign","initialState","changeDectionOptions","loading","ticketList","ticketListFilter","handleActions","FETCH_CD_OPTIONS","setIn","FETCH_CD_OPTIONS_ERROR","FETCH_CD_OPTIONS_SUCCESS","payload","FETCH_TICKET_LIST","FETCH_TICKET_LIST_ERROR","FETCH_TICKET_LIST_SUCCESS","SET_TICKET_LIST_FILTER","currentTicketFilterState","updated","nextState","delete","set","CLEAR_TICKET_LIST_FILTER","selectTicketListFilterPanel","fa","spin","EditPolicyModal","policyDescription","policyEvalOp","opt","policyRemediationType","parsed","parseInt","policyEvalTarget","isNaN","policyEvalType","evalCriteria","updatePolicy","description","searchId","selectedSearchSrn","policy","alertingLevelNumeric","remediationType","selectedSearchValue","firstCriteriaKey","keySeq","first","POLICY_EVAL_TYPES","COUNT","POLICY_OP_TYPES","GT","oldProps","saving","exists","messages","editPolicyHeader","onAlertingLevelNumericChange","setPolicyEvalTarget","setPolicyTitle","setPolicyDescription","setPolicyEvalType","setPolicyEvalOp","setSelectedSearch","sonraiSearches","savedSearches","setPolicyRemediationType","cancelButton","handleSave","saveEditButton","selectSaving","selectSavedSearches","selectSonraiSearches","bindActionCreators","selectPolicyViewDomain","selectPolicy","selectDeleting","selectPolicyId","policyId","selectUserFrameworkIds","selectControlFrameworksForUser","frameworks","cf","displayAsEnabled","controlFramework","getPropertyOrWarn","isOwnedBySuperSonrai","isFrameworkEnabled","items","frameworkHasClone","defaultVal","defineMessages","actionErrorAcceptRiskTicket","actionErrorCloseTicket","actionErrorReopenTicket","actionErrorSnoozeTicket","actionErrorReassign","assignToMe","assignToMeError","customFields","na","fetchSimilarTicketsError","notFoundMessage","errorHeaderText","poilcyEvidenceLegacyLoadError","snoozeModalHeaderText","reassignModalHeaderText","reassignModalOKText","snoozeModalHeaderInstructions","snoozeModalOKText","snoozeModalCancelText","unassigned","ContentContainer","styled","div","MessageContainer","h3","TicketNotFound","NEXT_STEP","PREV_STEP","RESET_STATE","SELECT_BOT","FETCH_ALL_ESCALATIONS","SUBMIT_AUTO_REMEDIATE","allEscalations","step","selectedBot","submitAutoRemediateStatus","notAccepted","noCollectorMatched","ticketAutoRemediateWizard","merge","nextStep","prevStep","resetState","selectBot","fetchAllEscalations","fetchAllEscalationsError","fetchAllEscalationsSucccess","submitAutoRemediate","submitAutoRemediateSuccess","submitAutoRemediateNotAccepted","submitAutoRemediateNoCollectorMatched","submitAutoRemediateError","FETCH_ALL_ESCALATIONS_QUERY","SUBMIT_AUTO_REMEDIATE_QUERY","ticketAutoRemediateWizardSaga","put","action","mutation","input","ticktSrn","ticket","botSrn","bot","select","selectTicketDetails","ticketDetails","status","fetchTicketDetailsSuccess","takeLatest","selectDomain","selectAllEscallations","selectStep","selectSelectedBot","selectSubmitAutoRemediateStatus","autoremediate","back","modalTitle","botDescriptionLabel","botTitleLabel","botTypeLabel","chooseBotPrompt","chooseDifferentBot","ok","noBots","noSuggestedBots","showingAllBots","showAll","showingSuggestedBots","showSuggested","step1Instructions","step2Instructions","step2PolicyLabel","submitErrorMessage","submitNotAcceptedMessage","submitNoCollectorMatchedMessage","submitSuccessMessage","getSuggestedBots","bots","escalations","escalation","escalationIsForTicket","getEscalationsBots","ticketKey","botsBySrn","keyBy","botsInrules","rule","uniqBy","DataTableContainer","BarLoadingAnimation","Step1","extraInstructions","showAllBots","setShowAllBots","formattedData","resource","account","getCloudFromSrn","cloud","blob","formatTableData","allEscallations","DataTable","autosize","hasCheckBoxes","customColumnConfig","hide","flex","customGridProps","rowSelection","rowSelected","supressSelectAll","TombstoneInfoContainer","PolicyContainer","Step2","policyJSON","setPolicyJSON","top","right","Step3","ModalHeaderContainer","ModalFootControls","StepSwitch","isNextDisabled","isPrevDisabled","selectBots","getBots","withReducer","injectReducer","reducer","withSaga","injectSaga","saga","sagas","isEmpty","filters","Modal","close","ModalHeader","ModalBody","ModalFooter","Button","outline","nextButtonOnClick","getNextButtonText","SNOOZE_UNTIL_OPTIONS","DAYS_7","DAYS_14","DAYS_30","DAYS_90","DAYS_180","DAYS_1YEAR","SnoozeTicketModal","snoozeUntil","setSnoozeUntil","clearAndClose","Select","onChange","snoozeTicket","snoozedUntil","moment","format","Icon","mapStatetoProps","selectAssignToMe","currentUserSrn","selectSonraiUserSrn","userSrn","ticketSrn","data-tip","data-for","ReassignToUserModal","setUser","users","toList","adminScope","srns","roleAssignmentsByScope","roleAssignments","roleAssignment","getRoleAssignmentsByScope","swimlaneSRNs","swimlaneSrn","scope","hasPermission","getUserOptions","item","formatOptionLabel","UserWidget","noLink","left","reassignToUser","TICKET_ACTIONS","EDIT","displayOnlyForTypes","hideForStatuses","SNOOZE","ACCEPT_RISK","REOPEN","RESOLVE","REASSIGN","REMEDIATE","LoadingIconContainer","span","TicketDetailsHeaderActions","activeButton","dropdownToggle","handleSelectAction","ticketType","index","handleChangeAction","hadResourceDeleted","oldState","closeTicket","acceptRiskTicket","snoozeTicketModalOpen","reopenTicket","reassignToUserModalOpen","autoRemediateWizardOpen","updateTicketModalOpen","defaultTicketAction","getActions","actionStatus","reassignToUserStatus","CreateUpdateTicketModal","update","permissionChecker","TicketDetailsHeaderProperties","flexDirection","accountLink","severityCategory","Badge","severity","fail","info","getBackgroundColor","startCase","getNameFromSrn","CloudAccount","accountSrn","accountId","getAlertLevel","getResourceLink","getAccount","getSwimlanes","ErrorChangeStatusModal","errorMessageKey","acceptRiskTicketStatus","closeTicketStatus","snoozeTicketStatus","reopenTicketStatus","TicketDetailsHeader","gridGap","snoozeLabel","letterSpacing","textTransform","resolvedLabel","success","secondaryContainer","indicatorText","fontStyle","lowerCase","actionErrorModalOpen","prevProps","getFriendlyTicketName","policies","isSnoozed","isResolved","BorderedCard","renderSnoozeIndication","renderResolvedIndication","selectActionStatus","selectAcceptRiskTicketStatus","selectCloseTicketStatus","selectReopenTicketStatus","selectSnoozeTicketStatus","selectReassignToUserStatus","selectPolicies","selectSonraiUsers","regex","fontFamily","propName","nodeValue","filterOutStandardSearchArgs","arg","configValue","op","isList","filteredAccounts","nonGlobal","getMultiValuesFromString","join","getPropOfInterest","alertTime","nodeType","configValues","numeric","joinedNodeVal","triggerCondition","withoutEscapes","replace","RegExp","test","Math","abs","offsetDate","subtract","isBefore","isMap","offsetArg","alertDate","nodeDate","compareToDate","isAfter","compareDateField","str","toString","endsWith","firstDate","secondDate","isBetween","Array","isArray","getFieldsOfInterest","allTriggerProps","propsOfInterest","getRelationshipsOfInterest","relationsOfInterest","nodeRelations","typename","countValue","getRelationOfInterest","getFieldsOfInterestForCard","rootSearchField","results","rootResultArgs","nodeArgs","importantArgs","getEffectivePermissionsOfInterestForCard","effectivePermissions","epList","perm","group","poi","groupResults","getRelationsOfInterestForCard","relationshipArgs","PolicySearchConditions","searchCard","cardConditions","cardRelations","cardEffectivePermissions","allCardRelations","allCardConditions","allCardEffectivePermissions","nonGte0Relations","relation","getTypeFromDefinition","nearestParentWithContent","getNearestParentWithContent","nearestParentNameWithContent","getDisplayNameFromCard","showContentForCard","gridColumnGap","getIconMapping","faIcon","cond","Expandable","epGroup","borderLeft","paddingLeft","cardId","childCardRelationName","childCardRelation","rel","childCard","getAliasForField","renderTriggerConditions","curr","parentConditions","parentRelations","parentEffectivePermissions","parentHasContent","card","cardName","flattenRootItem","rootItem","flattenedRootItems","flattenData","actualItem","epField","hasEffectivePermissions","temp","ic","epParentType","__typename","row1","allKeys","parentKeys","k","lastParentKey","last","epKeys","insertAtBase","indexOf","getAnalyticResultColumns","sampleRow","objectColumns","EmptyText","TicketPolicyEvidence","useLegacyPolicyEvidence","policyEvidenceLegacy","policyEvidence","isString","getPolicyEvidence","hasSubValues","prop","searchWithFields","searches","advancedSearch","advancedSearches","isAnalyticQuery","f","PathWidget","fitAllRows","pageSize","exportFileName","jsonCols","ShowPath","titleName","accessPaths","getPath","onDoubleClick","emphasisNodes","sourceId","SquareLoadingAnimation","CRMAlertDetails","zIndex","tableHeightWrapper","pathHeightWrapper","nodes","nav","evidence","alert","onDoubleClickPathNode","classification","actionableByMode","srnIsCRMActionable","activeAlertActionsLoading","activeAlertActions","showHeader","hiddenColumns","onClickNodeView","handleActionsNav","prevVal","currVal","hasBoolEvidence","hasStringEvidence","hasIntEvidence","hasLongEvidence","String","nextProps","renderAccessAlert","renderActivityAlert","renderPropertyAlert","TicketCRMEvidence","fetchActivityTicketActions","activityTicketActions","selectActivityTicketActions","TicketEvidence","DetailsTab","resourceTop","propertyLabel","cfBadges","flexWrap","propLabel","tooltipLabel","li","listStyleType","getPolicy","searchLocationParams","policyNavLink","searchName","controlGroups","controlGroupId","Pill","SavedSearchDisplay","MarkdownDisplay","fieldName","resourceSet","getEvidenceData","regionSet","userAgentSet","hasPolicy","hasNoResource","NodeViewHeader","horizontal","showRemediationModal","renderTicketEvidence","getPolicyInfo","policyPath","Comment","isLast","isFirst","paddingBottom","profileIcon","timestamp","comment","fromNow","ProfileIcon","img","TicketCommentsDisplay","secondayContainer","minHeight","empty","createdBy","ticketComments","comments","sort","a","b","getUser","AddTicketComment","pointerEvents","footer","addComment","currentUser","isDisabled","isEditDisabled","MarkdownEditor","handleBlur","onKeyStroke","handleChange","handleAddComment","addCommentError","TicketCommentsTab","fetchTicketComments","count","selectTicketComments","selectAddCommentError","TicketHistoryTab","actionType","ticketHistory","sortBy","hist","reverse","formatEvent","performedBy","actorSrn","succeeded","date","createdDate","fetchTicketHistory","minWidth","cellRendererFramework","BotWidget","selectTicketHistory","filterToReduxState","mapValues","filterFromReduxState","SimilarTicketsTab","fetchSimilarTickets","fetchTickets","similarTickets","prevState","changeSimilarTicketsFilters","TicketList","ticketListFilters","handleTicketListFilters","handleFilterChange","noModal","refreshData","selectSimilarTickets","usersLoading","selectSonraiUsersLoading","TicketDetailsTabs","tabContainer","borderTop","borderRight","requiresLegacyPolicyEvidence","fetchPolicyEvidenceLegacy","fetchPolicyPath","resourceSrn","NodeView","changeDetectionOptions","swimlanesLoading","selectControlGroups","selectSwimlanesLoading","selectChangeDetectionOptions","selectPolicyEvidenceLegacy","selectPolicyPath","twentyFour","fourtyEight","Escalation","lighten","details","timeText","nextAssigne","CloudBadge","botId","rules","getNextAssigne","getBotEscalation","toLower","hasError","paddingTop","getTime","renderRules","TicketDetailsEscalation","propertiesContainer","maxWidth","wordWrap","CreatedByBadge","customField","getCustomFieldValue","hasEscalationError","isNull","hasEscalationWidget","TicketStatusIcon","getCreatedBy","RemediationModal","policySrn","initialPolicy","selectedPolicy","setPolicy","tabIndex","setTabIndex","hasMonitoredActionsPolicy","setHasMonitoredActionsPolicy","fullPolicy","policyDiffContainer","selectContainer","policyDiffHeader","policyDiffTitleContainer","modalBody","maxHeight","monitoredActionsPolicy","REMEDIATION_TYPES","UPDATE_POLICY","FormLabel","ButtonGroup","currentPol","currentPolicy","suggestedPol","oldCode","newCode","past","current","drawFileList","renderPolicyDiffView","remediation","CodeBlock","Ticket","ticketPolicy","fetchTicketDetails","loadingContainer","canBeRemediated","hasRemediation","hideRemediationModal","SplitterLayout","customClassName","ContextMenu","coords","button","box","text","selectExplorerDomain","selectSourceNodes","selectIsLoading","selectAvailableFilters","selectNodes","selectSelectedNode","selectNodePreview","selectNodePreviewRelations","selectIsLoadingNodePreview","selectHiddenNodes","selectExpandedNodeTypes","selectIsLoadingNodes","GET_SOURCE_NODE","GET_MULTI_SOURCE_NODES","GET_RELATIONS","GET_NODE_PREVIEW","GET_NODE_PREVIEW_RELATIONS","HANDLE_EXPAND","sourceNodes","isLoading","selectedNode","availableFilters","isLoadingNodePreview","nodePreview","nodePreviewRelations","hiddenNodes","expandedNodeTypes","isLoadingNodes","explorerReducer","allNodes","childNodeIds","newNodes","x","EXPLORER_VIEW_TYPES","EXPLORER","relations","y","newState","relationsForType","currentRelations","deleteIn","clearRelations","removeDeselectedNodes","parentNodes","selected","currentParents","contains","isSourceNode","parents","stateNodes","nodesToHide","listOfSrnsToHide","newHiddenNodes","updatedExpandedNodeTypes","currentNode","getSourceNode","getMultiSourceNodes","setSourceNodes","getRelations","setRelations","removeRelations","setFilter","removeFilter","selectNode","setAvailableFilters","clearGraph","getNodePreview","setNodePreview","loadAllChildren","clearFilters","removeNode","getNodePreviewRelations","setNodePreviewRelations","handleExpand","handleHide","handleShow","loadNodes","handleUpdate","getRelationsOnType","fetchRelationsOnSourceNodes","getRelationsOnNodePreview","explorerSaga","uniqByLabel","arrOfExpandableNodeTypes","listOfSrns","listOfSrnsToExpand","resultsToDisplay","DEFAULT_EXPLORER_LIMIT","entity","entityRelations","FETCH_ACTIONS_RELATIONS_QUERY","FETCH_ALL_TYPES_RELATIONS_QUERY","sourceNodeId","Entities","MULTI_FETCH_ALL_TYPES_RELATIONS_QUERY","sourceNodeIds","ids","FETCH_ACCOUNT_SOURCE_NODES_QUERY","groupedRelations","newRelation","typeRelations","typedRelations","itemFilter","GET_RELATIONS_QUERY","limit","Resources","skipValues","TimeoutLoader","firstMessage","finalMessage","NodePreview","closeButton","paddingRight","filterTitle","disabledSelectAll","selectHeader","moreButton","getNodeInfoQuery","queryNames","filterForLabel","typeArr","newValue","actionMeta","caseSensitive","removedValue","selectedType","localeCompare","isActive","getGenericQuery","nodeConfig","getFullType","itemType","availableRelations","computeAvailableFilters","queryRelations","selectOptions","getOptions","getValues","getPreviewFields","handleSelectAll","isMulti","components","makeAnimated","handleChildFilter","colourStyles","selectQueryNames","selectQueryRelations","help","helpKey","iconSize","NodeSearch","isNewVal","existingSearches","localStorage","getItem","list","setItem","setTerms","placeholder","multiValue","multiValueLabel","multiValueRemove","opacity","iconContainer","filterIcon","localStorageValues","toggleFilterPanel","filterActive","emphasis","onMenuOpen","onMenuClose","InputGroupAddon","addonType","InputGroupText","FilterPanel","filterBar","buttonContainer","entityTitle","entityContainer","filterBarContainer","labels","nodeTypesToCollapse","updatedNodes","sum","getCount","warningModal","int","newArr","entityTypes","isHidden","iconName","Checkbox","handleChecked","checked","scale","Tooltip","anchor","tooltipContent","updateNodes","sourceNode","isResetDisabled","handleReset","isCollapseDisabled","handleCollapse","handleModalCancel","handleModalConfirm","renderWarningModal","InputGroup","Input","handleFilter","getFilterBar","renderEntityTypes","LoadingAnim","Explorer","resizing","resizeTimer","nodesToDisplay","allRelations","relationType","itemId","attachedToId","direction","terms","viewType","TABLE","handleRemoveNode","term","isMatch","getAccountFromSrn","uniq","isDragging","graphContainer","GraphVis","onContext","handleContext","edges","getEdges","getNodes","handleSelect","handleDoubleClick","renderContextMenu","nodePreviewContainer","from","enter","leave","nodePreviewMessage","searchContainer","showTableIcon","toggleViewType","updateDimensions","TableWidget","disableToolbar","onDoubleClickNodeView","getTableWidgetData","LAYERS","TOOLBAR","filterPanel","iconCenteredContainer","tableContainer","history","incNodes","params","addEventListener","removeEventListener","getEntityTypes","onDragStart","onDragEnd","renderGraph","renderTable","ALERT_TYPES","formatMap","sliceBySeverity","tickets","groupingMap","groupBy","childrenValues","getTitleForSeverity","getAlertLevelColorHML","groupByTicketType","keyName","keyValue","getTitleForAlertType","getColorForAlertType","groupByTicketKey","controlPolicies","sliceColor","colorForStringLib","colorBySeverity","shiftColorForSeverity","groupByLabel","alerts","resourceLabel","colorForEntityString","groupBySwimlane","swimlaneSrns","originalColor","HMLSeverity","baseHue","hue","SEVERITY_CATEGORIES","HIGH","MEDIUM","LOW","EmptyWidgetResults","SunburstPieChart","apexChartInstance","series","toggleSeriesOnHover","bottom","chart","offsetY","toolbar","show","animations","enabled","events","beforeMount","dataPointSelection","onClickPoint","yLabels","dataPointIndex","yValues","displayLabels","yValueDisplayLabels","sectionTitle","dataLabels","xaxis","categories","colors","legend","states","active","Scrollable","noShadow","ChartLegendEntry","renderScrollableLegend","SunburstMultiView","gridRowGap","noSwimlane","alertLog","groupMap","countMap","getAlertCounts","sortedKeys","orderBy","slices","nameMap","controlFrameworkId","controlFrameworkName","controlFrameworks","colorForString","entry","displayLabel","onClickSlice","swimlanePieChartData","getSwimlanePieChartData","deduped","dedupeDataBySwimlane","severityPieChartData","getSeverityPieChartData","resourceLabelPieChartData","getResourceLabelPieChartData","ticketTypePieChartData","getTicketTypePieChartData","keyNamePieChartData","getKeyNamePieChartData","handleClick","Breadcrumb","isLight","HEIGHT","sqrt","SunburstBreadcrumb","SunburstLegend","legendEntry","legendFilters","onClickLegend","uniqueItems","getLegend","depth","previousVal","hasNewDepth","wrapperStyle","isSunburstViewMulti","matchesFilter","onReset","getLegendItems","BounceLoadingAnimation","SunburstVis","rollup","keyPath","updateData","fillOpacity","getHoverKeyPath","originalData","clickedPath","hoverPath","hoveredNode","root","clickedSlice","slicePath","findSlicePath","visData","sliceId","found","unshift","showingOutermostValue","pathAsMap","res","row","hoveredTooltip","startingData","preFilters","foundRepeatedValue","usedKeys","finalPath","checkChildren","childResult","hoveredCell","radius","truedAngle","angle","angle0","defaultLocation","cos","sin","contrast","renderMultiviewBreadcrumbs","renderSunburstBreadcrumbs","toggleSunburstView","horizontalScrollOnly","reset","renderBreadcrumb","lineHeight","renderHoverBreadcrumb","pieBreadcrumbs","resetPie","filteredData","dataFormatter","onChangeLegendFilter","onClickPie","currState","pieVariables","centerBasedCoords","buildValue","align","vertical","onTooltipHover","onTooltipEndHover","childcount","preFiltered","getPreselectedPath","selectedSlice","hasNoChildren","isNotPrefiltered","renderBreadcrumbs","onClickPieSlice","animation","hideRootNode","onValueMouseOver","onValueMouseOut","onHoverLeave","onValueClick","stroke","strokeWidth","colorType","getSize","renderTooltip","resources","resourcesLoading","selectedResourceAlerts","categoryRollupData","categoryRollupLoading","alertListLoading","rapSheetReducer","FETCH_FILTERED_ALERTS","FETCH_CATEGORY_ROLLUP_DATA","SET_CATEGORY_ROLLUP_DATA","SET_RESOURCES","SET_RESOURCES_LOADING","SET_SELECTED_RESOURCE_ALERT_HISTORY","TOGGLE_SUNBURST_VIEW","UPDATE_RAPSHEET_RESOURCE_MONITOR","updateIn","newResource","isMonitored","oldConfig","fetchCategoryRollupData","fetchResourcesForAlerts","fetchFilteredAlerts","handleTicketStatusChanged","rapsheetSaga","getStatusString","defValue","TICKET_STATUS","NEW","IN_PROGRESS","category","visFilters","policyIds","pol","displayStatus","resourceSRN","categoryRollups","TicketRollups","dataWithControlFrameworks","mapPoliciesToControlFrameworks","ticketRollup","setCategoryRollupData","highestMatchingSeveritiesBySrn","lastAlertDateBySrn","uniqueSrns","severityNumeric","srnList","entities","visResources","lastAlertDate","highestAlertSeverity","getStatus","fetchResources","setResourcesLoading","setSelectedResourceAlertHistory","setResources","subKeyName","actionClassification","ticketFilter","Tickets","performTicketFetch","newStatus","selectStatus","statusFilter","selectSelectedResourceAlerts","wasClosed","CLOSED","SNOOZED","RISK_ACCEPTED","filterNot","TICKET_STATUS_CHANGE_SUCCESS","RapSheetAlerts","setAlertsCount","setAlertCounts","getHeightForPage","TicketTable","columnConfig","objective","pinned","objectives","RapSheet","wrapper","vis","overrideValues","selectedSwimlaneName","selectedCategory","updateAlerts","clickedSliceFilters","onFilterChange","filterVariables","keyType","includeLabel","swimlanesBySrn","formatSunburstData","onClickSunburst","selectedResourceId","fetchObjectives","sunburstlegendFilters","updateAllData","frameworksLoaded","loadedControlPolicies","loadedControlGroups","datesChanged","objectivesLoading","renderVis","renderAlerts","fromDate","toISOString","toDate","selectAlertListLoading","selectCategoryRollupData","selectCategoryRollupLoading","selectLoadedPolicies","selectLoadedControlGroups","selectResources","selectSwimlanesBySrn","selectIsSunburstViewMulti","selectQueryStringTicketSrn","selectObjectives","selectObjectivesLoading","rsSaga","ticketListFilterPanelReducer","SET_TICKET_LIST_FILTER_PANEL","updatedState","TicketListFilterPanel","filterList","filterHeader","filterPanelFooter","selectedOptions","policyOptions","propertyOptions","snakeCase","capitalize","activityOptions","accessOptions","clearTicketListFilter","setTicketListFilterPanel","togglePanel","handleClear","SelectBar","autoSort","handleSeverityChange","isClearable","handleTicketTypeChange","handleTicketKeyChange","getTicketKeyLabel","getTicketKeyOptions","handleSwimlaneSrnsChange","getSwimlaneLabel","handleResourceSrnChange","applyFilters","injectIntl","ErrorMessageContainer","TicketListBody","fetchErrorMessage","customFilter","overlayNoRowsTemplate","icon","fixed","getIconClassName","faDoorOpen","faMapMarker","faKey","faGlobeAmericas","faHeartRate","faTerminal","faUserSecret","faClipboardListCheck","faLayerGroup","faFolder","faUsers","faPencilAlt","faGlobe","faAddressBook","faAngleDoubleRight","faAngleRight","faAngleLeft","faArrowToTop","faArrowToBottom","faBinoculars","faBracketsCurly","faBrowser","faBuilding","faBug","faBullseye","faBroadcastTower","faCameraRetro","faCity","faPlay","faArrowRight","faQuestionCircle","faHeartbeat","faRobot","faLevelUpAlt","faServer","faStar","faArchive","faArrows","faBan","faBox","faClock","faUpload","faBell","faSearch","faSignIn","faUser","faInfo","faCube","faCubes","faHdd","faShield","faDigging","faNetworkWired","faShieldCheck","faCompressWide","faExpandWide","faExpand","faChartPieAlt","faCompactDisc","faCaretDown","faCogSolid","faDatabase","faExchange","faFolders","faCaretLeft","faCaretRight","faSearchengin","faSlack","faCaretUp","faStepBackward","faIdBadge","faDharmachakra","faChartPie","faChartBar","faChartNetwork","faClipboard","faClipboardList","faCloud","faIdCard","faExclamationTriangle","faChartLine","faCalendarTimes","faCloudUpload","faCode","faArrowDown","faArrowLeft","faExclamationTriangleSolid","faArrowUp","faSortAmountDown","faCompress","faCircle","faTasks","faWindowClose","faDivide","faExpandArrowsAlt","faCircleSolid","faCodeMerge","faCogs","faContainerStorage","faCopy","faObjectGroup","faObjectUngroup","faTimes","faTimesCircle","faDiamond","faEllipsisV","faExclamationSquare","faFrown","faGripHorizontal","faHashtag","faLightbulb","faExclamation","faMapSigns","faMapMarkerAlt","faMask","faMinus","faMinusCircle","faMicrochip","faMousePointer","faEye","faEyeSlash","faFileAlt","faFilter","faFile","faFileInvoice","faFileSignature","faFileCertificate","faFilterSolid","faPlug","faListOl","faList","faListAlt","faLocationArrow","faLock","faLockAlt","hollowLock","faLockOpen","faPlus","faPowerOff","faQuestion","faQrcode","faSearchMinus","faSearchPlus","faReply","faRocket","faScroll","faSave","faSitemap","faSquare","faTachometer","faTable","faClone","faThumbsUp","faThumbtackSolid","faTrashAlt","faTools","faCheck","faCheckCircle","faCheckCircleSolid","faUserLight","faUserTag","faUsersCog","faUserCircle","faUserHeadset","faWindows","faGoogle","faAws","faExclamationCircleSolid","faExclamationCircle","faInfoCircle","faCog","faExternalLinkAlt","faThumbtack","faSyncAlt","faSync","faSpinner","faBellLight","faPlusCircle","faUndo","faUniversity","faColumns","faLink","faBars","faChevronRight","faChevronLeft","faGlasses","faStamp","faTag","faTags","faLaptopCode","faLongArrowAltUp","faLongArrowAltDown","faWarehouseAlt","faFileContract","faCommentAltPlus","faCommentsAlt","sonrailogo","gcplogo","gcplogowhite","hashicorpvaultlogo","hashicorplogo","kuberneteslogo","servicenowlogo","slacklogo","jiralogo","getFaIconClass","pulse","png","getIconPng","getFAIcon","buildClassName","selectAccessActivity","selectCriticalResourceMonitorDate","selectPropertyWidget","selectDidAccessData","selectCanAccessData","selectAccessedUsingData","selectActivityWidget","selectSelectedRowActions","selectActionsModal","selectSelectedRowActionsLoading","selectAccessPaths","canAccessData","selectCanAccessPaths","selectCanAccessPathsLoading","selectCanAccessPathsError","selectLastCanAccessJobTimestamp","GET_PREVIEW_RESULTS","SET_PREVIEW_RESULTS","CREATE_SWIMLANE","CREATE_SWIMLANE_SUCCESS","DELETE_SWIMLANE","DELETE_SWIMLANE_SUCCESS","SET_EDITING_SWIMLANE_SRN","UPDATE_SWIMLANE","UPDATE_SWIMLANE_SUCCESS","SET_UPDATE_SWIMLANE_ERROR","GET_TAG_VALUES","SET_TAG_VALUES","GET_CONTROL_FRAMEWORKS_FOR_SWIMLANE","SET_CONTROL_FRAMEWORKS_FOR_SWIMLANE","UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK","UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK_SUCCESS","GET_BOT_VALUES","SET_BOT_VALUES","UPDATE_USER_IN_SWIMLANE","UPDATE_USER_IN_SWIMLANE_SUCCESS","SET_SWIMLANE_BOT_ERROR","auth0ClientExport","resolveTokenIsSet","rejectTokenIsSet","logoutTimeout","fetchTokenInFutureTimeout","DEFAULT_REDIRECT_CALLBACK","replaceState","initialTokenLoad","forceFetchNewToken","clearTokenCache","getTokenSilently","audience","idpGraphQLAudience","setLogoutTimeout","jwt","decode","tokenTTL","exp","iat","EXPIRE_TIMEOUT","setNewTokenOnWindow","aat","tokenFetchEvent","TokenFetchType","REFETCH","getEffectiveTokenExpiration","decodedToken","uiexp","min","handlePageInteraction","fetchAfter","Date","millisUntilGetNewToken","throttledHandlePageInteraction","throttle","epochSecondsNow","setLastPageInteraction","leading","trailing","setInterval","rawValue","asEpochSeconds","lastPageInteraction","floor","otherTabInteractionCheckInterval","returnTo","origin","Auth0Context","createContext","useContext","Auth0Provider","onRedirectCallback","initOptions","isAuthenticated","setIsAuthenticated","setAuth0","popupOpen","setPopupOpen","createAuth0Client","auth0FromHook","handleRedirectCallback","appState","loginWithRedirect","then","authDB","AuthDB","INITIAL","catch","initAuth0","loginWithPopup","Provider","getIdTokenClaims","getTokenWithPopup","AddDecryptionKeyModal","privateKey","setPrivateKey","open","addPrivateKeyModalTitle","addPrivateKeyBoldInstructionsPart1Bold","addPrivateKeyInstructionsPart2NotBold","addPrivateKeyInstructionsPart3Bold","addPrivateKeyInstructionsPart4NotBold","onKeyValueChange","onSave","ClassificationDataView","addPrivateKeyModalOpen","classifcation","segments","classifier","sampleType","getSamples","getSamplesForDataContainer","classificationSet","desconstructSample","tableRows","isSampleEncoded","decryptedSample","decrypter","decrypt","deConstructedSample","decryptSample","allSamples","samplesAreEncrypted","headerName","lis","JSEncrypt","renderCountsOnlyView","shouldRenderCountsOnlyView","getTableRows","isSamplesBase64Encoded","decryptSamples","closeAddPrivateKeyModal","dataClassificationTableSectionHeading","dataClassificationNoSamplesText","dataClassificationTableHeadingText","openFormView","scheduleAnotherClassification","openAddPrivateKeyModal","suggestUnencryptionLinkMessage","renderSamplesTable","NoClassificationsView","noClassificationsInfo","canSubmitJob","noClassificationsCreateText","RequiredSpan","DefaultFieldControlContainer","SubmitFormBaseComponent","fieldHelpContent","fieldHelpContentClosed","fieldHelpContentOpen","formHeadingErrors","renderTitleText","fieldKey","renderHelpContent","renderFieldControls","formErrors","required","RadioInstructionMessage","FormFieldsContainer","Label","authModeMessages","submitFormAuthenticationKVName","submitFormAuthenticationKVPath","nameInstructions","submitFormAuthenticationKVNameInstructions","pathInstructions","submitFormAuthenticationKVPathInstructions","submitFormAuthenticationSecretName","submitFormAuthenticationSecretPath","submitFormAuthenticationSecretsManagerArnInstructions","submitFormAuthenticationSecretsManagerPathInstructions","SubmitFormAuthenticationSection","submitFormAuthenticationLabel","submitFormAuthenticationInstructions","submitFormAuthenticationUsernameInstructions","authenticationMode","setFormFields","formValues","kvName","kvPath","setFormErrors","submitFormAuthenticationUsername","changeUsername","onBlur","validateUsername","changeKVName","validateKVName","changeKVPath","validateKVPath","SubmitFormClassifiersSection","submitFormClassifiersLabel","submitFormClassifiersInstruction","getAllClassifierOptions","valuesWithoutPhoneNumber","customValue","phoneNumberSelected","customSelected","customClassifiers","cc","phoneNumbers","remove","setClassifiers","fieldControl","phoneNumberControl","customControlShow","customControlHide","submitFormCustomClassifierLabel","loadingCustomClassifiers","setCustomClassifiers","buildCustomOptions","manageCustomDataClassifiers","phoneNumberControlShow","phoneNumberControlHide","submitFormPhoneNumberLabel","setPhoneNumberClassifiers","submitFormPhoneNumberAllCountries","ScanModeSection","submitFormScanModeNumberLabel","submitFormScanModeInstructions","scanMode","setScanMode","submitFormScanModeFullLabel","submitFormScanModeFullDescription","submitFormScanModePartialLabel","submitFormScanModePartialDescription","submitFormScanModeQuickLabel","submitFormScanModeQuickDescription","MIN_VALUE","MAX_VALUE","SubmitFormColumnSamplesSize","submitFormColumnSampleSizeLabel","submitFormColumnSampleSizeInstructions","validateValue","setValue","SubmitFormOutputLimitSection","submitFormOutputLimitLabel","submitFormOutputLimitInstructions","SubmitFormMaxSamplesPerClassifierSection","submitFormMaxSamplesPerClassifierLabel","submitFormMaxSamplesPerClassifierInstructions","SubmitFormOutputMode","submitFormOutputLabel","submitFormOutputInstructions","outputMode","setOutputMode","submitFormOutputFingerLabel","submitFormOutputRecommend","submitFormOutputFingerInstructions","submitFormOutputDOLabel","submitFormOutputDOInstructions","SubmitFormIncludeSamplesSection","submitFormIncludeSamplesLabel","submitFormIncludeSamplesInstructions","newVal","includeSamples","setIncludeSamples","SubmitFormEncryptionSection","submitFormIncludeEncryptionLabel","submitFormIncludeEncryptionInstructions","encryptionEnabled","publicKey","setEncryptionEnabled","submitFormIncludeEncryptSamplesLabel","publicKeyInput","publicKeyInputShow","publicKeyInputHide","submitFormIncludePublicKeyLabel","submitFormIncludeValidPemWarning","setPublicKey","validatePublicKey","SubmitForm","omit","errors","classifiers","isForDatabase","outputLimit","columnSampleSize","maxSamplesPerClassifier","authentication","validateFormValues","dbUserName","keyvaultName","keyvaultPath","customClassifierSrns","cl","pull","countryPhoneNumbers","onSubmit","errorResetFields","sectionProps","submitStatus","onCancel","submitFormCancel","submitFormSubmit","resetJobRequestSuccess","RESET_JOB_REQUEST_SUCCESS","SET_PLATFORM_ACCOUNT","SET_PRIVATE_KEY","submitJob","SUBMIT_JOB","submitJobSuccess","SUBMIT_JOB_SUCCESS","submitJobError","SUBMIT_JOB_ERROR","selectDataClassificationDomain","selectPrivateKey","dcDomain","selectSubmitJob","DataClassificationModal","targetSrn","resourceAccount","jobInfo","closeAndClear","submitFormHeader","platformAccounts","dataClassificationReducer","platformAccount","dataClassificationSaga","log","VIEW_NONE","VIEW_DATA","DataClassification","submitModalOpen","classificationSupported","view","dataContainerContent","fetchCustomClassifiers","SubmitFormModal","closeFormView","renderCardContents","submitJobStatus","selectCustomClassifiers","selectFetchingClassifiers","DisconnectedModal","NotFound","originalValue","orginialOptions","childOpts","currentOpt","finalValue","orderedOptions","menuPlacement","SET_CHANGE_DETECTION_DATA","ADD_CHANGE_DETECTION_PROPERTIES","ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS","REMOVE_CHANGE_DETECTION_PROPERTIES","REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS","UPDATE_CHANGE_DETECTION_PROPERTY","UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS","accountsByAccountId","accountsBySrn","hasAccountNumber","getAccountIdFromAccountSrn","getCloudType","getContent","getAccountTooltip","selectAccountsBySrn","selectAccountsByAccountId","SET_RELATIONS","SET_TYPES","RUN_INSPECTION_QUERY","FETCH_SAVED_SEARCHES","FETCH_SAVED_SEARCHES_DETAILS","SET_SAVED_SEARCHES","SET_ALLOWED_ROOT_QUERIES","SET_SAVED_SEARCH","FETCH_SONRAI_SEARCHES","SET_SONRAI_SEARCHES","FETCH_ACCOUNTS","FETCH_ACCOUNTS_SUCCESS","FETCH_SUBSCRIPTIONS","FETCH_SUBSCRIPTIONS_SUCCESS","FETCH_TAGS","FETCH_TAGS_SUCCESS","LOAD_TAG","SET_PIVOT","FETCH_DATA_CONTAINERS","FETCH_DATA_CONTAINERS_SUCCESS","START_UPDATE_DATA_POLL","STOP_UPDATE_DATA_POLL","SET_QUERY_NAMES","SET_GRAPHQL_SCHEMA","FETCH_GRAPHQL_SCHEMA","REMOVE_SAVED_SEARCH","CHECK_IF_HAS_COLLECTORS","SET_HAS_COLLECTORS","GET_MONITORED_RESOURCES_COUNT","SET_MONITORED_RESOURCES_COUNT","FETCH_SWIMLANES","FETCH_SWIMLANES_SUCCESS","ADD_SWIMLANE","REMOVE_SWIMLANE","REMOVE_SWIMLANE_SUCCESS","SET_GLOBAL_ERROR","FETCH_SONRAI_USERS","FETCH_SONRAI_USERS_SUCCESS","UPDATE_SONRAI_USER","UPDATE_SONRAI_USER_SUCCESS","GET_ALL_ROLES","SET_ALL_ROLES","ERR_ALL_ROLES","UPDATE_USER_ROLES","UPDATE_USER_ROLES_SUCCESS","GET_BOTS","SET_BOTS","CREATE_BOT","CREATE_BOT_SUCCESS","UPDATE_BOT_ASSIGNMENT","UPDATE_BOT_ASSIGNMENT_SUCCESS","GET_EXEMPTED_IDENTITIES","SET_EXEMPTED_IDENTITIES","SET_EXEMPTED_IDENTITIES_ERROR","ADD_EXEMPTED_IDENTITIES","ADD_EXEMPTED_IDENTITIES_SUCCESS","DELETE_EXEMPTED_IDENTITIES","DELETE_EXEMPTED_IDENTITIES_SUCCESS","VALIDATE_SOURCE_URL","VALIDATE_SOURCE_URL_SUCCESS","CLEAR_SOURCE_URL_VALIDATION","HANDLE_DELETE_BOTS","HANDLE_DELETE_BOTS_SUCCESS","FETCH_OBJECTIVES","FETCH_OBJECTIVES_ERROR","SET_OBJECTIVES","ENABLE_OBJECTIVE","ENABLE_OBJECTIVE_SUCCESS","ENABLE_OBJECTIVE_ERROR","ENABLE_ALL_OBJECTIVES","ENABLE_ALL_OBJECTIVES_SUCCESS","ENABLE_ALL_OBJECTIVES_ERROR","ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE","ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_SUCCESS","ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_ERROR","FETCH_SONRAI_CONFIG","SET_SONRAI_CONFIG","getEscalations","GET_ESCALATIONS","setEscalations","SET_ESCALATIONS","setEscalationsError","SET_ESCALATIONS_ERROR","createEscalation","CREATE_ESCALATION","createEscalationSuccess","CREATE_ESCALATION_SUCCESS","createEscalationError","CREATE_ESCALATION_ERROR","deleteEscalation","DELETE_ESCALATION","deleteEscalationSuccess","DELETE_ESCALATION_SUCCESS","deleteEscalationError","DELETE_ESCALATION_ERROR","fetchEscalationOptions","FETCH_ESCALATION_FILTER_OPTIONS","fetchEscalationOptionsSuccess","FETCH_ESCALATION_FILTER_OPTIONS_SUCCESS","fetchEscalationOptionsError","FETCH_ESCALATION_FILTER_OPTIONS_ERROR","updateEscalation","UPDATE_ESCALATION","updateEscalationSuccess","UPDATE_ESCALATION_SUCCESS","updateEscalationError","UPDATE_ESCALATION_ERROR","updateEscalationSwimlaneCustomTicketError","UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR","clearUpdateEscalationSwimlaneEditCustomTicketError","CLEAR_UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR","updateRapsheetResourceMonitor","SONRAI_ORG_NAME","stripTags","getPushLink","svg","semiChecked","viewBox","fill","agGridTheme","strokeLinecap","strokeLinejoin","points","renderCheckbox","circle","background","TextLineShimmer","baseLength","containerWidth","randomize","random","speed","primaryColor","secondaryColor","rx","ry","SquareShimmer","TitleShimmer","RectangleShimmer","contact","version","xmlns","inverse","end","ProgressBar","Path","duration","easing","shape","animate","interval","interval2","clearInterval","href","SUPPORT_EMAIL","getIntegrations","GET_INTEGRATIONS","setIntegrations","SET_INTEGRATIONS","setIntegrationsError","SET_INTEGRATIONS_ERROR","createIntegration","CREATE_INTEGRATION","createIntegrationSuccess","CREATE_INTEGRATION_SUCCESS","createIntegrationError","CREATE_INTEGRATION_ERROR","deleteIntegration","DELETE_INTEGRATION","deleteIntegrationSuccess","DELETE_INTEGRATION_SUCCESS","deleteIntegrationError","DELETE_INTEGRATION_ERROR","updateIntegration","UPDATE_INTEGRATION","updateIntegrationSuccess","UPDATE_INTEGRATION_SUCCESS","updateIntegrationError","UPDATE_INTEGRATION_ERROR","updateIntegrationConfig","UPDATE_INTEGRATION_CONFIG","updateIntegrationConfigSuccess","UPDATE_INTEGRATION_CONFIG_SUCCESS","updateIntegrationConfigError","UPDATE_INTEGRATION_CONFIG_ERROR","assignIntegration","ASSIGN_INTEGRATION","assignIntegrationSuccess","ASSIGN_INTEGRATION_SUCCESS","assignIntegrationError","ASSIGN_INTEGRATION_ERROR","deleteIntegrationAssignment","DELETE_INTEGRATION_ASSIGNMENT","deleteIntegrationAssignmentSuccess","DELETE_INTEGRATION_ASSIGNMENT_SUCCESS","deleteIntegrationAssignmentError","DELETE_INTEGRATION_ASSIGNMENT_ERROR","LinkRenderer","source","linkTarget","renderers","policyTitleLabel","policyDescriptionLabel","policySearchLabel","policyAlertingLevelLabel","policyLastTriggeredLabel","policyFindingsLabel","createButton","addButton","policyLabel","evalTypeLabel","remTypeLabel","evalTypeCountLabel","evalOpGTLabel","evalOpLTLabel","evalOpEQLabel","WithPermission","renderIt","multiPermissions","permission","invertCheck","oneOfType","func","arrayOf","ImmutablePropTypes","isRequired","bool","webpackContext","req","webpackContextResolve","code","markdown","selectedTab","commands","mdeCommands","getDefaultCommands","linkCommand","quoteCommand","codeCommand","readOnly","onTabChange","tab","generateMarkdownPreview","getUrl","___CSS_LOADER_URL___0___","___CSS_LOADER_URL___1___","___CSS_LOADER_URL___2___","___CSS_LOADER_URL___3___","___CSS_LOADER_URL___4___","___CSS_LOADER_URL___5___","___CSS_LOADER_URL___6___","___CSS_LOADER_URL___7___","___CSS_LOADER_URL___8___","___CSS_LOADER_URL___9___","quicksearch","searchEntityTypes","savedSearchNameField","solutionCenterToolbarGeneral","editWidgetModal","multiFilterValue","explorer","relationOperator","filterPanelTagSet","ignorePermissions","includePermissions","notSearchFilter","proximityMessage","whereMessage","customDataClassifierDescription","IHelp","customContent","infoMsg","getIcon","CLOUD_TYPES","AWS","AZURE","SONRAI","GCP","GSUITE","HASHICORP","KUBERNETES","errorIcon","codeStyle","errorMessage","DISCOVERY_TYPES","USER","NETWORK","ACTION","REGION","ACCOUNT","ACTION_TYPE","ROLE","POLICY_ENTRY","PERMISSION","PERMISSION_LIST","DATA_OBJECT","POLICY","POLICY_VERSION","DATA_CONTAINER","PLATFORM_ACCOUNT_TYPES","FILTER_DATE_FORMAT","WIDGET_TYPES","RATIO","BIG_COUNT","GAUGE","MAP","LIST","REGIONS","PIE_CHART","BAR_CHART","ADVMAP","ALERT","COMPLIANCE","SPARK","TEXT","BOUNDARY_OPTIONS","GREATER","LESS","EQUAL","ARC_MAP_SEARCH_NAME","REGION_MAP_SEARCH_NAME","NODE_VIEW_TYPES","PUBLIC_KEY","DATA","DATA_STORE","CONTAINER","COMPUTE","IMAGE","GENERIC","IDENTITY","GROUP","AUDIT","RESOURCE_GROUP","SECRET","SECRET_STORE","ENCRYPTION_KEY","WORKLOAD","ALERT_LEVELS","ERROR","WARN","INFO","CONTROL_FRAMEWORKS","ALL_CONTROL_FRAMEWORKS","POLL_FREQUENCY","SONRAI_MAX_COUNT","DEFAULT_SEARCH_LIMIT","QUERY_FILTER_OP","IN_LIST","NOT_IN_LIST","BETWEEN","NOT_BETWEEN","IS_NULL","IS_NOT_NULL","REGEX","NOT_REGEX","EQUALS","NOT_EQUALS","GRAPHQL_TIMEOUT","TYPES_WITH_CRM","DATA_TYPES_FOR_CRM","DEFAULT_ACTION_CLASSIFICATIONS_TO_ENABLE","SEARCH_SAVE_STATE","ALLOW","SAVING_CONCURRENT","SAVING","HAS_COPY","GLOBAL_SWIMLANE_NAME","SWIMLANE_SCOPED_PERMISSIONS","ACTION_TYPES","ESCALATE_TO_BOT","ASSIGN_USER","ASSIGN_ROLE","DELETE_IDENTITY","DELETE_ACCESS_KEY","nodeViewMiniPopout","SET_DATA","ERR_DATA","setData","errData","dataLoadError","generalProperties","gotoFullNodeView","nodeViewMiniPopoutSaga","openContainer","closedContainer","overlay","openOverlay","closedOverlay","openContent","closedContent","controls","closeIconContainer","float","nodeDetails","nodeDetialsTitle","nodeHeader","MiniNodeViewPopout","handleClose","linkParams","pathName","preventDefault","goToSelectedNodeView","closeIcon","renderLoadingBody","renderErrorBody","renderBodyWithData","containerStyle","overlayStyle","contentStyle","renderCardBody","Consumer","themeShape","dark","highlight","neutralDark","chartColors","bodyText","selectSonraiDataDomain","sonraiData","selectSavedSearchesDetailsLoaded","selectPermissions","selectGraphQLSchema","selectAllowedRootQueries","selectSonraiConfigLoading","selectAccounts","accountsList","selectSubscriptions","selectPivot","selectTags","selectDataContainers","selectHasCollectors","selectCheckCollectorsLoading","selectSavedSearchesLoading","swimlanesMap","selectGlobalError","selectUpdatingSonraiUsers","selectAllRoles","roleIndex","findIndex","permissionIndex","selectUnassigningRoles","selectUpdatingUserRoles","selectBotsMap","selectIsCreatingBot","selectSourceUrlValidation","selectIsUpdatingBotAssignment","selectExemptedIdentities","selectExemptedIdentitiesError","selectExemptedIdentitiesLoading","selectExemptedIdentitiesAdding","selectExemptedIdentitiesDeleting","selectSonraiSearchesLoading","selectObjectivesError","selectEnablingObjectives","selectEnablingAllObjectives","selectEnablingAllObjectivesForSwimlane","FETCH_POLICY","SET_POLICY","LT","EQ","GE","ALL","LE","ANY","DOMAIN","setCustomClassifiersError","createCustomClassifier","createCustomClassifierSuccess","createCustomClassifierError","updateCustomClassifiers","updateCustomClassifiersSuccess","updateCustomClassifiersError","deleteCustomClassifier","deleteCustomClassifierSuccess","deleteCustomClassifierError","displayModeButton","jsonDisplayContainer","jsonDisplayControlsContainer","jsonDisplayText","jsonDisplayStyles","JSONDisplay","elements","classNames","pushElement","StyledReactstrapDropdownMenu","modifiers","setStyle","order","fn","ASSIGN_TO_ME","ASSIGN_TO_ME_SUCCESS","ASSIGN_TO_ME_ERROR","FETCH_TICKET_DETAILS","FETCH_TICKET_DETAILS_SUCCESS","FETCH_TICKET_DETAILS_ERROR","FETCH_POLICY_PATH","FETCH_POLICY_PATH_SUCCESS","FETCH_POLICY_PATH_ERROR","CLOSE_TICKET","CLOSE_TICKET_SUCCESS","CLOSE_TICKET_ERROR","REOPEN_TICKET","REOPEN_TICKET_SUCCESS","REOPEN_TICKET_ERROR","SNOOZE_TICKET","SNOOZE_TICKET_SUCCESS","SNOOZE_TICKET_ERROR","ACCEPT_RISK_TICKET","ACCEPT_RISK_TICKET_SUCCESS","ACCEPT_RISK_TICKET_ERROR","REASSIGN_TO_USER","REASSIGN_TO_USER_SUCCESS","REASSIGN_TO_USER_ERROR","FETCH_TICKET_COMMENTS","FETCH_TICKET_COMMENTS_SUCCESS","FETCH_TICKET_COMMENTS_ERROR","ADD_COMMENT","ADD_COMMENT_SUCCESS","ADD_COMMENT_ERROR","FETCH_SIMILAR_TICKETS","FETCH_SIMILAR_TICKETS_ERROR","FETCH_SIMILAR_TICKETS_SUCCESS","CHANGE_SIMILAR_TICKETS_FILTERS","FETCH_TICKET_HISTORY","FETCH_TICKET_HISTORY_SUCCESS","FETCH_TICKET_HISTORY_ERROR","FETCH_ACTIVITY_TICKET_ACTIONS","FETCH_ACTIVITY_TICKET_ACTIONS_SUCCESS","FETCH_ACTIVITY_TICKET_ACTIONS_ERROR","FETCH_POLICY_EVIDENCE_LEGACY","FETCH_POLICY_EVIDENCE_LEGACY_SUCCESS","FETCH_POLICY_EVIDENCE_LEGACY_ERROR","CLOSE_TICKETS","CLOSE_TICKETS_SUCCESS","BULK_ACTION_START","BULK_ACTION_COMPLETE","ASSIGN_TICKETS","ACCEPT_RISK_TICKETS","SNOOZE_TICKETS","BULK_COMMENT","BULK_TAG","DISPKV","DISPJSON","SEARCH_INLINE","tableCellCopyButtonContainer","tableCellText","wordBreak","NodeViewDetailMetadataBody","filterText","keyText","displayMode","cellId","cellsShowCopy","medatadataObj","metdataNestedObject","unescapedMedatadaObj","unescapeJSONObject","toggleSearchBar","changeDisplayMode","metaObject","metadataToObj","keysToDisplay","tableLayout","onMouseLeaveMetadataTable","keyId","valueId","onMouseEnterTableCell","colSpan","renderJSONBody","renderTableBody","setFilterText","renderBody","setChangeDetectionData","addChangeDetectionPropertiesSuccess","removeChangeDetectionPropertiesSuccess","updateChangeDetectionPropertySuccess","selectRapSheetDomain","selectResourcesLoading","sc","srnWithoutPreamble","parts","getNodeInfo","getAllFields","getGenericNodeQuery","getGenericNodeQueryFieldsOnly","orgName","graph_host_template","domain","environment_domain","finalNodeType","formatUpdateSwimlaneTags","arr","hasBeenStarred","formatCreateSwimlaneTags","dudeWheresMyType","dude","buttonText","ModalOverlay","ModalContainer","TopPartContainer","ControlContainer","BigButton","ChooseOrgModal","onConfirm","keyCode","allowedOrgs","onKeyUp","onButtonKeyUp","poster","repeatStyle","backgroundSize","gridColumn","clear","gradient","backgroundImage","center","logo","SonraiPageContent","SonraiPageFooter","vidsrcWEBM","SonraiPage","videoBackground","muted","autoPlay","alt","loginContainer","footerLink","copyright","Login","authenticated","mustChooseOrg","chooseOrgModal","OrgSelector","getAllowedOrgs","setCurrentOrg","hash","getFullYear","url","removeItem","AppLayoutErrorBoundry","reload","errorSource","componentStack","errorStack","errorWrapper","failimg","stack","clearError","refresh","logError","withRouter","allowedRootQueries","globalError","savedSearchesLoading","savedSearchesDetailsLoaded","sonraiSearchesLoading","accounts","subscriptions","pivot","dataContainers","objectivesError","enablingObjectives","enablingAllObjectives","enablingAllObjectivesForSwimlane","hasCollectors","monitoredResourcesCount","checkCollectorsLoading","sonraiUsers","sonraiUsersLoading","updatingSonraiUser","allRoles","updatingUserRoles","isUpdatingBotAssignment","isCreatingBot","sourceUrlValidation","isValid","isValidating","exemptedIdentities","exemptedIdentitiesError","exemptedIdentitiesLoading","exemptedIdentitiesDeleting","exemptedIdentitiesAdding","sonraiConfigLoading","sonraiDataReducer","newSwimlane","oldTags","withDetails","sid","oldSwimlane","guy","userObj","newRoleAssignments","deletedSrns","addedRoles","identities","resourceIds","swombo","lane","objectiveSrn","sonraiDatareducer","fetchingControlGroups","policyError","fetchingPolicies","updatingPolicies","updatingCFs","creatingPolicy","deletingCFs","togglingSwimlaneOnCfs","togglingSwimlaneError","controlFrameworkDataReducer","ADD_POLICY_SUCCESS","DELETE_CONTROL_GROUP","DELETE_CONTROL_GROUP_SUCCESS","SET_POLICY_ERROR","msg","CLONE_FRAMEWORK","CLONE_FRAMEWORK_SUCCESS","SET_FRAMEWORK_ENABLED","SET_FRAMEWORK_ENABLED_SUCCESS","DELETE_POLICY","DELETE_POLICY_SUCCESS","REMOVE_POLICY","REMOVE_POLICY_SUCCESS","FETCH_CONTROL_GROUPS","SET_CONTROL_GROUPS","controlGroup","FETCH_POLICIES","SET_POLICIES","CREATE_POLICY","CREATE_POLICY_SUCCESS","attachedPolicies","UPDATE_CONTROL_GROUP","UPDATE_CONTROL_GROUP_SUCCESS","mergeIn","UPDATE_POLICY_SUCCESS","CREATE_CONTROL_GROUP_SUCCESS","TOGGLE_ENABLED_ON_SWIMLANES","TOGGLE_ENABLED_ON_SWIMLANES_SUCCESS","TOGGLE_SWIMLANE_ON_CFS","TOGGLE_SWIMLANE_ON_CFS_SUCCESS","TOGGLE_SWIMLANE_ON_CFS_ERROR","loadingIntegrations","integrations","getIntegrationsError","creatingIntegration","creatingError","deletingIntegrations","deletingError","updatingIntegrations","assigningIntegrations","updatingIntegrationError","assigningIntegrationError","deletingIntegrationAssignments","deletingIntegrationAssignmentsError","updatingIntegrationConfigs","updatingIntegrationConfigsError","platformSettingsReducers","integration","configSrn","assignmentSrn","INTEGRATION_CONFIG_PROPS","INTEGRATION_PROPS","UPDATE_INTEGRATION_MUTATION","UPDATE_INTEGRATION_CONFIG_MUTATION","CREATE_INTEGRATION_MUTATION","DELETE_INTEGRATION_MUTATION","GET_INTEGRATIONS_QUERY","CREATE_CONFIGURATION_MUTATION","CREATE_ASSIGNMENT_MUTATION","DELETE_CONFIG_MUTATION","platformSettingsDataSagas","slack","serviceNow","jira","newIntegration","deletedIntegration","updatedIntegration","IntegrationSRN","integrationSrn","configResults","SwimlaneSRN","configSRN","assignResults","escalationsLoading","escalationError","creatingEscalationError","escalationFilterOptions","escalationFilterOptionsLoading","escalationFilterOptionsError","creatingEscalation","updatingEscalation","updatingEscalationError","updatingEscalationInvalidSwimlaneForTickets","deletingEscalations","escalationDataReducers","keyEscalations","esc","oldEscalation","added","removed","ass","RULE_PROPS","FILTER_PROPS","GET_ESCALATIONS_QUERY","GET_FILTER_OPTIONS_QUERY","CREATE_ESCALATION_MUTATION","CREATE_ESCALATION_ASSSIGNMENT_MUTATION","DELETE_ESCALATION_ASSIGNMNET_MUTATION","CREATE_ESCALATION_RULE_MUTATION","DELETE_ESCALATION_RULE_MUTATION","CREATE_ESCALATION_FILTER_MUTATION","DELETE_ESCALATION_FILTER_MUTATION","DELETE_ESCALATION_MUTATION","UPDATE_ESCALATION_MUTATION","FETCH_TICKETS_BY_SRNS","getFilterOptions","escalationDataSagas","escalationSrn","escalationResult","assignment","swimlaneSRN","schemeSRN","assResults","assignments","schemeSrn","controlFrameworkSrn","allTypes","filterResults","typeVar","escalateToBot","assignUser","assignRole","triggerAfter","ruleResults","deleteEscalationAction","deleted","updatedEscalation","detailResults","newDetails","selectEscalations","currEscalation","customTicketFilters","customTicketSRNs","response","currentSwimlanes","removeSwimlaneSRNs","assignmentSRN","swimlanesAfterEdit","requiredSwimlanes","invalidCustomTickets","removedIntersection","intersection","addAssignResults","removeAssignResults","addFilterResults","filterSrn","removeFilterResults","addRuleResults","ruleSrn","removeRuleResults","fetchingClassifiers","fetchingClassifiersError","creatingClassifier","creatingClassifierError","deletingCustomClassifiers","deletingCustomClassifiersError","updatingCustomClassifiers","updatingCustomClassifiersError","dataClassifierkDataReducer","deleting","ccs","updating","CUSTOM_CLASSIFIER_PROPS","FETCH_CUSTOM_CLASSIFIERS_QUERY","CREATE_CUSTOM_CLASSIFIERS_MUTATION","DELETE_CUSTOM_CLASSIFIERSS_MUTATION","UPDATE_CUSTOM_CLASSIFIERSS_MUTATION","deleteCustomClassifiers","controlFrameworkDataSaga","changeDetectionProperties","changeDetectionManagerReducer","indexByKeyName","indexByAlertLevel","alertLevel","newProperty","loadable","Logo","rest","SmallLogo","NavBarLink","textShadow","fullname","baseStyle","activeStyle","offset","solutionCenter","graphExplorer","reports","monitoredResources","oc","controlCenter","userManagement","roleManagement","collectors","customDataClassifiers","platformSettings","swimlaneCheckup","objectiveManager","clouds","BackgroundImage","lineTop","topLinks","bottomLinks","GlobalNavBar","resetEditor","resetQuery","newProps","blacken","navigateToOverview","matchPath","resetSearch","featureFlags","FETCH_QUICK_SEARCH","resultLimitExceeded","quickSearchLoading","quickSearchResults","quicksearchReducer","fetchQuickSearch","setQuickSearchResults","clearQuickSearchResults","setQuickSearchError","getResultsForType","getIdentities","getInfrastructure","getProtections","getQuickSearchResults","quickSearchSaga","searchTerm","searchParam","formattedResults","QuickSearch","resultsLimitExceeded","quickSearchGraphQLType","selectQuickSearchDomain","selectQuickSearchResults","selectQuickSearchLoading","selectResultLimitExceeded","selectError","TableLoader","showPanel","infrastructures","protection","hiddenCols","resultsColumn","queryText","resultsCard","cardTitle","onSingleClickNodeView","containerWithPanel","panelColumn","mainCard","getHasNoResults","EmptySection","getTables","SlideoutPanel","visible","toggleVisible","goToNodeView","NodeSolutionCenter","swimlaneCheckupDetails","setup","quickSearch","widgetResults","appTitle","nodeView","deploy","helpCenter","securityCenter","botManagement","botDetails","roleDetails","userDetails","opsCenter","objectivesManager","HeaderSearchBar","inputIcon","executeSearch","setSearchValue","intl","formatMessage","handleInput","handleValue","searchValue","sonraiUserSrn","popover","popoverBody","divider","menuOption","newVisibility","picture","canSetDefaultOrg","clearCurrentOrg","userAgreementUrl","GlobalHeaderBar","userIconContainer","render","Helmet","exact","doQuickSearch","FETCH_SAVED_SEARCH_WIDGET_RESULTS","FETCH_ADVANCED_SEARCH_WIDGET_RESULTS","SET_TITLE","SET_FILTER","FETCH_CUSTOM_SEARCH_WIDGET_RESULTS","fetchSavedSearchWidgetResults","fetchAdvancedSearchWidgetResults","fetchCustomSearchWidgetResults","setWidgetResults","setTitle","setSonraiSearchName","setSavedSearchId","setWidgetResultsError","setSavedSearchFilterCardId","setAdvancedQuery","selectWidgetResultExplorerDomain","selectResults","selectTitle","selectSonraiSearchName","selectSavedSearchId","selectLoading","selectFilter","sonraiSearchName","savedSearchId","savedSearchFilterCardId","widgetResultExplorerReducer","createNestedOrderMap","getSavedSearchResults","getAdvancedSearchResults","getCustomSearchResults","widgetResultsSaga","getFields","rootField","statement","searchCardId","filterCardId","andArgs","dateOffset","flatten","queryBuilder","QueryBuilder","addDefaultResultViews","skipCounts","enableFlattenMode","buildPivotableSource","gqlStatement","getExploreSonraiSearchQueryString","filteredBy","equalTo","emptyWidgetSearch","exploringResults","noResultsText","noResults","textCont","filterCont","closeIconCont","viewName","WidgetResultExplorer","showNodeViewPanel","isSavedSearch","tableData","getDataFromSavedSearchResults","getDataFromGraphiqlSearchResults","renderResults","searchTitle","advancedQuery","SEARCH_VIEWS","RESULTS","querySource","preloadQuery","onSingleClickFlattenedNodeView","onClickFlattenedNodeView","renderTitle","renderSearchNav","clearFilter","renderPanel","selectControlGroupDomain","selectCloning","selectControlGroupId","selectActiveFramework","selectControlGroup","activeFramework","selectIndexedSonraiSearches","sonraiSearchList","selectPoliciesForControlGroup","allPolicies","policyList","cloning","controlGroupReducer","ADD_POLICY","setCloning","createPolicyHeader","addPolicyButton","enableOnSwimlaneButton","enableGloballyButton","enableButton","disableButton","disableGloballyButton","enableSwimlanes","disableSwimlane","enableSwimlaneTitle","notEnabledModalMessage","editCGHeader","cGTitleLabel","cGDescriptionLabel","cGFriendlyNameLabel","editActionLabel","deleteActionLabel","removeActionLabel","newPolicyTabLabel","addPolicyTabLabel","AddPolicyModal","createPolicy","addPolicy","selectedPolicySrn","activeTabIndex","currentPolicyIds","handleCreate","triggerIsValid","handleAdd","PolicyEditor","for","getFilteredPolicies","setSelectedPolicy","tabbar","triggerConfig","TabBar","changeTab","activeTab","tabs","renderCreateContent","renderAddContent","renderSubmitButton","EditControlGroupModal","updateControlGroup","setFriendlyName","setDescription","DescriptionRenderer","PolicyActions","deleteModalOpen","editPolicy","closeDeleteModal","deletePolicy","removePolicy","clonePolicy","usedInSrns","toggleDeleteModal","handleDeletePolicy","isSonrai","canEdit","canDelete","handleClonePolicy","handleRemovePolicy","getDeleteModal","handleEditPolicy","SORT_FIELDS","TITLE","LEVEL","SORT_DIRS","ASC","DESC","IconLayer","ControlGroup","errorMsg","showCreatePolicyModal","showEditControlGroupModal","showSwimlaneModal","setPolicyError","policyFilter","sortProp","sortedPolicies","policySortDirection","policyGridApi","showLoadingOverlay","setExpanded","expanded","api","sizeColumnsToFit","listOfSwombos","swimSrn","thisSwombo","swo","onLoad","onSwimlaneTableLoad","suppressSizeToFit","canAssignSwimmy","openConfirmDisableSwimlaneModal","getSwimlaneData","policiesLoaded","loader","emptyNotice","polsearch","sonraiSearch","savedSearch","alertingLevel","createdByUser","onDoubleClickRow","navigateToPolicy","onPolicyTableLoad","onSingleClick","groupUseEntireRow","overlayLoadingTemplate","masterDetail","detailCellRenderer","frameworkComponents","descriptionRenderer","detailCellRendererParams","detailGridOptions","columnDefs","defaultColDef","getDetailRowData","successCallback","valueGetter","toggleDescription","getSearchNavParams","cellStyle","aggFunc","enableRowGroup","singleClickEdit","menuTabs","suppressMenu","swimlaneOptions","toggleEnabledSwimlanes","toggleSwimlaneModal","showConfirmDeleteSwimlaneModal","confirmSwimlaneDelete","closeConfirmDisableSwimlaneModal","toggleEnabledOnSwimlanes","setFrameworkEnabled","redirect","swim","cloneFramework","deleteControlGroup","closeOnClick","handleToggleEnabled","toggleEditControlGroupModal","handleCloneFramework","handleDeleteFramework","newDirection","canAssign","canClone","isEnabled","canEnable","numSwimlanes","disableGlobally","enableGlobally","createdByContainer","policiesContainer","swimlaneContainer","titleContainer","navContextContainer","pageTitle","searchIconWrapper","searchIcon","columnHeader","headerContainer","sortContainer","policyTypeBody","noPolicies","PASS","setError","canEnableOnSwimlane","getNameForHelmet","parentCF","allControlFrameworks","toggleCreatePolicyModal","renderGlobalButton","DropdownActions","getMenuItems","renderSwimlanes","renderPolicies","getSwimlaneOptions","handleSwimlaneOptionChange","handleAddEnableSwimlanes","handleDisableSwimlane","selectPolicyError","selectUpdatingPolicies","selectUpdatingCFs","selectDeletingCFs","NewAccountState","welcome","mainText","paragraph","tip","mainButtonWrapper","detailsIcon","userInfo","selectUserProfile","acceptLicense","checkedAccept","backdrop","htmlFor","openSourceLicenseUrl","selectUserHasAcceptedLicense","userProfile","globalerrorContainer","navContainer","contentContainer","component","NotFoundPage","PageLoader","hasCollectorsLoading","userProfileError","selectUserProfileError","userHasAcceptedLicense","checkIfHasCollectors","runInspectionQuery","startUpdateDataPoll","stopUpdateDataPoll","loadUser","fetchSonraiUsers","getAllRoles","fetchControlGroups","fetchPolicies","fetchSonraiConfig","controlFrameworkData","platformSettingsData","escalationData","dataClassifierData","changeDetectionManager","ticketDetailsData","hasCheckedCollectors","setHasCheckedCollectors","skipAssignments","RedirctStartPage","canViewCollectors","loadingPermissions","loadingUserProfile","loadingCollector","Alert","loadingQueryTypes","loadingSearches","loadingSonraiConfig","engine","Styletron","meta","SolutionCenter","GraphExplorer","SearchManager","Search","Deploy","ControlCenter","PolicyEdit","HelpCenter","SecurityCenter","SwimlaneManager","SwimlaneDetails","SwimlaneCheckup","SwimlaneCheckupDetails","UserManagement","BotManagement","BotDetails","RoleManagementPage","PlatformSettings","RoleDetails","TicketDetails","UserProfileView","UserActivity","MonitoredResources","EscalationDetails","SlackApplicationAuthorization","TicketTemplatesPage","TicketTemplateDetailsPage","DataClassifierManagement","ObjectivesManager","Loading","configureAxios","authToken","axios","common","Authorization","saveUserProfile","setSecurityCenterWelcomeModal","setUserProfileTables","getSonraiUser","fetchUserProfile","unhideSolutionCardUserProfile","hideSolutionCardUserProfile","userProfileDataSaga","UPDATE_USER_PROFILE_MUTATION","updateUserProfile","profile","UpdateSonraiCurrentUsers","prof","newSRN","setUserProfile","updatedProfile","hasSeenSecurityCenterWelcomeModal","newProfile","tableConf","tableConfig","newConfig","setSonraiUserSrn","userId","hasAcceptedLegal","setUserProfileError","accessToken","sub","cardsToUnhide","newHiddenCards","cardSrn","swimlaneManagerOpen","userProfileDataReducer","primaryAzure","primaryGcp","primaryAws","darkBlue","explorerIncomingEdge","infrastructure","themeManagerReducer","LOAD_THEME","SET_TYPE_COLORS","selectThemeManagerDomain","selectTheme","selectTypeColors","generateTypeColors","themeSaga","isNodeType","typeName","nodeTypes","thing","definition","nodetype","impl","baseColor","shiftColorToMatch","typeDef","enumDef","enumColor","setTypeColors","GENERATE_TYPE_COLORS","themeReducer","loadTheme","ThemeContext","PrivateRoute","authed","decodeURIComponent","userIsDisabled","setDefaultOrg","handleEvent","hasInvalidOrg","DisabledUserPage","userProfileData","themeManager","registerEventHandler","Events","CLEAR","SET","backfaceVisibility","AppLayout","selectLanguage","Fragment","LanguageProvider","locale","textComponent","only","languageState","addLocaleData","enLocaleData","translationMessages","en","formatTranslationMessages","defaultFormattedMessages","DEFAULT_LOCALE","enTranslationMessages","formattedMessages","LicenseManager","setLicenseKey","ModuleRegistry","registerModules","AllModules","self","documentElement","xhttp","XMLHttpRequest","onreadystatechange","readyState","responseText","substring","send","createHistory","configureStore","MOUNT_NODE","getElementById","targetUrl","__REACT_DEVTOOLS_GLOBAL_HOOK__","entries","App","ReactDOM","process","idpHost","client_id","idpClientId","redirect_uri","Intl","ActiveToolbar","working","selectedItems","totalItems","showCheckbox","toggleSelectAll","spinnerContainer","InactiveToolbar","ToolbarItem","toolbarButton","iconStyle","BulkActionToolbar","pill","edit","openInWindow","viewSearch","pin","unpin","filterApplied","hidden","errorImg","WidgetCardContent","refetch","onEdit","allowUpdate","onClickSearch","toggleStatic","onRemove","allowDelete","buttons","pinButton","networkStatus","filtered","getFilterTitle","errStr","Card","errorWidget","headerStyle","leftToolbarButtons","getMoveToolbar","rightToolbarButtons","getToolbar","dropdownActions","getDropdownActions","statusButtons","getStatusIndicators","WidgetCard","findThis","maybeFound","deepFindLabel","deltaY","currentLeft","scrollbarRef","getScrollLeft","scrollLeft","scrollTop","scrollHeight","scrollWidth","clientHeight","clientWidth","shadowTopOpacity","bottomScrollTop","shadowBottomOpacity","shadowLeftOpacity","rightScrollStart","shadowRightOpacity","createRef","shadowTop","shadowBottom","shadowLeft","shadowRight","onWheel","handleMouseScroll","renderTrackVertical","onUpdate","stopPropagation","treeMode","edge","layout","hierarchical","sortMethod","levelSeparation","physics","font","vadjust","arrowStrikethrough","shadow","smooth","roundness","forceDirection","widthConstraint","maximum","interaction","hover","hoverConnectedEdges","selectConnectedEdges","dragNodes","showAccountInLabel","toggleDisplayMode","navigateToExplorer","EDGE_PER_NODE_LIMIT","NestedPathWidget","parentId","fallbackId","chain","propkey","childType","rollupNodes","placeholderNodeId","aggregation","childItem","processed","processNode","agValue","stringyBoi","processNodes","FlatPathWidget","emptyPath","nodeIds","OrderedSet","uniqueEdges","sagaMiddleware","createSagaMiddleware","middlewares","routerMiddleware","enhancers","applyMiddleware","composeEnhancers","createStore","createReducer","runSaga","run","injectedReducers","injectedSagas","addProperty","removeProperty","addChangeDetectionProperties","removeChangeDetectionProperties","updateChangeDetectionProperty","changeDetectionManagerSaga","properties","toRemove","SearchInput","iconWrapper","quickFilter","borderColor","borderWidth","themeColor","inStyle","desaturate","getStyle","getDisabledStyle","finalOnClick","toggleHover","expand","expandButton","contentOverflows","containerRef","element","autoUpdate","toggleExpand","assignToMeSuccess","fetchPolicyPathSuccess","fetchPolicyPathError","fetchTicketDetailsError","acceptRiskTicketSuccess","acceptRiskTicketError","closeTicketSuccess","closeTicketError","reopenTicketError","reopenTicketSucces","snoozeTicketSuccess","snoozeTicketError","fetchTicketCommentsSuccess","fetchTicketCommentsError","addCommentSuccess","fetchSimilarTicketsSuccess","reassignToUserSuccess","reassignToUserError","fetchTicketHistorySuccess","fetchTicketHistoryError","fetchActivityTicketActionsSuccess","fetchActivityTicketActionsError","fetchPolicyEvidenceLegacyError","fetchPolicyEvidenceLegacySuccess","ticketStatusChangeSuccess","closeTickets","closeTicketsSuccess","bulkActionStart","bulkActionComplete","assignTickets","acceptRiskTickets","snoozeTickets","bulkComment","bulkTag","userIcon","defaultIcon","detail","codeBlock","emptyCard","checkStore","subscribe","replaceReducer","invariant","conformsTo","MAX_STORAGE_SIZE","cleanupOldAuthDBs","allDBs","getAllDBs","storageSize","db","makeLocalStorageKey","dbRaw","totalSize","acc","cleanupCount","dbsOldestToNewest","startCleanup","EventTypes","DATE_FORMAT","formatDateTime","parseDateTime","valueOf","env","sessionTelemetryEnabled","isTelemetryEnabled","localStorageKey","at","onbeforeunload","flushDB","makeEvent","kid","evt","tokenClaims","clearDB","allEvents","prettyEvent","tabOpen","getPrettyEvent","filterEvent","eventType","logs","getSessionLogs","borderedCard","leftHeader","rightHeader","topTitle","bottomTitle","loadingTitle","TopTitle","CardBody","Toolbar","Fade","in","renderDropdown","renderLeftToolbar","renderRightToolbar","onLeave","getCard","selectEscalationsDataDomain","selectCreatingEscalation","selectCreatingEscalationError","selectDeletingEscalations","selectUpdatingEscalation","selectUpdatingEscalationError","selectEscalationsLoading","selectEscalationFilterOptions","selectEscalationFilterOptionsLoading","selectUpdatingEscalationInvalidSwimlaneForTickets","DEFAULT_RAPSHEET_ALERTS_DAYS","FETCH_RESOURCE_GROUPS","FETCH_RESOURCE_GROUPS_SUCCESS","CREATE_CONTROL_GROUP","ShowPathModal","titleDetailsContainer","titleDetailsFieldKey","titleDetailsFieldValue","titleDetailsRow","titleDetailsMetadataRow","titleDetialsMetadata","titleDetailsMetadataKey","titleDetailsMetadataValue","pathEndItem","metadata","renderPolicyJSONView","renderMetadataView","segment","accountNumber","accountSRN","rbac","isRoot","resourcePath","resourceType","getTitleDetailsKeyName","getFieldValueText","renderJSONViews","leaveItBeFFS","paths","modalBodyHeight","cssModule","sourceName","getTitleDetails","skipLoading","canAccessPathsLoading","canAccessPathsError","NodeViewDetailSrn","NodeViewDetailAccount","line","IconDivider","lineStyle","loadingMessage","hideLoader","timer","setFinalMessage","setFirstMessage","loadingMessageContainer","dataTableClassifierName_ADDRESS","dataTableClassifierName_CREDITCARD","dataTableClassifierName_DATE","dataTableClassifierName_DOB","dataTableClassifierName_EMAIL","dataTableClassifierName_FULLNAME","dataTableClassifierName_PASSPORTNUMBER","dataTableClassifierName_BANKACCOUNTNUMBER","dataTableClassifierName_PHONENUMBER","dataTableClassifierName_PHONENUMBER_CANADA","dataTableClassifierName_PHONENUMBER_USA","dataTableClassifierName_PHONENUMBER_UK","dataTableClassifierName_POSTCODE","dataTableClassifierName_SIN","dataTableClassifierName_SSN","dataTableClassifierName_TAXNUMBER","dataTableClassifierName_ZIPCODE","dataTableClassifierName_AWSACCESSKEY","dataTableClassifierName_AWSSECRETKEY","dataTableClassifierName_AZURESTORAGEACCOUNTKEY","dataTableClassifierName_AZURECLIENTSECRET","dataTableClassifierName_AZURESAS","dataTableClassifierName_DRIVERSLICENSE","dataTableClassifierName_ENCRYPTIONKEY","dataTableClassifierName_GCPAPIKEY","dataTableClassifierName_GCPSERVICEACCOUNTKEY","submitFormHeaderText","NodeViewDetailAccessKeys","created","lastUsed","getColorByTimePassed","blockStorageEncrypted","blockStorageUnencrypted","classificationsNone","classificationFound","classificationsNoneFound","classificationsConfigJob","NodeViewDetailsClassification","modalOpen","openModal","classifierCounts","cur","dataClassificationMessages","closeModal","renderBodyForSamples","renderBodyForEmpty","NodeViewSrn","formatSrn","CopyToClipboard","encrypted","unencrypted","NodeViewDetailBlockStorage","miniNodeViewOpen","miniNodeViewNodeId","blockStorage","openMiniNodeView","NodeViewMiniPopout","closeMiniNodeView","NodeViewDetailPublicKey","MFADevice","ServicePrincipal","principal","getPrincipalType","ConsoleEnabled","NodeViewDetailsSection","propOfInterest","getPropOfInterestMatches","mappedLabel","getMappedBoolLabel","translatedLabel","finalLabel","kind","getFieldCount","getLabel","NodeViewDetailLabel","renderHeaderField","renderField","ownedBy","Table","bordered","NodeViewDetailMetadata","NodeViewDetailCode","NodeViewDetailString","stringVal","NodeViewDetailBool","NodeViewDetailDate","NodeViewDetailInt","rotate","detailCard","cloudLink","titleActions","renderDetail","SKIP_FIELDS","buildAzureResourceLink","regions","performedOnValue","region","performedOnRegions","getPerformedOnRegions","eventName","hasActionClassificationValue","hasServiceClassificationValue","coalescedCount","userAgent","srcIPs","performedAtCityValues","performedAtCountryValues","metadataObject","metadataNestedObject","runState","launchTime","basedOn","networkInterfaces","networkInterface","architecture","accessedWith","isAttachedToBlockStorage","createDate","mfa","hasMFADevice","isConsoleEnabled","passwordLastUsed","getAccessKeys","servicePrincipals","modifiedDate","displayFields","nonNullFields","nullFields","noCoalesce","detailGroups","groupNodeViewDetails","general","deprecationReason","isDeprecated","ofType","versionIndex","other","commonProps","getNewDetails","getActionDetails","getComputeDetails","newNodeView","getSingleDetailGroup","getAllGroups","horizontalWrapper","detailsTag","additionalHeaderDetails","dataDetails","compute","coalesced","getHeaderContent","NodeViewDetail","realValue","ReducerInjector","getInjectors","hoistNonReactStatics","convertToWildcardRegex","scopesMatchTarget","scopes","scopeValue","permissionData","scopesMatchSwimlanes","nodata","listItem","ListCard","handleLinkClick","getItemText","getLinkText","sortedData","toUpperCase","renderListItem","pluralFields","Account","Accesskey","Action","Actionclassification","Actiontype","Audit","Alias","Attribute","Availabilityzone","Blockstorage","Cert","Cidr","CIDR","City","Cloud","Cluster","Clusterparametergroup","Compute","Data","Dataclassification","Datacontainer","Dataobject","Datastore","Datastoreclassification","Datastoreversion","Datastoretype","Encryptionkey","Entity","Eventstream","Group","Identity","Identityprovider","Image","Infrastructure","Keystore","Location","Mfadevice","Network","Networkinterface","Networkpermission","Networkpolicy","Networkservice","Networksubnet","Networkcomponent","Networkgroup","Networklistener","Notification","Option","Optiongroup","Organization","Organizationalunit","Passwordpolicy","Parameter","Parametergroup","Permission","Permissionlist","Policy","Policyentry","Policyversion","Portrange","Protection","Protocol","Publickey","Region","Resource","Resourcegroup","Role","Service","Serviceclassification","Servicetag","Servicetype","ServiceType","Servercertificate","Signingcertificate","Sharedaccesspolicy","Snapshot","Storageaccount","Subdivision","Subnetgroup","Subscription","Tag","User","Identities","attributes","Attributes","actionTypes","ActionTypes","Permissions","services","Services","serviceTypes","ServiceTypes","Alerts","Actions","Protections","aliasSet","availabilityZone","ActionType","isAttachedTo","attachedEntities","isMemberOf","members","removedBy","isOwnerOf","isOwnedBy","observedDate","resourceid","hasPolicyEntry","isPartOfPolicy","hasPolicyVersion","isPartOfPolicyVersion","hasMember","hasAttached","isIn","hasProperty","attributesTo","performedOn","isPartOfAction","performed","allows","isAllowedBy","denies","isDeniedBy","hasActionType","isPartOfPermission","hasServiceType","sonraiConfig","appliesToPermission","appliesToResource","appliesTo","isPartOfIdentity","performedAtCityValue","performedAtCountryValue","performedByValue","performedByLabel","performedOnLabel","srcId","srcIds","srcIP","country","countries","userAgents","cookieName","cookieExpiration","dnsName","disabledSettings","enabledSettings","instanceSet","ipSet","isGlobal","isOrganizational","port","prefix","protocol","privateIPSet","privateDnsName","publicIPSet","serverlessSet","snsTopic","targetPrefix","Accounts","AccessKeys","Aliases","Audits","BlockStorage","BlockStorages","Certs","CIDRs","Clouds","Clusters","ClusterParameterGroup","ClusterParameterGroups","Computes","DataContainer","DataContainers","DataObject","DataObjects","DataStore","DataStores","EncryptionKey","EncryptionKeys","EventStream","EventStreams","Groups","Images","KeyStore","KeyStores","MFADevices","Networks","NetworkInterface","NetworkInterfaces","NetworkPermission","NetworkPermissions","NetworkPolicy","NetworkPolicies","NetworkService","NetworkServices","NetworkSubnet","NetworkSubnets","NetworkComponents","NetworkListeners","NetworkGroups","Options","OptionGroup","OptionGroups","Organizations","PasswordPolicy","PasswordPolicies","Parameters","ParameterGroup","ParameterGroups","PermissionList","PermissionLists","Policies","PolicyEntry","PolicyEntries","PolicyVersion","PolicyVersions","PortRange","PortRanges","Protocols","PublicKey","PublicKeys","ResourceGroup","ResourceGroups","Roles","ServiceTag","ServiceTags","ServerCertificate","ServerCertificates","SigningCertificate","SigningCertificates","SharedAccessPolicy","SharedAccessPolicies","Snapshots","SubnetGroup","SubnetGroups","activityCount","allowUsersToChangePassword","encryption","Subscriptions","cidrBlock","Users","auditsTo","notAuditsTo","receivesAuditFrom","notReceivesAuditFrom","accessedBy","notAccessedBy","isRegisteredWith","notIsRegisteredWith","hasRegisteredNetworkGroup","notHasRegisteredNetworkGroup","serves","notServes","isServedBy","notIsServedBy","canBeAccessedBy","notCanBeAccessedBy","manages","hasTag","hasAlias","notHasAlias","isAliasOf","notIsAliasOf","hasAudit","notHasAudit","isClassificationOfAudit","notIsClassificationOfAudit","audits","notAudits","isAttachedToSubnet","isAttachedToInterface","includedInPolicy","references","hasSnapshot","isDefinedBy","hasClassification","isAttachedToNetwork","includedInNetwork","isPartOf","isPartOfPolicyEntry","hasAccessToData","hasAttachedNetworkComponent","notHasAttachedNetworkComponent","isAttachedToNetworkComponent","notIsAttachedToNetworkComponent","hasAttachedNetworkPolicy","notHasAttachedNetworkPolicy","hasAttachedNetworkGroup","notHasAttachedNetworkGroup","canBeAssumedBy","notCanBeAssumedBy","isAllowedByDestination","notIsAllowedByDestination","isAllowedBySource","notIsAllowedBySource","isDeniedBySource","notIsDeniedBySource","isDeniedByDestination","notIsDeniedByDestination","isSnapshotOfBlockStorage","notIsSnapshotOfBlockStorage","isSnapshotOfCluster","notIsSnapshotOfCluster","isSnapshotOfCompute","notIsSnapshotOfCompute","serviceIsIn","notServiceIsIn","isUsedBy","notIsUsedBy","hasBlockStorage","notHasBlockStorage","hasAttachedClusterParameterGroup","notHasAttachedClusterParameterGroup","containsDataStore","notContainsDataStore","hasAttachedParameterGroup","notHasAttachedParameterGroup","hasAttachedSubnetGroup","notHasAttachedSubnetGroup","hasAttachedOptionGroup","notHasAttachedOptionGroup","assumedBy","notAssumedBy","hasAttachedPasswordPolicy","notHasAttachedPasswordPolicy","hasAttachedAccessPolicy","notHasAttachedAccessPolicy","hasAttachedSharedAccessPolicy","notHasAttachedSharedAccessPolicy","isProtectedBy","notIsProtectedBy","baseOf","notBaseOf","hasAttachedCompute","notHasAttachedCompute","hasRouteTable","notHasRouteTable","notIncludes","hasSubnet","notHasSubnet","includesCompute","notIncludesCompute","includesInterface","hasAttachedInterface","notHasAttachedInterface","hasAttachedStorage","notHasAttachedStorage","isPeeredWith","notIsPeeredWith","notIncludesInterface","egressProtectedBy","notEgressProtectedBy","ingressProtectedBy","notIngressProtectedBy","organizes","actionIsIn","notActionIsIn","organizedBy","accessedProtection","hasAccessToNetworkPolicy","hasAccessToCompute","accessedCompute","accessedIdentity","hasAccessToIdentity","accessedNetworkPolicy","hasPrincipal","hasAccessToProtection","accessedData","usesPortrange","usesProtocol","allowsServiceTagDestination","deniesServiceTagSource","allowsPortRangeSource","deniesServiceTagDestination","deniesPortRangeDestination","allowsPolicyDestination","allowsServiceTagSource","deniesPolicySource","deniesPortRangeSource","protectsIngress","allowsPolicySource","allowsPortRangeDestination","deniesCIDRDestination","deniesProtocol","deniesCIDRSource","allowsProtocol","allowsCIDRDestination","protectsEgress","allowsCIDRSource","deniesPolicyDestination","hasDataStoreVersion","isInCountry","performedIn","containsCloudAccount","scansAccount","containsAccount","isInAvailabilityZone","isInRegion","isRegionOfMultiRegion","notIsRegionOfMultiRegion","hasDataType","hasDataStoreType","isInSubdivision","containsIdentity","ownsContent","hasPermissionList","protects","assumedRole","isInCity","canAssume","runsOn","cloneOf","isAttachedToAccessPolicy","performedAt","containsServiceType","containsActionType","notIsAttachedTo","notManages","notHasTag","notIsAttachedToSubnet","notIsAttachedToInterface","notIncludedInPolicy","notContains","notReferences","notHasSnapshot","notIsAttachedToBlockStorage","notBasedOn","notIsDefinedBy","notHasClassification","notIsAttachedToNetwork","notIncludedInNetwork","notIsPartOf","notIsPartOfPolicyEntry","notIsPartOfPolicyVersion","notHasServiceType","notHasPermission","notDenies","notHasActionType","notAllows","notHasAccessToData","notOrganizes","notOrganizedBy","notAccessedProtection","notHasAccessToNetworkPolicy","notAppliesTo","appliesToData","notAppliesToData","appliesToIdentity","notAppliesToIdentity","isAssignedTo","notIsAssignedTo","usedToAccess","notUsedToAccess","isClassificationOfServiceType","notIsClassificationOfServiceType","isAvailabilityZoneOf","notIsAvailabilityZoneOf","isCityOfLocation","notIsCityOfLocation","countryOfAction","notCountryOfAction","isCountryOfRegion","notIsCountryOfRegion","isCountryOfSubdivision","notIsCountryOfSubdivision","isClassificationOfDataStore","notIsClassificationOfDataStore","isClassificationOfDataStoreType","notIsClassificationOfDataStoreType","appliesToDataStore","notAppliesToDataStore","managedBy","notManagedBy","isRegionOfAvailabilityZone","notIsRegionOfAvailabilityZone","isRegionOfResource","notIsRegionOfResource","isVersionOfDataStore","notIsVersionOfDataStore","isVersionOfDataStoreType","notIsVersionOfDataStoreType","locationOfAction","notLocationOfAction","isSubdivisionOfCity","notIsSubdivisionOfCity","tagsEntity","notTagsEntity","notHasAccessToCompute","notAccessedCompute","notPerformed","notAccessedIdentity","notHasAccessToIdentity","notAccessedNetworkPolicy","notHasPrincipal","notIsOwnerOf","notHasAccessToProtection","notIsMemberOf","notAccessedData","notUsesPortrange","notUsesProtocol","notAllowsServiceTagDestination","notDeniesServiceTagSource","notAllowsPortRangeSource","notDeniesServiceTagDestination","notDeniesPortRangeDestination","notAllowsPolicyDestination","notAllowsServiceTagSource","notDeniesPolicySource","notDeniesPortRangeSource","notProtectsIngress","notAllowsPolicySource","notAllowsPortRangeDestination","notDeniesCIDRDestination","notDeniesProtocol","notDeniesCIDRSource","notAllowsProtocol","notAllowsCIDRDestination","notProtectsEgress","notAllowsCIDRSource","notDeniesPolicyDestination","notHasPolicyVersion","notHasPolicyEntry","notHas","notHasDataStoreVersion","notIsInCountry","notPerformedIn","notContainsCloudAccount","notScansAccount","notContainsAccount","notVariables","notIsInAvailabilityZone","notIsInRegion","notHasDataType","notHasDataStoreType","notIsInSubdivision","notContainsIdentity","notOwnsContent","notAccessedWith","notHasPermissionList","notProtects","notPerformedOn","notAssumedRole","notIsInCity","notCanAssume","notRunsOn","notCloneOf","notIsAttachedToAccessPolicy","notPerformedAt","notHasMFADevice","notContainsServiceType","notContainsActionType","operations","NEQ","STARTS_WITH","ENDS_WITH","CONTAINS","NOT_CONTAINS","GTE","LTE","TEXT_CONTAINS","TEXT_CONTAINS_REGEX","TEXT_CONTAINS_PREFIX","TEXT_FUZZY","enumValues","Any","ACCESSKEY","ADMIN","ASSUMEDROLE","DATASTORE","KEYSTORE","VIRTUAL","PHYSICAL","ZONE","PLATFORM","CLOUD","POLICYENTRY","POLICYVERSION","FEDERATEDUSER","ORGANIZATION","OBJECT","SRCIP","USERAGENT","USERNAME","OPERATION","ACTIONTYPE","SERVICE","AWSEVENT","AZUREEVENT","GCPEVENT","ticketStatusNEW","ticketStatusSNOOZED","ticketStatusRISK_ACCEPTED","ticketStatusCLOSED","InjectSaga","injectors","ejectSaga","setPreviewResults","createSwimlaneSuccess","deleteSwimlaneSuccess","updateSwimlane","updateSwimlaneSuccess","setUpdateSwimlaneError","getTagValues","setTagValues","setControlFrameworksForSwimlane","setBotValues","updateSwimlanesInControlFrameworkSuccess","updateUserInSwimlane","updateUserInSwimlaneSuccess","setSwimlaneBotError","importFunc","fallback","LazyComponent","lazy","setPivot","setTypes","fetchSavedSearchesDetails","setSavedSearches","setAllowedRootQueries","setSavedSearch","setGraphQLSchema","fetchGraphQLSchema","setSonraiSearches","fetchAccounts","fetchAccountsSuccess","fetchSubscriptions","fetchSubscriptionsSuccess","fetchTags","fetchTagsSuccess","loadTag","fetchDataContainers","fetchDataContainersSuccess","setQueryNames","removeSavedSearch","setHasCollectors","setMonitoredResourcesCount","fetchSwimlanesSuccess","addSwimlane","removeSwimlane","removeSwimlaneSuccess","fetchSonraiUsersSuccess","updateSonraiUser","updateSonraiUserSuccess","setAllRoles","errAllRoles","updateUserRoles","updateUserRolesSuccess","setBots","updateBotAssignments","updateBotAssignmentsSuccess","createBot","createBotSuccess","getExemptedIdentities","setExemptedIdentities","setExemptedIdentitiesError","addExemptedIdentities","addExemptedIdentitiesSuccess","deleteExemptedIdentities","deleteExemptedIdentitiesSuccess","validateSourceUrl","validateSourceUrlSuccess","clearSourceUrlValidation","handleDeleteBots","handleDeleteBotsSuccess","fetchObjectivesError","setObjectives","enableObjective","enableAllObjectives","enableAllObjectivesSuccess","enableAllObjectivesError","enableAllObjectivesForSwimlane","enableAllObjectivesForSwimlaneError","enableAllObjectivesForSwimlaneSuccess","enableObjectiveSuccess","enableObjectiveError","setSonraiConfig","InlineEdit","editingContainer","InlineEditableText","isNodeView","hideErrorMessage","cancelEditing","editing","inputStyle","offsetWidth","copy","stopBeingBig","inactiveText","getEditInputStyle","onKeyDown","onKeyPress","autoFocus","activeNode","staticHov","setEditing","getTooltip","loadingStyle","centerContent","CRM_ALERT_INDICATOR","hoveredOption","mainContainer","tabHeader","optionsContainer","filterInput","TableActions","main","rows","columnNames","emptyRows","countOfEmptyRows","columnsToHide","getEmptyColumns","columnApi","setColumnsVisible","getAllGridColumns","col","colId","autoSizeColumns","setColumnVisible","hideEmptyColumns","toggleMenu","expandAll","collapseAll","autoSize","resetColumnState","exportDataAsCsv","fileName","processCellCallback","getColumnState","hasSelectedAll","handleSelectAllChange","handleColumnSelect","toggleMainTab","toggleColumnTab","defaultHiddenColumns","dateColumns","effectivePermissionsFormatter","dateTimeFormatter","paramValue","stringFormatter","formatBoolean","countFormatter","getFormatterForCol","sampleValue","colName","getAllowedAggregationFuncs","sortColumn","sensitivity","getToolTip","valueFormatted","isHiddenByDefault","hiddenColName","getAdditionalConfig","getColumnName","customConfig","additionalConfig","comparator","valueFormatter","allowedAggFuncs","tooltipValueGetter","sortable","resizable","ExpandRenderer","selectAllButton","loadingOverlay","AGGridDataTable","loaded","isIdentityChainModalOpen","pathData","getColumnApi","groupColumns","getRowGroupColumns","newData","cloneDeep","strippedData","safeRow","cleanData","getCleanData","hasGrouping","colDef","setPopupParent","querySelector","allCols","columnsStateWidthOverrides","gridState","columnState","setRowGroupColumns","cell","filterModel","getApi","getFilterModel","filterState","filteredColumnIdValues","setFilterModel","filterType","standard","defaultItems","exportIndex","toolPanelIndex","subMenu","filterOutCell","filterInCell","itemsToExclude","EffectivePermission_identityChain","EffectivePermission_policySrn","epPathData","epSourceName","getColumnProps","crm","expandCollapseColumn","setJSON","headerValueGetter","showEPPath","cellClass","getIndicatorColClass","suppressColumnsToolPanel","lockPosition","lockVisible","lockPinned","suppressAutoSize","checkboxSelection","suppressMovable","multiRowSelect","rowGroupActive","displayedColumns","getAllDisplayedColumns","isFirstColumn","setQuickFilter","debounce","setQuickFilterNOW","disableSearchBar","handleSearchBarChange","noTableActions","renderSearchBar","bulkActionWorking","checkboxSelectedRows","bulkActions","ActionToolbar","approxSeverity","hasPagination","toolbarHeight","aggridStuff","expandRenderer","getRows","onRowSelected","handleRowSelection","getHeightOfVisibleRows","renderToolbar","aggFuncs","countUnique","groupedBy","processCellForClipboard","headerHeight","onGridReady","getRowSelection","enableCellTextSelection","suppressCopyRowsToClipboard","getRowStyle","setRowStyle","enableBrowserTooltips","suppressDragLeaveHidesColumns","headerCheckboxSelection","hasHeaderCheckboxSelection","headerCheckboxSelectionFilteredOnly","columnWidth","rowData","getContextMenuItems","suppressAggFuncInHeader","autoGroupColumnDef","groupHeaderName","suppressMenuHide","getMainMenuItems","onSelectionChanged","selectionChanged","suppressRowClickSelection","pagination","paginationPageSize","suppressMakeColumnVisibleAfterUnGroup","getExpandCollapseColConfig","cacheQuickFilter","getColumns","toggleIsIdentityChainModalOpen","sortColumns","ConfigurableTable","columnGroupState","getColumnGroupState","sortModel","getSortModel","getGridState","onLayoutChange","newOptions","gState","gridColumnIds","getAllColumns","optionColumnIds","validColumnsFromOptions","extraColumns","setColumnState","columnGroupstate","setColumnGroupState","setSortModel","sortModelConfig","userPreferenceState","getUserPreferenceGridState","loadColumnState","addGlobalListener","saveColumnsState","handleRowDoubleClick","handleRowSingleClick","widget","sampleItem","getRelationHeaderName","customColumnHeaders","edgeName","edgeTypeName","mainTypeName","childRelation","parentRelation","onRowCountChange","onCellEditingStopped","sortColumnByType","unicode","selectUser","selectAppMeta","selectEnvKey","selectEnvConfig","appMeta","envKey","selectCurrentOrgConfig","orgConf","selectFeatureFlagConfig","createFlags","FlagsProvider","Flag","useFlags","featureFlagConfig","flags","feature_flags","flag","selectUserProfileDataDomain","setPolicies","createPolicySuccess","updateControlGroupSuccess","setControlGroups","createControlGroup","createControlGroupSuccess","deleteControlGroupSuccess","deletePolicySuccess","updatePolicySuccess","addPolicySuccess","removePolicySuccess","cloneFrameworkSuccess","setFrameworkEnabledSuccess","toggleEnabledOnSwimlanesSuccess","toggleSwimlaneOnCFs","toggleSwimlaneOnCFsSuccess","toggleSwimlaneOnCFsError","INTEGRATION_TYPES","SLACK","SERVICE_NOW","JIRA","slackActionTypeKey","TICKET_OPENED","TICKET_CLOSED","TICKET_REOPENED","TICKET_SNOOZED","TICKET_RISK_ACCEPTED","TICKET_ASSIGNED","TICKET_COMMENT_ADDED","TICKET_ESCALATION_EXECUTED","slackActionTypes","tooltipContainer","renderIHelp","GET_ALL_BOTS","GET_FILTERED_BOTS","CREATE_BOT_MUTATION","metadataMap","doesMetadataMappingFilterMatch","currentMapping","currentValues","getMetadataKeyPreviews","removeButton","alignContent","borderTopLeftRadius","borderBottomLeftRadius","tagHeight","removeTag","borderTopRightRadius","borderBottomRightRadius","tagText","NodeViewTab","selectTicketList","selectTicketListFilter","scrollWrapper","actionsContainer","Handle","Slider","showEdit","slider","dragging","restProps","savedSonraiSearches","selectedSearchId","onSelect","trackStyle","handleStyle","onAfterChange","handle","failContainer","crashImg","crashText","MissingDataNode","crash","servicesTitle","accountLabel","createdOnLabel","activeLabel","GET_ACCOUNT_CONTENT","accountContent","accountNodeViewCardLayoutReducer","getAccountContent","setAccountContent","accountNodeSaga","ACCOUNT_NODE_VIEW_QUERY","selectAccountNodeViewCardLayoutDomain","selectAccountContent","AccountNodeViewCardLayout","service","ServiceName","graph","w","h","getServices","onNodeView","getLayouts","gridContent","getHeaderDetails","renderDetailsTab","createSC","addWidget","saveCard","shareCard","dupeCard","exportCard","typeLabel","lastModifiedLabel","createdLabel","groupsPolicies","owns","statusDays1","statusDays7","statusDays30","statusDays90","selectUserNodeViewCardLayoutDomain","selectActionsPerformed","selectIsLoadingActions","selectUserContent","selectLoadingUserContent","GET_ACTIONS_PERFORMED","GET_USER_CONTENT","actionsPerformed","loadingUserContent","userContent","userNodeViewCardLayoutReducer","getActionsPerformed","setActionsPerformed","getUserContent","setUserContent","userNodeSaga","range","USER_NODE_VIEW_ACTIONS_PERFORMED_QUERY","USER_NODE_VIEW_QUERY","UserNodeViewCardLayout","groupName","groupActive","policyActive","policyName","cityPerformedAt","numGroups","getMemberOf","numOwned","getKeysOwned","numPerformed","getPerformed","groups","nodeViewType","handleRangeChange","BigStatWidget","getMFACount","getGridContent","Property","DateProperty","true","false","BoolProperty","InfoCard","overrideCard","overrideHeader","titleLink","srnLabel","bytes","publicRead","publicWrite","websiteEnabled","auditEnabled","containerLabel","none","dataItem","GET_DATA_CONTENT","dataContent","dataNodeViewCardLayoutReducer","getDataContent","setDataContent","dataNodeSaga","DATA_NODE_VIEW_QUERY","selectDataNodeViewCardLayoutDomain","selectDataContent","DataNodeViewCardLayout","widthPercent","heights","containerData","getContainer","onClickContainer","renderContainerCard","Contents","DataClassifications","FingerPrints","encryptionEnabledLabel","auditEnabledLabel","versioningEnabledLabel","publicReadLabel","publicWriteLabel","websiteEnabledLabel","writeOnceLabel","GET_DATA_CONTAINER_CONTENT","loadingActions","dataContainerNodeViewCardLayoutReducer","getDataContainerContent","setDataContainerContent","dataContainerNodeSaga","DATA_CONTAINER_PERFORMED_ON_ACTIONS_QUERY","DATA_CONTAINER_NODE_VIEW_QUERY","selectDataContainerNodeViewCardLayoutDomain","selectDataContainerContent","DataContainerNodeViewCardLayout","Type","CoalescedCount","Encryption","FileExtension","hasActions","hasContents","getContents","hasFingerPrints","getFingerPrints","fingerprints","contents","getDataAnatomyCustomColumnCofig","subtitle","getContentsTable","GET_DATA_STORE_CONTENT","dataStoreContent","dataStoreNodeViewCardLayoutReducer","getDataStoreContent","setDataStoreContent","errDataStoreContent","dataStoreNodeSaga","DATA_STORE_CONTENTS_QUERY","selectDataStoreContent","TYPES_WITH_ANATOMY","DataStoreNodeViewCardLayout","renderTablesAndColumnsView","renderDBAnatomy","renderDetailsTabs","descriptionLabel","sizeLabel","webisteEnabled","record","public","usedIn","Version","Fingerprint","topTitleText","lastLaunched","GET_PUBLICKEY_CONTENT","publickeyContent","publickeyNodeViewCardLayoutReducer","getPublickeyContent","setPublickeyContent","publickeyNodeSaga","PUBLIC_KEY_NODE_VIEW_QUERY","selectPublickeyNodeViewCardLayoutDomain","selectPublickeyContent","PublicKeyNodeViewCardLayout","accessed","ComputeName","getUsedToAccess","selectRoleNodeViewCardLayoutDomain","selectRoleContent","GET_ROLE_CONTENT","roleContent","roleNodeViewCardLayoutReducer","getRoleContent","setRoleContent","roleNodeSaga","ROLE_NODE_VIEW_QUERY","RoleNodeViewCardLayout","principals","numAttachedPolicies","getAttachedPolicies","loadingRoleContent","getPrincipals","activeSubkey","activeSubkeyButton","subkeys","PolicyEntryInfo","setContent","subkey","policyEntry","conditions","resourceFilter","renderPolicySubButton","allowsLabel","deniesLabel","entryContainer","entryList","permissionsTitle","policyEntryTitle","contentsWrapper","PolicyVersionWidget","selectedPolicyIndex","selectedSubKey","getSelectedPolicyEntry","getSelectedSubKey","policyIndex","recalculateGrid","renderPolicyEntryList","getTableContents","renderPermissionsList","Description","subscription","GET_POLICY_CONTENT","policyContent","policyNodeViewCardLayoutReducer","getPolicyContent","setPolicyContent","policyNodeSaga","POLICY_NODE_VIEW_QUERY","selectPolicyNodeViewCardLayoutDomain","selectPolicyContent","descTitle","niceline","PolicyNodeViewCardLayout","selectedTabIndex","getVersions","getSelectedVersion","renderDesc","desc","getPolicyJSON","toggleJSONModal","stateLabel","architectureLabel","platformLabel","GET_IMAGE_CONTENT","imageContent","imageNodeViewCardLayoutReducer","getImageContent","setImageContent","imageNodeSaga","IMAGE_NODE_VIEW_QUERY","selectImageNodeViewCardLayoutDomain","selectImageContent","ImageNodeViewCardLayout","getComputes","computeName","networks","network","subnets","subnet","blockstorages","BlockStorageName","numUsedIn","getUsedIn","computes","actionsTitle","subnetsTitle","blockStorageTitle","networksTitle","launchTimeLabel","basedOnLabel","ebsOptimizedLabel","timezoneLabel","isPublicLabel","networkConnection","securityGroups","cardBody","rowDataCell","rowArrowCell","NetworkConnectionsWidget","computeContent","interfaze","vpc","subnetWithVPCs","getRowData","renderRow","GET_COMPUTE_CONTENT","GET_INBOUND_PUBLIC_FILTERS","GET_INBOUND_PRIVATE_FILTERS","GET_INBOUND_PUBLIC_PATH","GET_INBOUND_PRIVATE_PATH","GET_OUTBOUND_PUBLIC_FILTERS","GET_OUTBOUND_PRIVATE_FILTERS","GET_OUTBOUND_PUBLIC_PATH","GET_OUTBOUND_PRIVATE_PATH","GET_INDIRECT_INBOUND_PUBLIC_FILTERS","GET_INDIRECT_INBOUND_PRIVATE_FILTERS","GET_INDIRECT_INBOUND_PUBLIC_PATH","GET_INDIRECT_INBOUND_PRIVATE_PATH","GET_COMPUTE_SECURITY_GROUPS","inboundPublicFilters","loadingInboundPublicFilters","inboundPrivateFilters","loadingInboundPrivateFilters","inboundPublicPath","loadingInboundPublicPath","inboundPrivatePath","loadingInboundPrivatePath","outboundPublicFilters","loadingOutboundPublicFilters","outboundPrivateFilters","loadingOutboundPrivateFilters","outboundPublicPath","loadingOutboundPublicPath","outboundPrivatePath","loadingOutboundPrivatePath","indirectInboundPublicFilters","loadingIndirectInboundPublicFilters","indirectInboundPrivateFilters","loadingIndirectInboundPrivateFilters","indirectInboundPublicPath","loadingIndirectInboundPublicPath","indirectInboundPrivatePath","loadingIndirectInboundPrivatePath","loadingSecurityGroups","errorSecurityGroups","computeNodeViewCardLayoutReducer","getComputeContent","setComputeContent","getInboundPublicFilters","setInboundPublicFilters","getInboundPrivateFilters","setInboundPrivateFilters","getInboundPublicPath","setInboundPublicPath","getInboundPrivatePath","setInboundPrivatePath","getOutboundPublicFilters","setOutboundPublicFilters","getOutboundPrivateFilters","setOutboundPrivateFilters","getOutboundPublicPath","setOutboundPublicPath","getOutboundPrivatePath","setOutboundPrivatePath","getIndirectInboundPublicFilters","setIndirectInboundPublicFilters","getIndirectInboundPrivateFilters","setIndirectInboundPrivateFilters","getIndirectInboundPublicPath","setIndirectInboundPublicPath","getIndirectInboundPrivatePath","setIndirectInboundPrivatePath","getComputeSecurityGroups","setComputesecurityGroups","errComputeSecurityGroups","computeNodeSaga","COMPUTE_NODE_VIEW_QUERY","COMPUTE_INBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY","COMPUTE_INBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY","COMPUTE_INBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY","COMPUTE_INBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY","COMPUTE_OUTBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY","COMPUTE_OUTBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY","COMPUTE_OUTBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY","COMPUTE_OUTBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY","COMPUTE_INDIRECT_INBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY","COMPUTE_INDIRECT_INBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY","COMPUTE_INDIRECT_INBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY","COMPUTE_INDIRECT_INBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY","COMPUTE_SECURITY_GROUP_QUERY","networkPolcies","it","interfaces","allNetworkPolcies","selectComputeNodeViewCardLayoutDomain","selectComputeContent","selectInboundPublicFilters","selectLoadingInboundPublicFilters","selectInboundPrivateFilters","selectLoadingInboundPrivateFilters","selectInboundPublicPath","selectLoadingInboundPublicPath","selectInboundPrivatePath","selectLoadingInboundPrivatePath","selectOutboundPublicFilters","selectLoadingOutboundPublicFilters","selectOutboundPrivateFilters","selectLoadingOutboundPrivateFilters","selectOutboundPublicPath","selectLoadingOutboundPublicPath","selectOutboundPrivatePath","selectLoadingOutboundPrivatePath","selectIndirectInboundPublicFilters","selectLoadingIndirectInboundPublicFilters","selectIndirectInboundPrivateFilters","selectLoadingIndirectInboundPrivateFilters","selectIndirectInboundPublicPath","selectLoadingIndirectInboundPublicPath","selectIndirectInboundPrivatePath","selectLoadingIndirectInboundPrivatePath","selectSecurityGroups","selectLoadingSecurityGroups","selectErrorSecurityGroups","FilterAndPath","showPath","flattened","portRangeMax","portRangeMin","cidr","tableStyle","disabledSection","filterLabel","renderFilterTable","pathLabel","togglePath","expandPath","pathWidget","loadingPath","renderFilters","renderPath","AccessWidget","publicFilters","publicPath","privateFilters","privatePath","getExposedToPublic","loadingFilters","loadingPublicFilters","loadingPublicPath","getExposedToPrivate","loadingPrivateFilters","loadingPrivatePath","ComputeNodeViewCardLayout","block","interface","closeMiniModeView","accessTable","GenericNodeViewCardLayout","classificationLabel","cloudTypeLabel","permissionIdsTitle","executedIdsTitle","GET_ACTIONTYPE_CONTENT","actiontypeContent","actiontypeNodeViewCardLayoutReducer","getActiontypeContent","setActiontypeContent","actiontypeNodeSaga","ACTION_TYPE_NODE_VIEW_QUERY","selectActiontypeNodeViewCardLayoutDomain","selectActiontypeContent","ActionTypeNodeViewCardLayout","IdentityName","numIdentitiesEx","getIdentitiesExecuted","numIdentitiesPerms","getIdentitiesWithPermissions","identitiesExecuted","identitiesWithPermissions","getClassificationType","accessKeyLabel","accountUserLabel","regionLabel","sourceIPLabel","succeededLabel","userAgentLabel","eventNameLabel","performedByTitle","performedOnTitle","actionTypesTitle","eventDetailsTitle","firstEventDetailsTitle","firstEventDetailsTooltip","originalIdentityLabel","performedByUser","performedByUserAndRole","roleLabel","GET_ACTION_CONTENT","actionContent","actionNodeViewCardLayoutReducer","getActionContent","setActionContent","actionNodeSaga","ACTION_NODE_VIEW_QUERY","selectActionNodeViewCardLayoutDomain","selectActionContent","tableCell","tableCellLabel","tableCellValue","tableCellTextRow","tableCellTextRowNoEllip","tableRow","ActionNodeViewCardLayout","getNameFromResource","role","accessKey","typeFromSRN","originalIdentityType","getPerformedByWidget","getPerformedOn","getEventDetails","performedby","performedon","eventdetails","getCols","getHeaderBadge","GET_IDENTITY_CONTENT","identityContent","identityNodeViewCardLayoutReducer","getIdentityContent","setIdentityContent","identityNodeSaga","IDENTITY_NODE_VIEW_QUERY","selectIdentityNodeViewCardLayoutDomain","selectIdentityContent","IdentityNodeViewCardLayout","GET_GROUP_CONTENT","groupContent","groupNodeViewCardLayoutReducer","getGroupContent","setGroupContent","groupNodeSaga","GROUP_NODE_VIEW_QUERY","selectGroupNodeViewCardLayoutDomain","selectGroupContent","GroupNodeViewCardLayout","member","getMembers","GET_AUDIT_CONTENT","auditContent","auditNodeViewCardLayoutReducer","getAuditContent","setAuditContent","auditNodeSaga","AUDIT_NODE_VIEW_QUERY","selectAuditNodeViewCardLayoutDomain","selectAuditContent","AuditNodeViewCardLayout","getAudits","GET_SECRET_STORE_CONTENT","GET_VAULT_STORE_CONTENT","SECRET_STORE_TYPES","VAULT","VAULT_AWS","secretStoreContent","secretStoreNodeViewCardLayoutReducer","getSecretStoreContent","setSecretStoreContent","getVaultStoreContent","secretStoreNodeSaga","SecretStores","selectSecretStoreNodeViewCardLayoutDomain","selectSecretStoreContent","SecretStoreNodeViewCardLayout","baseContent","roleCredentialType","isTopLevel","AwsVaultSecret","parsedValue","getLabelFromMetadata","SECRET_TYPES","SecretNodeViewCardLayout","GET_ENCRYPTION_KEY_CONTENT","encryptionKeyContent","encryptionKeyNodeViewCardLayoutReducer","getEncryptionKeyContent","setEncryptionKeyContent","EncryptionKeyNodeSaga","ENCRYPTION_KEY_NODE_VIEW_QUERY","selectEncryptionKeyNodeViewCardLayoutDomain","selectEncryptionKeyContent","EncryptionKeyNodeViewCardLayout","alias","currentIndex","prevNext","userSelect","togglePolicyEntriesModal","modalHeader","onClickPolicy","modalFooter","renderPolicyNav","showPolicy","getProtected","getAlias","getPolicies","handlePolicyModal","renderPolicyEntriesModal","detailsLoading","fetchingKeyVaultCreds","deletingKeyVaultCreds","updatingKeyVaultCreds","keyVaultCreds","keyVaultError","resourceGroups","fetchingResourceGroup","shouldUpdateNodeSwimlanes","fetchingEffectivePermissions","fetchingUsedEffectivePermissions","usedEffectivePermissions","uberPolicy","crmTickets","ticketCount","highestImportance","swimmy","defaultImportance","newdude","hasIn","importance","usedPermissions","getNameInfoOnSrn","getInfoOnField","getChangeDetectionProperties","getChangeDetectionOptions","getCRMTickets","nodeSolutionCenterSaga","extendedInfo","fieldsWithSrns","arrOfFieldsWithSrnsInfo","formatChangeDetectionProperties","swimlaneQuery","CDConfigs","change","setMonitor","monitor","epfilter","permissionActivity","takeEvery","getNodeType","K8sClusterNodeViewCardLayout","K8sNamespaceNodeViewCardLayout","K8sWorkloadNodeViewCardLayout","tagOptions","fetchData","shouldReloadSwimlanes","hasCRM","getNodeCardClass","FETCH_TICKET_TEMPLATES","FETCH_TICKET_TEMPLATE_FIELD_SELECT","SAVE_CUSTOM_TICKET","UPDATE_CUSTOM_TICKET","CLEAR_STATE","fieldSelectInitialState","selectedTicketTemplate","createTicketStatus","assignEscalationError","ticketTemplates","ticketTemplateFields","setFieldInitialStateIfUnset","createTicketModalReducer","assignTicketEscalationError","fetchTicketTemplates","fetchTicketTemplatesError","fetchTicketTemplatesSucces","fetchTicketTemplateFieldSelect","fetchTicketTemplateFieldSelectError","fetchTicketTemplateFieldSelectSuccess","saveCustomTicket","saveCustomTicketError","saveCustomTicketSucces","updateCustomTicket","updateCustomTicketError","updateCustomTicketSuccess","setTicketType","setSelectedTicketTemplate","clearState","setTicketTemplateFieldValue","FETCH_TICKET_TEMPLATES_QUERY","ASSIGN_TICKET_ESCALATION_MUTATION","REMOVE_TICKET_ESCALTION_MUTATION","CREATE_TICKET_MUTATION","UPDATE_TICKET_MUTATION","getSelectOptionsObjects","valueField","labelFields","currentValue","nextKey","fetchTicketTemplateSelect","assignTicketEscalationSchema","removeCurrentEscalation","escalationSchemeSrn","escalationScheme","currentFilter","newTicket","currentEscalation","valueSeq","alreadyAssigned","selectCreateUpdateTicketModalDomain","selectTicketType","selectSelectedTicketTemplate","selectTicketTemplates","selectTicketTemplateFields","selectCreateTicketStatus","createError","invalidTemplate","validationErrors","StyledErrorContainer","FormErrorMessage","getEscalationOptions","selectedSwimlanes","handleTitleChange","handleDescriptionChange","handleSwimlaneChange","handleAccountChange","handleSelfAssign","assignedTo","handleAssignedToChange","handleEscalationChange","TemplateFieldCheckbox","isChecked","setIsChecked","fieldState","fieldDefinition","getPlaceholdertext","TemplatefieldSelect","setSelectedValue","multi","optionValues","TemplateField","TemplateFields","TicketTemplateForm","SelectTicketType","ticketTemplate","handleTicketType","handleTicketTemplateChange","template","TicketBody","isUpdateMode","getInitialSwimlaneState","getModalTitle","cleanup","templateSRN","selectedTemplate","prevMutateStatusRef","useRef","wasLoading","isBoolean","usePrevious","assignmentControlAll","assignmentControlMyself","assignmentControlUnassigned","createdByCriticalAssetMonitor","createdByPolicyEvaluation","statusControlOpen","statusControlAll","connectProps","AssigneeColumn","CreatedByColumn","getQuickFilterText","getDisplayValue","ResourceColumn","StatusColumn","SwimlanesColumn","swimmies","second","allTickets","closeDetails","setActiveTicketSrn","currIndex","getTicketId","formatTicketTitle","formatTicketType","ticketSrns","setComment","newcomment","AddTagsModal","inputWrapper","inputLabel","suggestions","resourceSrns","onChangeKey","onChangeValue","getObjective","mappedObjectives","getPoliciesFromObjectives","formatData","resourceName","assignee","lastModified","firstSeen","lastSeen","formatRow","defaultColumnConfig","selectBulkActionWorking","activeTicketSrn","selectedTickets","setSelectedTickets","gridAPI","setGridAPI","showReassignModal","setShowReassignModal","showAcceptRiskModal","setShowAcceptRiskModal","showSnoozeModal","setShowSnoozeModal","showCommentModal","setShowCommentModal","showTagModal","setShowTagModal","previousBulkActionWorking","deselectAll","checkboxRowTest","getSelectedRows","AssignToUserModal","SnoozeModal","hideSolutionCard","unhideSolutionCards","getCoordConf","coordinates","round","precision","pow","getAlertColors","level","getRGB","CRUD","getCRUDActionMap","getFriendlyActionName","getCrmPropertySubtitle","valueIn","getFriendlyKeyName","upperFirst","getAlertLevelColor","numericLevel","widgetSearchUsesFirstCard","dictDataBeing","Activity","ProtectionCreate","Archive","ProtectionDelete","Create","Analytic","Read","Stop","Message","Update","Restore","DataCreate","Authentication","DataDelete","DataUpdate","Logout","Resume","Configure","DataRead","Accept","Failure","Start","ProtectionUpdate","Delete","dictDataCan","dictIdentityDoing","dictIdentityCan","getFriendlyResourceName","niceActionName","ac","getFriendlyEvidenceField","getFriendlyCRMTicketName","buildDataTicketName","evidenceOne","evidenceTwo","buildIdentityTicketName","getFriendlyPropertyTicketName","injectReducerFactory","Reflect","allowedModes","checkKey","checkDescriptor","descriptor","injectSagaFactory","newDescriptor","hasSaga","task","ejectSagaFactory","cancel","ticketDetailsReducer","SONRAI_USERS_QUERY","fetchUserPermissions","currentUserPath","allPermissions","assPermissions","permList","expandedPermissions","accumulator","mergeRoleAssignments","permissionsData","iconColor","getIconInfo","languageProviderReducer","combineReducers","router","connectRouter","language","modifyFieldsForSRN","rootIndex","rootNodeType","ACCEPT_RISK_MUTATION","CLOSE_TICKET_MUTATION","REOPEN_TICKET_MUTATION","SNOOZE_TICKET_MUTATION","FETCH_TICKET_DETAILS_QUERY","FETCH_TICKET_COMMENTS_QUERY","ADD_TICKET_COMMENT_MUTATION","FETCH_SIMILAR_TICKETS_QUERY","REASSIGN_TICKET_MUTATION","FETCH_TICKET_HISTORY_QUERY","ACTIONS_QUERY","TICKET_BOT_ACTIONS_QUERY","fetchResourceOnTicket","fetchNextEscalationOnTicket","reassignTicketToUser","updateTicketStatus","getTicketComments","addTicketComment","getTicketHistory","acceptRiskForTickets","ticketDetailsSaga","shiftDateArgs","orArgs","queryConfig","nextEscalation","metadataFilter","botActions","actionData","combinedData","actionFilter","and","policyForTicket","searchOnPolicy","isUISearch","searchForPolicy","unix","resultViews","skipCount","policyGQLSource","ExecuteSavedQuery","Query","CloseTickets","successCount","AcceptRiskTickets","VisNetwork","defaultsDeep","stabilization","autoResize","arrows","scaleFactor","getNetwork","on","DataSet","updateGraph","nodesChange","edgesChange","optionsChange","eventsChange","idIsEqual","n1","n2","nodesRemoved","differenceWith","nodesAdded","nodesChanged","patchNodes","edgesRemoved","edgesAdded","edgesChanged","patchEdges","setOptions","off","MAX_SPRING_LENGTH","MIN_SPRING_LENGTH","DEFAULT_OUT_SPRING_LENGTH","DEFAULT_IN_SPRING_LENGTH","visInfo","pointer","DOM","getNodeAt","localName","zoomView","getAccountSrnFromId","toUpper","displayAccount","parentNode","newCoords","canvas","parentCoords","getPositions","dx","dy","newSpringLength","springLengths","customSpringLengths","fullName","getHoverTitle","shortName","fullLabel","handleIconColor","handleLabelColor","face","getCoreNodeConfig","sourceNodeID","handleEdgeColor","dashes","getLabelColor","iconsLoaded","fontA","FontFaceObserver","fontB","weight","load","mounted","dragEnd","handleEndDrag","oncontext","noop","click","hoverNode","onHoverNode","blurNode","onBlurNode","doubleClick","hoverEdge","onHoverEdge","blurEdge","onBlurEdge","barnesHut","damping","gravitationalConstant","requiredIndicator","policiesDuplicatedByCf","duplicateAlert","inputValue","Papa","quoteChar","escapeChar","delimitersToGuess","RECORD_SEP","UNIT_SEP","sortCards","cards","kards","newCardOrder","aDate","bDate","compact","isPrimitiveValue","processPrimitiveCellValue","cellValue","isIp","flattenedData","addSubItems","noTypePrepend","uniqueTypes","newRows","masterRow","fieldNames","columnName","processedResult","rowVals","initialRowData","newRow","possibleIdentities","getIdentityPath","typeLow","pathpart","generalDetails","locationDetails","actionProperties","coalescedProperties","computeProperties","dataProperties","getSubscriptionFromSrn","getResourceGroupFromSrn","providers","getProvidersFromSrn","appId","substr","getWhateverFromSrn","buildAwsResourceLink","baseUrl","lastIndexOf","whatever","camelTag","isCrmType","typeandname","accounttypeandname","allParts","bigSub","lilSub","subscriptionId","pluralize","pluralizeLib","guidGen","S4","graphQLTypes","typeRelationsExpanded","putRelation","otherType","getImplementingTypes","interfaceTypeName","implementingTypes","possibleType","putAllRelationsForType","implementingType","typeRelationsRaw","sonraiCountDisplay","hasSearchLimit","formatNumber","number","numeral","charCount","getSearchIdForSonraiSearches","searchesJS","searchGuy","monthsToDays","numMonths","diff","calendar","asDays","finalMap","jsonPath","parsedString","startUnescapped","charAt","allWhitespaceUnescaped","parseJSONString","doc","hashCode","charCodeAt","num","colorToShift","baseColorLib","green","blue","excuseMeSirIMustRemainOrdered","Immutable","Seq","toOrderedMap","getValidAliasName","exec","keyedArgs","keyedArg","firstKey","originalAlertTime","offsetType","tense","measure","shiftDateArg","days","getDefaultChangeDetectionPropertiesByType","stripExtraChars","keywordMatch","truncate","separator","getAcceptableCloudAccountTypesForBots","swimlaneAccounts","allAccounts","accountsByCloudType","isPlatformRole","isValidURL","getNodeTypeMap","filteredMappings","nodeTypeCounts","getCountFromGroupedQuery","accumCountForInterfaceNodeType","things","cat","ticketResourceId","grouped","getInterfaceCount","interfaceName","countsByType","possibleTypes","casedKeys","countsByTypeLower","total","possibletype","hasFinishedEvaluatingFrameworks","appliedControlFrameworks","controlFrameworksThatHaveEvaluated","getSearchLimit","reduxLimit","prevLimit","isEnableAllObjectiveSwimlaneDisabled","getSupportedFilterFields","filterFieldType","supportedFilters","currentDef","childFields","def","HeaderLabelLink","stayInHereYouPieceOfTrash","tooltipId","getTooltop","SmolExpand","setContentOverflow","PREFIX","GET_NODE_DATA","SET_NODE_DATA","ERR_NODE_DATA","SET_CRM_DATA","ERR_CRM_DATA","SET_SWIMLANES","ERR_SWIMLANES","GET_KEYVAULT_DATA","SET_KEYVAULT_DATA","ERR_KEYVAULT_DATA","GET_RESOURCE_GROUP","SET_RESOURCE_GROUP","ERR_RESOURCE_GROUP","ADD_KEYVAULT_CREDS","ADD_KEYVAULT_CREDS_SUCCESS","ADD_RESOURCE_TO_SWIMLANE","ADD_RESOURCE_TO_SWIMLANE_SUCCESS","ADD_TAG","ADD_TAG_SUCCESS","REMOVE_TAG","REMOVE_TAG_SUCCESS","REMOVE_KEYVAULT_CREDS","REMOVE_KEYVAULT_CREDS_SUCCESS","UPDATE_KEYVAULT_CREDS","UPDATE_KEYVAULT_CREDS_SUCCESS","TOGGLE_RESOURCE_MONITORING_SUCCESS","UPDATE_FRIENDLY_NAME","UPDATE_FRIENDLY_NAME_SUCCESS","UPDATE_IMPORTANCE","UPDATE_IMPORTANCE_SUCCESS","getNodeData","setNodeData","errNodeData","setCrmData","errCrmData","setSwimlanes","errSwimlanes","getResourceGroup","setResourceGroup","errResourceGroup","getKeyVaultData","setKeyVaultData","errKeyVaultData","addKeyVaultCreds","addKeyVaultCredsSuccess","addResourceToSwimlane","addResourceToSwimlaneSuccess","addTag","addTagSuccess","removeKeyVaultCreds","removeKeyVaultCredsSuccess","removeTagSuccess","updateChangeDetectionPropertySucces","toggleResourceMonitoringSuccess","updateFriendlyName","updateFriendlyNameSuccess","updateImportance","updateImportanceSuccess","updateKeyVaultCreds","updateKeyVaultCredsSuccess","addToSwimlane","aksDiscoveryInstructions","disableMonitoring","enableMonitoring","manageKeyVaultCredentials","showLess","tenant","AddSwimlaneForm","alreadyIn","savingSL","actionButtons","toggleAddSL","handleAddSL","addIcon","autoValue","errorKey","clearMe","keyInput","addTagButton","renderPopover","makeStateToProps","defaultInitialNodeState","crmData","monitored","keyVault","adding","resourceGroup","storageAccount","addingResourceToSL","nodeViewHeader","mergeCDProperty","propertiesToRemove","existingProp","findMeIndex","every","dataPath","currentData","newCreds","cred","updateCreds","newTag","tagSrn","currentProperties","findKey","propToUpdate","updatedProp","mergeDeep","maxImortance","isNumber","default","makeSelectCrmData","makeSelectTags","AddTagForm","tagObj","getSuggestions","suggestion","encodeURIComponent","handleAddTag","toggleAddTag","onSuggestionsFetchRequested","onSuggestionsClearRequested","getSuggestionValue","renderSuggestion","inputProps","handleKeyPress","handleVal","editName","addButtonLabel","keyPlaceholder","valuePlaceholder","enableChangeDetectionMessage","EnableChangeDetection","AddProperty","popup","hasActionClassifications","actionClassificationsUsed","propertyIndexes","optionIndex","actionClassificationOptions","keyNameOptions","provided","singleValue","handleSelectAllActions","onOpen","onClose","modal","closeOnDocumentClick","EditProperty","newAlertLevel","newActionClassification","oldList","newList","oldProperty","removingActionClassifications","getRemoveProperty","ManageChangeDetection","propertyContainer","propertySelectionChanged","handleRemoveChangeDetectionProperties","orderedData","actualKeyName","ChangeDetectionModal","selectedKeyNames","selectedChangeDetectionOptions","selectedProperties","selectedChangeDetectionProperties","indexes","optionSelectionChanged","handleUpdateChangeDetectionProperty","enableChangeDetectionText","modalRef","handleEscPress","innerRef","getModalBody","handleEnableChangeDetectionProperties","ChangeDetectionActions","driftDetectionModal","defaultProperties","handleAddChangeDetectionProperties","showAccessActivity","handleDefaultChangeDetection","hasChangeDetectionEnabled","buttomMessage","handleMonitorChange","handleDriftDetectionToggle","handleCloseDriftDetectionToggle","selectCrmData","KeyVaultConfig","addCredForm","addButtonWrapper","existingContainer","cardContainer","rowContainer","containerName","editingNames","editingPaths","addAzureKeyVaultCreds","removeAzureKeyVaultCreds","setEditingName","updateAzureKeyVaultCreds","containerPrefix","setEditingPath","setAzureKeyVaultError","isAdding","submitDisabled","dismissError","creds","isDeleting","isUpdating","nameValue","pathValue","updateName","updatePath","removeVaultCreds","setContainerName","setPath","addVaultCreds","ImmutablePureComponent","AKS_HELP_ARTICLE_NAME","HelpCenterTextContainer","AKSHelpCenterLink","docLink","host","KeyVaultActions","keyVaultModal","addingNew","handleAddKeyVaultCreds","handleRemoveKeyVaultCreds","handleUpdateKeyVaultCreds","selectKeyVault","nodeViewHeaderSaga","getQueryNames","getQueryTypes","changeManagerAddChangeDetectionPropertiesSuccess","UpdateSwimlane","existingTags","sonraiDataLoadTag","changeManagerRemoveChangeDetectionPropertiesSuccess","changeManagerUpdateChangeDetectionPropertySuccess","addFetchChangeDetectionPropertiesFields","cdQuery","querySelections","definitions","selectionSet","selections","selection","addFetchChangeDetectionOptionsFields","queryOpDef","cdOpDef","queryVarDefs","variableDefinitions","varDef","SWIMLANE_ALIAS","addSwimlaneOptionsFields","swQuery","print","cdConfigs","cdOptions","cdProperties","monitoredField","RESOURCE_GROUP_FOR_NODE","allMonitorChangeActions","nodeSolutionCenterSetResourceMonitor","UpdateResource","updatedImportance","tagOverflow","swimmyOverflow","expandSwimmy","actionDropdownExpanded","canEditResource","canEditCrm","createTicketModal","baseName","maxImportance","linkGuy","disabledCloud","getImportance","swimlanesSrns","hasImportance","mySides","accountBar","fieldLabel","getAccountTitle","ImportanceWidget","setImportance","getLinkToResource","getSupportsFriendlyName","updateFriendlyNameStatus","handleUpdateFriendlyName","noFriendlyNameHover","noFriendlyName","noFriendlyNameCopy","headerItem","setSwimmyOverflow","swimlaneInfo","WithoutPermission","toggleTagExpand","getSupportsTags","setTagOverflow","tagExpanded","actionDropdownButton","labelType","fontVariant","topNameStuff","renderLoading","nodeLabel","nodeDataSwombos","getContainerBackgroundColor","getHeaderIcon","renderName","toggleActionMenu","renderAccountBar","renderTags","selectNodeDataIsLoading","selectNodeDataError","selectResouceGroup","selectSwimlaneInfo","selectUpdateFriendlyName","nodeDataError","selectControlFrameworkDataDomain","selectFetchingPolicies","selectFetchingControlGroups","selectCreatingPolicy","selectTogglingSwimlaneOnCfs","selectTogglingSwimlaneError","thisOrgPrefix","userFrameworks","frameworkIds","parentFramework","ADD_FIELD","ADD_RESULT_VIEW","CHANGE_ARGUMENT","CHANGE_FIELD_NAME","REMOVE_ARGUMENT","REMOVE_FIELD","REMOVE_RESULT_VIEW","START_QUERY","LOAD_SAVED_QUERY","RESET_QUERY","UPDATE_RESULT_VIEW","SET_DEFAULT_VIEW","ADD_ARGUMENT","MOVE_ARGUMENT","LOAD_AND_CONVERT_SAVED_QUERY","CHANGE_CHILD_OPERATOR","ADD_PROPERTY","REMOVE_PROPERTY","TOGGLE_DEFAULT_PROPERTY","RESET_DEFAULT_PROPERTIES","REMOVE_COMMENT","SET_QUERY_PROPERTY_ORDER","SET_QUERY_COLUMN_ALIAS","REMOVE_QUERY_COLUMN_ALIAS","SET_EFFECTIVE_PERMISSION_PROPERTY_ORDER","ADD_EFFECTIVE_PERMISSION_INCLUDE_GROUP","ADD_EFFECTIVE_PERMISSION_EXCLUDE_GROUP","REMOVE_EFFECTIVE_PERMISSION_GROUP","ADD_EFFECTIVE_PERMISSION","REMOVE_EFFECTIVE_PERMISSION","ADD_EP_DISPLAY_COLUMN","REMOVE_EP_DISPLAY_COLUMN","SET_IS_DISTINCT_EP","SET_EP_DISPLAY_COLUMN_ALIAS","REMOVE_EFFECTIVE_PERMISSION_BLOCK","UPDATE_EFFECTIVE_PERMISSION","REMOVE_EP_COLUMN_ALIAS","INSERT_FIELD","SET_SEARCH_LIMIT","CLEAR_SEARCH_LIMIT","orgChangeChannel","channelEventHandlers","COOKIE_NAME","ORGS_CLAIM","BC_CHANNEL_NAME","passedParams","cookie","postMessage","validateToken","getAllowedOrgsFromToken","noValidate","validateOrgIsAllowed","handler","BroadcastChannel","messageChannel","handleMessage","currentMessage","onmessage","getMessageContent","addMessageId","initBroadcastChannel","unregisterEventHandler","selectDataClassifierDataDomain","selectDeletingCustomClassifiers","selectUpdatingCustomClassifiers","selectCreatingClassifier","selectCreatingClassifierError","ChangeDetectionPopup","subTitle","isLocked","WidgetPopup","showLinkToTickets","lockedOn","CRM_TABLE_MAX_SIZE","GET_PROPERTY_WIDGET_DATA","GET_DID_ACCESS_DATA","GET_CAN_ACCESS_DATA","GET_ACCESSED_USING_DATA","GET_ACTIVITY_WIDGET_DATA","GET_SELECTED_ROW_ACTIONS","GET_CAN_ACCESS_PATH","GET_EP_PATHS","DidAccessWidget","didAccessData","who","resourceSetFull","how","when","utc","where","showActions","what","getSelectedRowActions","criticalResourceSRN","getHeader","handleActionsModal","AccessedUsingWidget","accessedUsingData","startOf","endOf","renderCRMOverlay","CanAccessWidget","showPathId","showPathClassification","resourceOfResource","tagSet","swimlanesOfResource","importanceOfResource","tagsOfResource","onShowPath","onShowPathFromList","usesEP","isSpecialAzureData","valueA","valueB","ActivityFromRegions","activityData","activityWidget","PropertiesWidget","propertyWidget","getProperties","accessedUsing","canAccess","didAccess","lastCanAccessJobTimestamp","selectedRowActions","selectedRowActionsLoading","actionsModal","canAccessPaths","canAccessPathLoading","accessActivityReducer","setCriticalResourceMonitorDate","getPropertyWidgetData","setPropertyWidgetData","getDidAccessData","setDidAccessData","getCanAccessData","setCanAccessData","getAccessedUsingData","setAccessedUsingData","getActivityWidgetData","setActivityWidgetData","setSelectedRowActions","toggleActionsModal","getCanAccessPath","setCanAccessPath","getEPPaths","errEPPaths","setLastCanAccessJobTimestamp","getPropertyWidget","getDidAccess","getTypesForAzureData","getCanAccess","getCanAccessPaths","getAccessedUsing","getActivityWidget","getAccessedActions","getAccessedByActions","getActiveFromActions","getAccessedFromActions","getAccessedUsingActions","getWasAccessedUsingActions","getEffectivePermissionIdentityChains","accessActivitySaga","GET_PROPERTIES_WIDGET","getMonitoredProperties","GET_DID_ACCESS_WIDGET","AlertLogs","CAN_ACCESS_FROM_EP_GCP","CAN_ACCESS_FROM_EP","possibleDataTypes","lowercaseType","pt","actors","allSwimlanes","swimlanesSrnToName","actor","Who","Where","Tags","eps","alreadyfoundHows","ep","Conditions","policyEntryConditions","How","permissionActionClassifications","identityChain","Swimlanes","sw","Importance","azureDataCanAccess","fromDateSeven","momentFromDate","lastRunTimestampResponse","lastTimestamp","GET_CAN_ACCESS_WIDGET","parsedData","lastRunTimestamp","GET_CAN_ACCESS_PATHS","GET_ACCESSED_USING_WIDGET_RESOURCE_SET","GET_ACCESSED_USING_WIDGET_CRITICAL_RESOURCE_SRN","GET_ACTIVITY_WIDGET","dates","GET_ACCESSED_ACTIONS","GET_ACCESSED_BY_ACTIONS","countryValue","GET_ACTIVE_FROM_ACTIONS","GET_ACCESSED_FROM_ACTIONS","userValue","GET_ACCESSED_USING_ACTIONS","GET_WAS_ACCESSED_USING_ACTIONS","epFilterArg","epFilter","permissionSrn","permissionSRN","pathDataCallback","selectChangeDetectionManagerDomain","selectChangeDetectionProperties","UnderlyingActionsModal","getAllData","AccessActivity","showPathConditions","startDate","endDate","hasDidAccess","hasActivityFromRegions","hasCanAccess","propertiesHeight","layout2Col","layout1Col","accessActivityContainer","noBorder","startDateId","endDateId","focusedInput","onFocusChange","onDatesChange","handleDatesChange","isOutsideRange","displayFormat","closeShowPath","navigateToNodeView","GET_PERFORMED_ACTIONS","GET_ROLES_ASSUMED","GET_ROLES_ASSUMED_BY","GET_ACTIVE_FROM","GET_ACCESSED_USING","performedActions","rolesAssumed","rolesAssumedBy","activeFrom","activityReducer","getPerformedActions","setPerformedActions","setActivityDate","togglePerformedActionFields","setPerformedActionFields","clearActivity","getRolesAssumed","setRolesAssumed","getRolesAssumedBy","setRolesAssumedBy","getActiveFrom","setActiveFrom","setAccessedUsing","selectActivity","selectPerformedActions","selectActivityDate","selectPerformedActionFields","selectRolesAssumed","selectRolesAssumedBy","selectActiveFrom","selectAccessedUsing","getActiveUsingActions","activitySaga","performedActionFields","formattedFromDate","formattedToDate","DEFAULT_DISPLAY_COLUMNS","CustomDateRange","isAdvanced","textContainer","toggleDateRange","PerformedActions","alignItem","renderPerformedLink","assumedOn","crmOverlay","lowercaseNodeType","getCRMOverlay","EffectivePermissionWidget","showUberPolicy","newCols","policyEntryResourceFilter","hasUberPolicy","getEPData","loadingUsed","getRowRows","openUberPolicy","closeUberPolicy","canAssumeRoles","groupMemberships","directAttachedPolicies","scps","instanceProfiles","DirectPolicyWidget","vals","resourcePathEnd","resourcePathDisplay","policyType","getConfig","GET_CAN_ASSUME_ROLES","GET_CAN_BE_ASSUMED_BY","GET_GROUP_MEMBERSHIPS","GET_DIRECT_ATTACHED_POLICIES","GET_SCPS","GET_INSTANCE_PROFILES","GET_PERMISSION_INFO","accessReducer","roles","profiles","getCanAssumeRoles","setCanAssumeRoles","errorCanAssumeRoles","getCanBeAssumedBy","setCanBeAssumedBy","errorCanBeAssumedBy","getGroupMemberships","setGroupMemberships","errorGroupMemberships","getDirectAttachedPolicies","setDirectAttachedPolicies","errorDirectAttachedPolicies","getSCPs","setSCPs","errorSCPs","getInstanceProfiles","setInstanceProfiles","errorInstanceProfiles","getPermissionInfo","setPermissionInfo","getPolicyVersionJSON","getInstanceProfileForAWS","getServicePrincipalsForAzure","getPermission","accessSaga","GET_CAN_ASSUME_ROLES_QUERY","GET_CAN_BE_ASSUMED_BY_QUERY","GET_IDENTITY_GROUP_MEMBERSHIPS","GET_GCP_IDENTITY_DIRECT_ATTACHED_POLICIES","isGCPNode","isUser","gcpUserPolicies","attached","gcpMemberPolicies","entri","GET_IDENTITY_DIRECT_ATTACHED_POLICIES","chainTypes","scopeVal","splits","pathChain","pathResource","pathResourceVal","pathEnd","totalPath","thisPath","DIRECT_ATTACHED_POLICIES_FRAGMENT","lookupUserResponse","scpLookupResponse","accountSCPs","scp","rootUser","rootUserSCPs","parentOUScpPolicies","getSCPsfromParentOrgUnit","visitedOUs","ous","findOUsWithoutFetchedParents","orgUnits","currentList","ousWithoutParents","fetchMoreParentOUs","fromChildren","ou","excludeList","parentOUs","parentOU","allSCPPolicies","allScpPolicies","orgUnit","scpPolicies","scpPolicy","parentScpPolicies","parentScpPolicy","pop","identityProviders","selectAccess","selectCanAssumeRoles","selectCanBeAssumedBy","selectGroupMemberships","selectDirectAttachedPolicies","selectSCPs","selectInstanceProfiles","marker","DATALAYOUT_TYPES","Access","getDate","showPathToItem","effectivePermission","renderEffectivePermissions","onShowPathForEP","reducers","legacyReducer","MultiReducerInjector","InjectMultipleSagas","injectMultipleSagas","legacySaga","getBreakpoint","breakpointOrder","getLayoutForChild","breakpoint","breakpointIndex","lowerBreakPoint","getLayoutForBreakpoint","AutoLayout","masonry","colWidth","getNumberOfCols","gutter","fitWidth","childLayout","ColumnLayout","childkey","childHeight","TYPES_WITH_NEW_ACCESS_ACTIVITY_VIEW","urlShowAccessActivity","dateRange","rapsheetFromDate","rapsheetToDate","renderGridBody","gridBody","nodeContainer","changeHistory","hasActivity","hasAccessActivityTabParam","supportsClassification","sonbabies","renderSidebar","renderOverview","notification","setDateFilter","setRapsheetDateFilter","activeTabId","copySuccess","el","execCommand","removeChild","ReactTooltip","buttonRef","copyToClipboard","data-type","data-effect","data-event","BASE","SECONDARY_NAV","NAV","ACTIONS_TOOLBAR","DROPDOWN","PANEL","GLOBAL_NAV","MODAL","updateOnProps","is","updateOnStates","addField","addResultView","changeArgument","changeFieldName","removeArgument","removeField","removeResultView","startQuery","loadSavedQuery","updateResultView","setDefaultView","addArgument","moveArgument","loadAndConvertSavedQuery","changeChildOperator","toggleDefaultProperty","removeComment","setQueryPropertyOrder","setQueryColumnAlias","removeQueryColumnAlias","addEffectivePermissionIncludeGroup","setEffectivePermissionPropertyOrder","addEffectivePermissionExcludeGroup","removeEffectivePermissionGroup","addEffectivePermission","removeEffectivePermission","addEPDisplayColumn","removeEPDisplayColumn","setIsDistinctEP","setEPDisplayColumnAlias","removeEPColumnAlias","removeEffectivePermissionBlock","updateEffectivePermission","insertField","setSearchLimit","clearSearchLimit","selectCard","searchCardLabel","selectSearch","CombinedSearches","saved","sonrai","onlySonrai","onlySaved","setSonraiSearch","selectSavedSearch","selectSearchField","combineSearchSonraiSearches","selectedSonraiValue","searchFieldLabel","searchFieldRequired","selectedFieldId","searchCards","searchFieldDisabled","runQuery","RUN_QUERY","queryErrorHappen","QUERY_ERROR_HAPPEN","clearQueryError","CLEAR_QUERY_ERROR","setQueryResults","SET_QUERY_RESULTS","saveSearchWithConcurrentCheck","SAVE_SEARCH_WITH_CONCURRENT_CHECK","setSearchModifiedConcurrently","SET_SEARCH_MODIFIED_CONCURRENTLY","saveSearch","SAVE_SEARCH","saveSearchSuccess","SAVE_SEARCH_SUCCESS","setSaveSearchError","SAVE_SEARCH_ERROR","loadSearchInAdvanced","CLEAR_SAVE_SEARCH_ERROR","LOAD_SEARCH_IN_ADVANCED","setSearchName","SET_SEARCH_NAME","setMonitoringOnResources","SET_MONITORING_ON_RESOURCES","setMonitoringOnResourcesSuccess","SET_MONITORING_ON_RESOURCES_SUCCESS","setMonitoringOnResourcesError","SET_MONITORING_ON_RESOURCES_ERROR","setMonitoringResourcesExceeded","SET_MONITORING_RESOURCES_EXCEEDED","setImportanceMulti","SET_IMPORTANCE_MULTI","setImportanceMultiSuccess","SET_IMPORTANCE_MULTI_SUCCESS","setImportanceMultiModal","SET_IMPORTANCE_MULTI_MODAL","addTagsOnSelectedResources","ADD_TAGS_ON_SELECTED_RESOURCES","addTagsOnSelectedResourcesSuccess","ADD_TAGS_ON_SELECTED_RESOURCES_SUCCESS","toggleComments","TOGGLE_COMMENTS","RESET_EDITOR","saveSearchDescription","SAVE_SEARCH_DESCRIPTION","saveSearchDescriptionSuccess","SAVE_SEARCH_DESCRIPTION_SUCCESS","getNodeTypeCounts","GET_NODETYPE_COUNTS","setNodeTypeCounts","SET_NODETYPE_COUNTS","SET_SELECTED_RESOURCE_ID","SET_SELECTED_RESOURCE","CLEAR_SELECTED_RESOURCE_ID","SET_SELECTED_SWIMLANE_NAME","DISABLE_RESOURCE_MONITORING","ENABLE_RESOURCE_MONITORING","FETCH_ROLLUP_DATA","SET_TIMELINE_ROLLUP_DATA","SET_VIS_FILTERS","SET_SELECTED_CATEGORY","SET_SELECTED_SEVERITY","BULK_DISABLE_MONITORING","BULK_DISABLE_MONITORING_SUCCESS","VIEWS","VIS","RESOURCES","TOGGLE_SC_INFO_MODAL","SET_STATUS_FILTER","NodeViewTabs","predicate","findChild","ele","onSelectTab","notificationTitle","tabStyle","selectSecurityCenterDomain","selectSelectedResourceId","selectSelectedResource","selectSelectedSwimlaneName","selectSelectedCategory","selectSelectedSeverity","selectView","selectLoadingRollupData","selectTimelineRollupData","selectVisFilters","selectCategorySeriesTotals","selectSCInfoModal","manageTicketTemplates","ticketStatusNew","getGraphqlSchema","getSonraiConfig","fetchSavedSearches","getSavedSonraiSeaches","getAccounts","getAzureSubscriptions","getTags","getDataContainers","getMonitoredResourcesCount","getSonraiUsers","getBotAssignments","getRolesWithoutAssignments","updateRoles","getAllBots","removeBot","deleteBots","deleteSwimlane","runAllDataFetcher","sonraiDataSaga","MAX_INTROSPECTION_ATTEMPTS","attempt","INSPECTION_QUERY","networkErrorMessage","networkStatusCode","isTimeoutStatus","isTimeoutMessage","Queries","queries","Relations","PivotedIntrospection","nextType","getIntrospectionQuery","schema_response","schema_data","SonraiUiConfigs","poll","includeDetails","forceIncludeDetails","FETCH_SAVED_SEARCHES_QUERY","Searches","immutableResults","resultsMappedById","FETCH_SONRAI_SEARCHES_QUERY","SavedQueries","FETCH_ACCOUNTS_QUERY","FETCH_SUBSCRIPTIONS_QUERY","FETCH_TAGS_QUERY","tagGroup","groupedResult","FETCH_DATA_CONTAINERS_QUERY","CHECK_FOR_CLOUD_ACCOUNTS_QUERY","PlatformAccounts","MONITORED_RESOURCES_COUNT_QUERY","UPDATE_SONRAI_USER_QUERY","me","srnMaybe","updateGuy","updatedGuy","contentSrn","nullBoiz","botties","botAssignmentSrn","updatedSwimlanes","mappedByTitle","uniqueUserNames","CREATE_ROLE_ASSIGNMENT_MUTATION","deleteMe","addMe","roleSrn","Bots","DeleteBot","currentBots","confirmedDeleted","updatedBots","CreateBot","DELETE_BOT_ASSIGNMENT_MUTATION","permissionKeys","pollsSet","polls","enableEscalationSchemes","fetchObjectivesAction","enableResults","take","race","getControlGroups","addControlGroup","cloneAndEnableFramework","cloneAndEnableFrameworkOnSwimlane","toggleEnabledOnSwimlane","FETCH_CONTROL_FRAMEWORKS_QUERY","controlFrameworkProps","shortDescription","createdControlGroup","CreateControlframework","updatedControlGroup","UpdateControlframework","FETCH_POLICIES_QUERY","ControlPolicies","policyProps","controlPolicy","containedByControlFramework","createdPolicy","CreateControlpolicy","FETCH_POLICY_SEARCH_NAME_QUERY","oldPolicySearch","oldSearchId","updatedPolicy","cloneResult","newSrn","CloneControlframework","cfSrn","addResults","removeResults","addResult","removeResult","stuff","AssignControlFrameworksToSwimlanes","IconCount","SonraiCountDisplay","getTheme","TabListStyle","stylesIn","ActionButtonStyle","TabStyle","PanelStyle","TabList","ActionButton","Tab","Panel","customStyle","tabTemplate","closable","onTabEdit","handleEdit","activeIndex","onTabSequenceChange","handleTabSequenceChange","showModalButton","showModal","showArrowButton","showArrow","BigStat","searchLink","measureText","formatted","textSize","getTextSize","getFontSize","hasSonraiSearch","getSonraiSearchQuery","bigcountsearch","resultLayout","indexedSearches","getQueryBuilder","countsOnly","searchUsesFirstCard","getSearchCard","getNumberFromSavedSearch","getNumberFromSonraiSearch","getSelection","getSonraiSearchData","thresholds","threshold","operatorSign","operatorVal","shadowColor","searchObj","uiSearch","getSearchId","getQuery","queryHasPivotFilter","notifyOnNetworkStatusChange","pollInterval","getNumber","borderStyle","getBorderStyle","getSearchName","getTitleFontSize","TableWidgetQueryResult","subData","getBaseSonraiSearchData","shouldFlatten","allData","clickedRowData","dataItems","rootDataSample","rootDataType","propertyKey","rowRootDataSrn","renderHeader","setWidgetOptions","getTableSavedSearchQuery","getWidgetResultsExplorerSavedSearchQuery","key-","BUILD"],"mappings":"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","file":"main.9033e0a54481e66a5fdd.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"8\":\"npm.prettier\"}[chunkId]||chunkId) + \".\" + {\"8\":\"4f9879354358fd353462\",\"14\":\"d17364fb70f93fc4442c\",\"15\":\"b2016cabd3ae643fce7e\",\"16\":\"63215acd69d694bbbaa4\",\"17\":\"855a91f48c27a8b0128e\",\"18\":\"d1190df0c684b01f16d3\",\"19\":\"e420efed05add81e2137\",\"20\":\"e5919ba33c38cec9ca08\",\"21\":\"86021172bd92c2a8b1d5\",\"22\":\"6a186c956c3429a93924\",\"23\":\"e4f8f43726acd0e217eb\",\"24\":\"a3745acaa255940e5c39\",\"25\":\"c0f1ee823d337677e54c\",\"26\":\"4217619152c19b6bc9b6\",\"27\":\"0be3048719edd9a13d2e\",\"28\":\"c351a991e6a6f301b1cb\",\"29\":\"646aacfd352ce2974dd2\",\"30\":\"821c22344e96f67a0661\",\"31\":\"70b0b98e625e657207e7\",\"32\":\"0354fe00a88c77b5ed97\",\"33\":\"ae9af4a559e7bc89131e\",\"34\":\"2bdb18baefbfe5a3a9c2\",\"35\":\"259d0e2312880c233810\",\"36\":\"d3d224b9e1cdaecf0405\",\"37\":\"686d800a98974bee66c3\",\"38\":\"7c289df8de9c1376cade\",\"39\":\"3ac7e62a1b7013a4731b\",\"40\":\"4cbe4ebfc32fd464cc15\",\"41\":\"b17823a78d28bf3d8d87\",\"42\":\"b4a4b2a0d4aba59024a9\",\"43\":\"559f742c585310bdb8e7\",\"44\":\"73da6ad3f874ee5588cb\",\"45\":\"10c3a738d1eae103a471\",\"46\":\"629118b7f61d50f7ddbb\",\"47\":\"e9637509450c0fccd63e\",\"48\":\"37dbed6d1d61517f349b\",\"49\":\"4bde2ec217a1fcf45872\",\"50\":\"ea2181620d8e0eb9d6a4\",\"51\":\"2c6980a7407e3cf62b58\",\"52\":\"3dae9159c90d7efc4b8c\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1460,0,1,4,3,7,11,10,6,5,9,12,13]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import _ from 'lodash'\nimport { Observable } from 'apollo-link'\nimport { onError } from 'apollo-link-error'\nimport { RetryLink } from 'apollo-link-retry'\n\nclass ConfigValueHolder {\n /**\n * @param configName name of field on config.json holding the value\n * @param defaultValue value if not set in config.json\n */\n constructor(configName, defaultValue) {\n this.configName = configName\n this.defaultValue = defaultValue\n this.value = undefined\n }\n\n /**\n * Compute value either from the config.json, but if it's not set\n * then we can use the default\n */\n getValue = () => {\n let value = window.config[this.configName]\n if (_.isUndefined(this.value)) {\n value = this.defaultValue\n }\n return value\n }\n}\n\nconst MS_PER_SECOND = 1000\n\n// number of milliseconds to wait before attempting the first retry\nconst INITIAL_DELAY = 'graphqlClientRetryInitialDelay'\n\n// maximum number of milliseconds that the link should wait for any retry\nconst MAX_DELAY = 'graphqlClientRetryMaxDelay'\n\n// whether delays between attempts should be randomized\nconst JITTER = 'graphqlClientRetryDelayJitter'\n\n// max number of times to try a single operation before giving up\nconst MAX_ATTEMPTS = 'graphqlClientRetryMaxAttempts'\n\n// other keys that could be in config.json\nexport const RETRY_ON_SHUTDOWN = 'graphClientRetryOnShutdown'\nexport const RETRY_ON_NETWORK_FAILURE = 'graphClientOnNetworkFailure'\n\nconst config = {\n [INITIAL_DELAY]: new ConfigValueHolder(INITIAL_DELAY, 5 * MS_PER_SECOND),\n [MAX_DELAY]: new ConfigValueHolder(MAX_DELAY, 30 * MS_PER_SECOND),\n [JITTER]: new ConfigValueHolder(JITTER, true),\n [MAX_ATTEMPTS]: new ConfigValueHolder(MAX_ATTEMPTS, 12),\n}\n\n/**\n * Shutdown retry link - this apollo error handling link will retry the request\n * if it recieves the \"shutting-down\" response from GraphQL Server:\n * - HTTP Status = 503\n * - special message in body\n *\n * The retry behaviour can be configured using values from config.json. It takes\n * the same configuration options as the apollo-retry handling, but with\n * different names (see above for config names)\n */\nexport const retryOnShutdown = args => {\n const { operation, networkError, forward } = args\n if (undefined !== networkError && shouldRetryOnShutdown(networkError)) {\n const delay = config[INITIAL_DELAY].getValue()\n return new Observable(subscriber => {\n setTimeout(() => {\n subscriber.next()\n subscriber.complete()\n }, delay)\n }).flatMap(() => {\n return forward(operation)\n })\n }\n}\nexport const retryOnShutdownLink = onError(retryOnShutdown)\n\nconst SPECIAL_MESSAGE =\n 'Unable to finish processing request. Server is shutting down.'\n\nexport const shouldRetryOnShutdown = networkError => {\n const message = _.get(networkError, ['result', 'message'], null)\n return 503 === networkError.statusCode && SPECIAL_MESSAGE === message\n}\n\n/**\n * This is the apollo-link to handle network failures\n */\nexport function makeRetryOnFailedLink() {\n return new RetryLink({\n delay: {\n initial: config[INITIAL_DELAY].getValue(),\n max: config[MAX_DELAY].getValue(),\n jitter: config[JITTER].getValue(),\n },\n attempts: {\n max: config[MAX_ATTEMPTS].getValue(),\n },\n })\n}\n","/* eslint-disable no-console */\nimport { ApolloClient } from 'apollo-client'\nimport { ApolloLink } from 'apollo-link'\nimport { createHttpLink } from 'apollo-link-http'\nimport { onError } from 'apollo-link-error'\nimport { setContext } from 'apollo-link-context'\nimport { InMemoryCache } from 'apollo-cache-inmemory'\nimport uuid from 'uuid/v4'\n\nimport {\n retryOnShutdownLink,\n shouldRetryOnShutdown,\n makeRetryOnFailedLink,\n RETRY_ON_SHUTDOWN,\n RETRY_ON_NETWORK_FAILURE,\n} from 'utils/apollo/apollo-retry-links'\nimport { getStore } from 'configureStore'\nimport { exists } from 'utils/sonraiUtils'\nimport { getGraphEndpoint } from 'utils/graphDataUtils'\nimport { setGlobalError } from 'containers/SonraiData/actions'\nimport {\n getCurrentToken,\n getAuth0Client,\n getAuthDB,\n logout,\n} from 'react-auth0-wrapper'\nimport { LogoutEventType } from 'auth/auth-db'\nimport { getCurrentOrg } from 'auth/current-org'\n\nconst cache = new InMemoryCache()\n\n// This disables the http cache and sets the cache-control header sent to the backend.\n// Enabling it disables all of our backend caching and can have adverse effects on performance\n// THIS SHOULD *NOT* BE SET TO TRUE IN PROD\nconst DISABLE_CACHE = false\n\nconst createClient = () => {\n const httpLink = createHttpLink({\n uri: `${getGraphEndpoint()}graphql`,\n fetchOptions: { mode: 'cors' },\n })\n\n const authLink = setContext(async (_, { headers }) => {\n const token = await getCurrentToken()\n const authorization = token ? `Bearer ${token}` : ''\n\n const currentOrg = getCurrentOrg()\n if (!currentOrg) {\n console.warn('about to make graphql request w current org not set')\n }\n\n return {\n headers: {\n ...headers,\n authorization,\n 'sonraisecurity-com-org': currentOrg,\n },\n }\n })\n\n const cacheLink = setContext((_, { headers }) => {\n return {\n headers: {\n ...headers,\n 'Cache-Control': 'no-cache',\n },\n }\n })\n\n const queryNameLink = setContext((operation, previousContext) => {\n let { headers, queryName } = previousContext\n if (!queryName) {\n if (!operation.operationName) {\n return previousContext\n }\n\n queryName = operation.operationName\n }\n\n return {\n ...previousContext,\n headers: {\n ...headers,\n 'query-name': queryName,\n },\n }\n })\n\n const requestIDLink = setContext((operation, previousContext) => {\n let { headers, queryName } = previousContext\n if (!queryName) {\n if (operation.operationName) {\n queryName = operation.operationName\n }\n }\n\n return {\n ...previousContext,\n headers: {\n ...headers,\n 'x-request-id': uuid(),\n },\n }\n })\n\n const timeStartLink = new ApolloLink((operation, forward) => {\n operation.setContext({ start: performance.now() })\n return forward(operation)\n })\n\n const logTimeLink = new ApolloLink((operation, forward) => {\n return forward(operation).map(data => {\n if (window.config.logSlowQueriesTime) {\n const context = operation.getContext()\n const time = performance.now() - context.start\n if (time >= window.config.logSlowQueriesTime)\n console.warn(\n `Slow Query Alert: query ${context.headers['query-name']} took ${time}ms to complete. Request ID ${context.headers['x-request-id']}`\n )\n }\n\n return data\n })\n })\n\n let willRetryOnShutdown = false\n const errorLink = onError(({ graphQLErrors, networkError, operation }) => {\n const headers = operation.getContext().headers || {}\n if (graphQLErrors) {\n const store = getStore()\n graphQLErrors.map(({ message, locations, path }) => {\n store.dispatch(setGlobalError(message))\n console.error(\n `[GraphQL Error]: Message: ${message}, Location: ${locations}, Path: ${path}, QueryName: ${headers['query-name']}, RequestID: ${headers['x-request-id']}`\n )\n })\n }\n\n if (networkError) {\n if (!(willRetryOnShutdown && shouldRetryOnShutdown(networkError))) {\n const store = getStore()\n store.dispatch(\n setGlobalError(`[Network Error]: ${networkError.message}`)\n )\n console.error(\n `[Network Error]: ${networkError.message}, QueryName: ${headers['query-name']}, RequestID: ${headers['x-request-id']}`\n )\n }\n\n if (networkError.statusCode === 504) {\n const store = getStore()\n store.dispatch(\n setGlobalError(\n '[Network Error]: Unfortunately, your search has timed out. Please try again later.'\n )\n )\n console.error(\n '[Network Error]: Unfortunately, your search has timed out. Please try again later.'\n )\n }\n\n if (\n networkError.statusCode === 401 ||\n networkError.statusCode === 403 ||\n networkError.statusCode === 404\n ) {\n if (\n networkError.statusCode === 401 ||\n networkError.statusCode === 403\n ) {\n console.error(\n '[Network Error]: Received 401 or 403 from graphql, likely due to invalid token, logging you out'\n )\n }\n\n if (networkError.statusCode === 404) {\n console.error(\n '[Network Error]: Received a 404 while attempting a graphql call, likely due to invalid org or token, logging you out'\n )\n }\n\n const auth0Client = getAuth0Client()\n if (auth0Client) {\n getAuthDB().logoutEvent(LogoutEventType.UNAUTH_RESP)\n logout(auth0Client)\n } else {\n throw 'Cannot get auth0 client to logout'\n }\n }\n }\n })\n\n let link = DISABLE_CACHE ? cacheLink.concat(errorLink) : errorLink\n\n /**\n * optionally add retry handlers: by default we will retry if the\n * graphql-server shuts down while the request is in progress, but we will\n * not retry on additional network failures\n */\n if (window.config[RETRY_ON_SHUTDOWN] != false) {\n link = link.concat(retryOnShutdownLink)\n willRetryOnShutdown = true\n }\n if (window.config[RETRY_ON_NETWORK_FAILURE]) {\n const retryOnFailedLink = makeRetryOnFailedLink()\n link = link.concat(retryOnFailedLink)\n }\n\n return new ApolloClient({\n link: link\n .concat(authLink)\n .concat(queryNameLink)\n .concat(requestIDLink)\n .concat(timeStartLink)\n .concat(logTimeLink)\n .concat(httpLink),\n cache,\n defaultOptions: {\n query: {\n fetchPolicy: 'no-cache',\n errorPolicy: 'all',\n forceFetch: true,\n },\n mutate: {\n errorPolicy: 'all',\n },\n },\n })\n}\n\nconst getClient = () => {\n if (window.client !== undefined) {\n return window.client\n } else {\n window.client = createClient()\n return window.client\n }\n}\n\nconst refreshEndpoint = () => {\n window.client = createClient()\n}\n\nexport { getClient, refreshEndpoint }\n","import { createAction } from 'redux-actions'\nimport {\n GET_DATA,\n GET_DATA_SUCCESS,\n SET_SWIMLANE_DATA_LOADING,\n GET_SWIMLANE_DATA_SUCCESS,\n SET_SWIMLANE_DATA_FAILURE,\n GET_CRM_DATA_SUCCESS,\n REMAINING_TAG_SEARCH,\n CLEAR_DATA,\n GET_TAG_OPTIONS,\n GET_TAG_OPTIONS_SUCCESS,\n SET_RESOURCE_MONITORING,\n TOGGLE_RESOURCE_MONITORING,\n GET_TICKET_COUNT,\n SET_TICKET_COUNT,\n SET_SHOULD_UPDATE_NODE_SWIMLANES,\n RELOAD_SWIMLANES,\n FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR,\n FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR_SUCCESS,\n FETCH_UBER_POLICY,\n FETCH_UBER_POLICY_ERROR,\n FETCH_UBER_POLICY_SUCCESS,\n GET_CRM_TICKETS,\n SET_CRM_TICKETS,\n} from './constants'\n\nexport const getData = createAction(GET_DATA)\n\nexport const reloadSwimlanes = createAction(RELOAD_SWIMLANES)\n\nexport const getDataSuccess = createAction(GET_DATA_SUCCESS)\n\nexport const setSwimlaneDataLoading = createAction(SET_SWIMLANE_DATA_LOADING)\n\nexport const getSwimlaneDataSucces = createAction(GET_SWIMLANE_DATA_SUCCESS)\n\nexport const setSwimlaneDataFailure = createAction(SET_SWIMLANE_DATA_FAILURE)\n\nexport const getCrmDataSuccess = createAction(GET_CRM_DATA_SUCCESS)\n\nexport const remainingTagSearch = createAction(REMAINING_TAG_SEARCH)\n\nexport const clearData = createAction(CLEAR_DATA)\n\nexport const getTagOptions = createAction(GET_TAG_OPTIONS)\n\nexport const getTagOptionsSuccess = createAction(GET_TAG_OPTIONS_SUCCESS)\n\nexport const setResourceMonitoring = createAction(SET_RESOURCE_MONITORING)\nexport const toggleResourceMonitoring = createAction(TOGGLE_RESOURCE_MONITORING)\n\nexport const getTicketCount = createAction(GET_TICKET_COUNT)\nexport const setTicketCount = createAction(SET_TICKET_COUNT)\nexport const setShouldUpdateNodeSwimlanes = createAction(\n SET_SHOULD_UPDATE_NODE_SWIMLANES\n)\n\nexport const fetchEffectivePermissionsForActor = createAction(\n FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR\n)\nexport const fetchEffectivePermissionsForActorSuccess = createAction(\n FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR_SUCCESS\n)\n\nexport const fetchUberPolicy = createAction(FETCH_UBER_POLICY)\nexport const fetchUberPolicyError = createAction(FETCH_UBER_POLICY_ERROR)\nexport const fetchUberPolicySuccess = createAction(FETCH_UBER_POLICY_SUCCESS)\n\nexport const getCrmTickets = createAction(GET_CRM_TICKETS)\nexport const setCrmTickets = createAction(SET_CRM_TICKETS)\n","export const FETCH_CUSTOM_CLASSIFIERS =\n 'app/DataClassifierData/FETCH_CUSTOM_CLASSIFIERS'\nexport const SET_CUSTOM_CLASSIFIERS =\n 'app/DataClassifierData/SET_CUSTOM_CLASSIFIERS'\nexport const SET_CUSTOM_CLASSIFIERS_ERROR =\n 'app/DataClassifierData/SET_CUSTOM_CLASSIFIERS_ERROR'\n\nexport const CREATE_CUSTOM_CLASSIFIER =\n 'app/DataClassifierData/CREATE_CUSTOM_CLASSIFIER'\nexport const CREATE_CUSTOM_CLASSIFIER_SUCCESS =\n 'app/DataClassifierData/CREATE_CUSTOM_CLASSIFIER_SUCCESS'\nexport const CREATE_CUSTOM_CLASSIFIER_ERROR =\n 'app/DataClassifierData/CREATE_CUSTOM_CLASSIFIER_ERROR'\n\nexport const UPDATE_CUSTOM_CLASSIFIERS =\n 'app/DataClassifierData/UPDATE_CUSTOM_CLASSIFIERS'\nexport const UPDATE_CUSTOM_CLASSIFIERS_SUCCESS =\n 'app/DataClassifierData/UPDATE_CUSTOM_CLASSIFIERS_SUCCESS'\nexport const UPDATE_CUSTOM_CLASSIFIERS_ERROR =\n 'app/DataClassifierData/UPDATE_CUSTOM_CLASSIFIERS_ERROR'\n\nexport const DELETE_CUSTOM_CLASSIFIERS =\n 'app/DataClassifierData/DELETE_CUSTOM_CLASSIFIERS'\nexport const DELETE_CUSTOM_CLASSIFIERS_SUCCESS =\n 'app/DataClassifierData/DELETE_CUSTOM_CLASSIFIERS_SUCCESS'\nexport const DELETE_CUSTOM_CLASSIFIERS_ERROR =\n 'app/DataClassifierData/DELETE_CUSTOM_CLASSIFIERS_ERROR'\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nexport const CenterContent = ({ children, horizontalOnly, style }) => {\n const styles = {\n container: {\n display: 'grid',\n justifyItems: 'center',\n alignItems: horizontalOnly ? 'top' : 'center',\n textAlign: 'center',\n },\n }\n\n return
{children}
\n}\n\nCenterContent.defaultProps = {\n style: {},\n}\n\nCenterContent.propTypes = {\n children: PropTypes.node,\n horizontalOnly: PropTypes.bool,\n style: PropTypes.object,\n}\n\nexport default CenterContent\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nexport class Hoverable extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n base: {\n cursor: this.props.disabled ? 'default' : 'pointer',\n transition: 'all 0.1s ease-out',\n },\n }\n\n this.state = {\n hovered: false,\n }\n }\n\n startHover = () => {\n this.setState({\n hovered: true,\n })\n }\n\n endHover = () => {\n this.setState({\n hovered: false,\n })\n }\n\n render() {\n const { children, style, hoverStyle, renderContent, ...pprops } = this.props\n\n const finalStyle = {\n ...this.styles.base,\n ...style,\n ...(this.state.hovered ? hoverStyle : {}),\n }\n\n return (\n \n {children}\n {renderContent &&\n renderContent({\n hovered: this.state.hovered,\n endHover: this.endHover,\n })}\n \n )\n }\n}\n\nHoverable.defaultProps = {\n hoverStyle: {},\n style: {},\n}\n\nHoverable.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n hoverStyle: PropTypes.object,\n style: PropTypes.object,\n renderContent: PropTypes.func,\n}\n\nexport default Hoverable\n","import _ from 'lodash'\nimport { isImmutable, List } from 'immutable'\n\nimport {\n AUTH_MODE_USERNAME_KV,\n AUTH_MODE_USERNAME_SECRETMGR,\n CLASSIFICATION_TYPE_DB,\n CLASSIFICATION_TYPE_BUCKET,\n} from './constants'\n\n// these things can have a classification job submitted for them\nconst supportedConfigs = [\n // AWS Bucket\n {\n label: 'DataContainer',\n cloudType: 'aws',\n type: 'Bucket',\n __type: CLASSIFICATION_TYPE_BUCKET,\n },\n\n // Azure Blob Storage\n {\n label: 'DataContainer',\n cloudType: 'azure',\n type: 'Container',\n __type: CLASSIFICATION_TYPE_BUCKET,\n },\n\n // Azure MS SQL\n {\n label: 'DataContainer',\n cloudType: 'azure',\n type: 'Database',\n serviceType: 'Microsoft.Sql',\n __type: CLASSIFICATION_TYPE_DB,\n __auth: AUTH_MODE_USERNAME_KV,\n },\n\n // Azure Postgres\n {\n label: 'DataContainer',\n cloudType: 'azure',\n __parent: {\n label: 'DataStore',\n type: 'PostgreSQL',\n },\n __type: CLASSIFICATION_TYPE_DB,\n __auth: AUTH_MODE_USERNAME_KV,\n },\n\n // Azure MySQL\n {\n label: 'DataContainer',\n cloudType: 'azure',\n __parent: {\n label: 'DataStore',\n type: 'MySQL',\n },\n __type: CLASSIFICATION_TYPE_DB,\n __auth: AUTH_MODE_USERNAME_KV,\n },\n\n // AWS MySQL\n {\n label: 'DataContainer',\n cloudType: 'aws',\n type: 'Database',\n serviceType: 'rds',\n __parent: {\n label: 'DataStore',\n type: 'MySQL',\n },\n __type: CLASSIFICATION_TYPE_DB,\n __auth: AUTH_MODE_USERNAME_SECRETMGR,\n },\n\n // AWS Aurora\n {\n label: 'DataContainer',\n cloudType: 'aws',\n type: 'Database',\n serviceType: 'rds',\n __parent: {\n label: 'DataStore',\n type: 'Aurora',\n },\n __type: CLASSIFICATION_TYPE_DB,\n __auth: AUTH_MODE_USERNAME_SECRETMGR,\n },\n\n // AWS Redshift\n // {\n // label: 'DataStore',\n // cloudType: 'aws',\n // type: 'Redshift',\n // __type: CLASSIFICATION_TYPE_DB,\n // __auth: AUTH_MODE_USERNAME_SECRETMGR,\n // },\n\n // AWS PostgreSQL\n {\n label: 'DataContainer',\n cloudType: 'aws',\n type: 'Database',\n serviceType: 'rds',\n __parent: {\n label: 'DataStore',\n type: 'PostgreSQL',\n },\n __type: CLASSIFICATION_TYPE_DB,\n __auth: AUTH_MODE_USERNAME_SECRETMGR,\n },\n\n // AWS Dynamo\n {\n label: 'DataContainer',\n cloudType: 'aws',\n type: 'Table',\n serviceType: 'dynamodb',\n __type: CLASSIFICATION_TYPE_DB,\n },\n]\n\n// these things can get classifications on them, but cannot have classification\n// job submitted for themselves. They'll get classifications from their parent\nconst hasOnlyClassifications = [\n { label: 'DataObject' },\n { label: 'DataContainer', type: 'Schema' },\n { label: 'DataContainer', type: 'Table' },\n { label: 'DataContainer', type: 'Column' },\n]\n\n/**\n * returns a function that will do the util func only if the argument passed\n * is valid\n */\nconst withValidNodeData = utilFunc => {\n const utilFuncWithValidation = nodeData => {\n if (typeof nodeData !== 'object') {\n throw new Error('IllegalArgument: nodeData must be an object')\n }\n return utilFunc(nodeData)\n }\n\n return nodeData => {\n if (isImmutable(nodeData)) {\n return utilFuncWithValidation(nodeData.fromJS())\n }\n return utilFuncWithValidation(nodeData)\n }\n}\n\n/**\n * Can the thing have classificationSet on it possibly\n */\nexport const hasClassifications = withValidNodeData(nodeData => {\n return (\n findMatchingconfig(nodeData, [\n ...hasOnlyClassifications,\n ...supportedConfigs,\n ]) !== null\n )\n})\n\n/**\n * is Data Classification supported for this resource\n *\n * @param nodeData {Object} the resource (can be immutable)\n * @returns true if supported, false otherwise\n */\nexport const isClassificationSupported = withValidNodeData(nodeData => {\n return findMatchingconfig(nodeData, supportedConfigs) !== null\n})\n\nexport const isDB = withValidNodeData(nodeData => {\n const config = findMatchingconfig(nodeData, supportedConfigs)\n if (!config) {\n return false\n }\n return CLASSIFICATION_TYPE_DB === config.__type\n})\n\nexport const getAuthMode = withValidNodeData(nodeData => {\n const config = findMatchingconfig(nodeData, supportedConfigs)\n if (!config) {\n return null\n }\n if (config.__auth) {\n return config.__auth\n }\n return null\n})\n\nconst findMatchingconfig = (nodeData, configs) => {\n // Iterate over map of supported configs and see if the thing matches all\n // fields. It's not the fastest way to do it but it'll be easier to maintain\n // this way\n for (let config of configs) {\n if (doesConfigMatch(nodeData, config)) {\n return config\n }\n }\n return null\n}\n\nfunction doesConfigMatch(nodeData, config) {\n const configKeys = Object.keys(config).filter(key => !key.startsWith('__'))\n const fieldsFromNodeData = _.pick(nodeData, configKeys)\n // do a deep equals w/ the picked object\n const propsMatch = _.isEqual(_.pick(config, configKeys), fieldsFromNodeData)\n\n let parentMatches = true\n if (config.__parent) {\n const parents = getParents(nodeData)\n parentMatches =\n undefined !==\n parents.find(parent => doesConfigMatch(parent, config.__parent))\n }\n\n return propsMatch && parentMatches\n}\n\nfunction getParents(nodeData) {\n return [\n // get containers\n ..._.get(nodeData, ['isIn', 'items'], []),\n // sometimes isIn aliased to dataStores\n ..._.get(nodeData, ['dataStores', 'items'], []),\n ]\n}\n\nexport const isBase64Encoded = sample => {\n return sample.match(\n // https://stackoverflow.com/questions/8571501/how-to-check-whether-a-string-is-base64-encoded-or-not\n /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/\n )\n}\n\nexport const isValidPEM = keyData => {\n const lines = keyData.split('\\n')\n if (keyData.length < 3) {\n // eslint-disable-next-line no-console\n console.debug('Key does not have at least 3 lines:\\n' + keyData)\n return false\n }\n\n const firstLine = lines[0]\n const headerSegments = firstLine.match(/(-----BEGIN )([A-Z ]+)(-----)/)\n\n if (!headerSegments) {\n // eslint-disable-next-line no-console\n console.debug('Key first line did not match the special regex:\\n' + keyData)\n return false\n }\n\n if ('-----BEGIN ' !== headerSegments[1] || '-----' !== headerSegments[3]) {\n // eslint-disable-next-line no-console\n console.debug('Key first line had invalid format:\\n' + keyData)\n return false\n }\n\n const lastLine = lines[lines.length - 1]\n const footerSegments = lastLine.match(/(-----END )([A-Z ]+)(-----)/)\n\n if (!footerSegments) {\n // eslint-disable-next-line no-console\n console.debug('Key last line did not match the special regex:\\n' + keyData)\n return false\n }\n\n if ('-----END ' !== footerSegments[1] || '-----' !== footerSegments[3]) {\n // eslint-disable-next-line no-console\n console.debug('Key last line had invalid format:\\n' + keyData)\n return false\n }\n\n if (headerSegments[2] != footerSegments[2]) {\n // eslint-disable-next-line no-console\n console.debug('Key type in header does not match footer:\\n' + keyData)\n return false\n }\n\n // check to make sure all the lines are base64 encoded strings\n for (let i = 1; i < lines.length - 1; i++) {\n if (!isBase64Encoded(lines[i])) {\n //eslint-disable-next-line no-console\n console.debug(\n 'line ' + i + ' of the key is not valid base64 encoding:\\n' + keyData\n )\n return false\n }\n }\n\n return true\n}\n\n/**\n * Sanitize our inputs to make sure users don't try to put in some weird\n * value into an input that only accepts a positive integer\n *\n * @param event {Event} onChange event from an input\n * @param callback {Event} what to do with the positive integer\n * @returns undefined\n */\nexport const doIfValidInt = (event, callback) => {\n const { value } = event.target\n const invalidValue = value.includes('.') || value.includes('-')\n if (invalidValue) {\n return // that's boog fam\n }\n const asNumber = Number(value)\n if (asNumber || '' === value) {\n callback(asNumber)\n }\n}\n\nexport const formatDataForDataAnatomy = data => {\n const tableRows = data\n .getIn(['contains', 'items'], List())\n .flatMap(schema => {\n const tables = schema.getIn(['contains', 'items'], [])\n if (tables.size === 0) {\n // if schema has no table show blank columns\n return [\n {\n schema: { name: schema.get('name'), srn: schema.get('srn') },\n table: '',\n column: '',\n },\n ]\n }\n // make a row for each table in the schema\n return tables.flatMap(table => {\n const columns = table.getIn(['contains', 'items'], [])\n if (columns.size === 0) {\n // if the table has no columns, make a blank column\n return [\n {\n schema: { name: schema.get('name'), srn: schema.get('srn') },\n table: { name: table.get('name'), srn: table.get('srn') },\n column: '',\n },\n ]\n } else {\n // make column for each table\n return columns.map(column => ({\n schema: { name: schema.get('name'), srn: schema.get('srn') },\n table: { name: table.get('name'), srn: table.get('srn') },\n column: { name: column.get('name'), srn: column.get('srn') },\n }))\n }\n })\n })\n return tableRows\n}\n","import _ from 'lodash'\nimport { useEffect, useState } from 'react'\nimport gql from 'graphql-tag'\nimport { isImmutable } from 'immutable'\nimport { getStore } from 'configureStore'\nimport { selectSwimlanes } from 'containers/SonraiData/selectors'\nimport { getClient } from 'apolloClient'\n\nconst toResoucreIdMap = {}\nconst toSwimlaneMap = {}\n\nconst alreadyFetched = new Set() // eslint-disable-line no-restricted-globals\n\n/**\n * refresh swimlanes from store\n */\nconst refreshSwimlanes = callback => {\n const store = getStore()\n const state = store.getState()\n const swimlanes = selectSwimlanes(state)\n if (swimlanes) {\n createResourceMap(swimlanes)\n if (callback) {\n callback()\n }\n }\n}\n\n/**\n * fetch the swimlan by resourceID\n */\nconst fetchSwimlaneByResouceId = async (resourceId, callback) => {\n const query = gql`\n query getswimmy($resourceId: String) {\n Swimlanes(where: { resourceId: { value: $resourceId } }) {\n items {\n srn\n resourceId\n }\n }\n }\n `\n return getSwimlaneAndUpdate(\n async () => (await getClient()).query({ query, variables: { resourceId } }),\n callback\n )\n}\n\n/**\n * fetch the swimlane by SRN\n */\nconst fetchSwimlaneBySrn = async (srn, callback) => {\n const query = gql`\n query getswimmy($srn: String) {\n Swimlanes(where: { srn: { value: $srn } }) {\n items {\n srn\n resourceId\n }\n }\n }\n `\n return getSwimlaneAndUpdate(\n async () => (await getClient()).query({ query, variables: { srn } }),\n callback\n )\n}\n\n/**\n * Go get the swimlane using the function to fetch it, then update the swimlane\n * maps we have then call the callback\n */\nconst getSwimlaneAndUpdate = async (queryFetch, callback) => {\n try {\n const result = await queryFetch()\n const swimlane = _.get(result, ['data', 'Swimlanes', 'items', 0], null)\n if (swimlane != null) {\n updateResourceMaps(swimlane)\n }\n } catch (e) {\n callback(e)\n return\n }\n callback()\n}\n\n/**\n * check if some string is an SRN\n */\nconst isSrn = val => {\n return typeof val === 'string' && val.startsWith('srn')\n}\n\n/**\n * create a function that will get the resource group id\n */\nconst createGetResourceId = ({ initialized, setLoading }) => srn => {\n if (toResoucreIdMap.hasOwnProperty(srn)) {\n return toResoucreIdMap[srn]\n }\n\n // if we're initialized our swimlane maps, but the swimlane isn't present,\n // maybe its a new swimlane so try going to get it\n if (initialized) {\n // try synchronously first from store\n refreshSwimlanes()\n\n // if we fount it, return it\n if (toResoucreIdMap.hasOwnProperty(srn)) {\n return toResoucreIdMap[srn]\n }\n\n // otherwise load it\n if (!alreadyFetched.has(srn)) {\n alreadyFetched.add(srn)\n setLoading(true)\n fetchSwimlaneBySrn(srn, () => setLoading(false))\n }\n }\n}\n\nconst createGetSwimalneSRN = ({ initialized, setLoading }) => resourceId => {\n if (toSwimlaneMap.hasOwnProperty(resourceId)) {\n return toSwimlaneMap[resourceId]\n }\n\n // see comments above in createGetResourceId about this steps\n if (initialized) {\n refreshSwimlanes()\n if (toSwimlaneMap.hasOwnProperty(resourceId)) {\n return toSwimlaneMap[resourceId]\n }\n\n if (!alreadyFetched.has(resourceId)) {\n alreadyFetched.add(resourceId)\n setLoading(true)\n fetchSwimlaneByResouceId(resourceId, () => setLoading(false))\n }\n }\n}\n\n/**\n * Add the swimlane to the maps we keep\n */\nfunction updateResourceMaps({ resourceId, srn }) {\n if (srn) {\n toResoucreIdMap[srn] = resourceId\n }\n if (resourceId) {\n toSwimlaneMap[resourceId] = srn\n }\n}\n\n/**\n * Add all swimlanes to the maps we keep\n */\nfunction createResourceMap(swimlanes) {\n if (isImmutable(swimlanes)) {\n return createResourceMap(swimlanes.toJS())\n }\n for (const swimlane of Object.values(swimlanes)) {\n updateResourceMaps(swimlane)\n }\n}\n\n/**\n * Sometimes it is more convenient for users to check if the user has\n * permission to something based on the swimlane's SRN instead of the\n * resourceId, but this hook will return some methods that lets it do both\n */\nexport default function useSwimlanesForPermissionCheck() {\n const [initialized, setInitialized] = useState(false)\n const [, setLoading] = useState(false)\n\n useEffect(() => {\n if (!initialized) {\n refreshSwimlanes(() => setInitialized(true))\n }\n }, [])\n\n return {\n isSrn,\n getResourceId: createGetResourceId({ initialized, setLoading }),\n getSwimlaneSRN: createGetSwimalneSRN({ initialized, setLoading }),\n }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { getDisplayName } from 'utils/hocHelpers'\nimport { compose } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { fromJS } from 'immutable'\nimport { userHasPermission } from 'auth/permissions'\nimport { selectQueryTypes } from 'containers/SonraiData/selectors'\nimport { useAuth0 } from 'react-auth0-wrapper'\nimport useSonraiUserPermissions from 'auth/hooks/sonrai-users-permissions'\nimport { getCurrentOrg } from 'auth/current-org'\nimport useSwimlanesForPermissionCheck from './useSwimlanesForPermissionCheck'\n\nconst resourceIdGeneratorArgs = userData => {\n return {\n id: userData.get('sub'),\n username: userData.get('name'),\n org: getCurrentOrg(),\n }\n}\n\nconst permissionChecker = WrappedComponent => {\n const comp = props => {\n const { user } = useAuth0()\n\n const { isSrn, getResourceId } = useSwimlanesForPermissionCheck()\n const permissions = useSonraiUserPermissions(user)\n const doUserHasPermission = ({ permissionName, resourceId, swimlanes }) => {\n // resourceId can either be the string literal or a function used to generate\n // it from the userData transformed into arguments\n if (_.isFunction(resourceId)) {\n resourceId = resourceId(resourceIdGeneratorArgs(fromJS(user)))\n }\n\n // swimlanes can be either a list of swimlane SRNs or resourceIds but if they're\n // srns, chang them to resourceIds\n if (swimlanes) {\n swimlanes = swimlanes\n .map(swimlane => {\n if (isSrn(swimlane)) {\n return getResourceId(swimlane)\n } else {\n return swimlane\n }\n })\n .filter(_.identity)\n }\n\n return userHasPermission({\n permissionName,\n permissions,\n resourceId,\n swimlanes,\n })\n }\n\n return (\n \n )\n }\n\n comp.displayName = `PermissionChecker(${getDisplayName(WrappedComponent)})`\n comp.propTypes = {\n queryTypes: ImmutablePropTypes.map.isRequired,\n userInfo: PropTypes.object,\n }\n return comp\n}\n\nconst mapStateToProps = createStructuredSelector({\n queryTypes: selectQueryTypes,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default compose(withConnect, permissionChecker)\n","export const LOAD_USER = 'app/UserProfileData/LOAD_USER'\nexport const FETCH_USER_PROFILE = 'app/UserProfileData/FETCH_USER_PROFILE'\nexport const SET_USER_PROFILE = 'app/UserProfileData/SET_USER_PROFILE'\nexport const SAVE_USER_PROFILE = 'app/UserProfileData/SAVE_USER_PROFILE'\nexport const HIDE_SOLUTION_CARD = 'app/UserProfileData/HIDE_SOLUTION_CARD'\nexport const UNHIDE_SOLUTION_CARDS = 'app/UserProfileData/UNHIDE_SOLUTION_CARDS'\nexport const SET_USER_PROFILE_TABLES =\n 'app/UserProfileData/SET_USER_PROFILE_TABLES'\nexport const ACCEPT_LICENSE = 'app/UserProfileData/ACCEPT_LICENSE'\nexport const SET_SECURITY_CENTER_WELCOME_MODAL =\n 'app/UserProfileData/SET_SECURITY_CENTER_WELCOME_MODAL'\nexport const TOGGLE_SWIMLANE_MANAGER =\n 'app/UserProfileData/TOGGLE_SWIMLANE_MANAGER'\nexport const SET_SONRAI_USER_SRN = 'app/UserProfileData/SET_SONRAI_USER_SRN'\nexport const SET_USER_PROFILE_ERROR =\n 'app/UserProfileData/SET_USER_PROFILE_ERROR'\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport Color from 'color'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport class TextLink extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n base: {\n fontWeight: 'inherit',\n cursor: props.disabled ? 'default' : 'pointer',\n transition: 'color 0.1s ease-out',\n },\n }\n\n this.state = {\n hovered: false,\n }\n }\n\n endHover = () => {\n this.setState({\n hovered: false,\n })\n }\n\n startHover = () => {\n this.setState({\n hovered: true,\n })\n }\n\n getInvertedColor = () => {\n if (this.props.disabled) {\n return this.props.theme.neutralLight\n }\n\n if (this.state.hovered) {\n return this.props.theme.primary\n }\n\n return this.props.theme.light\n }\n\n getColor = () => {\n if (this.props.disabled) {\n return this.props.theme.neutralMedium\n }\n\n if (this.state.hovered) {\n if (this.props.color === 'primary') {\n return Color(this.props.theme.primary).darken(0.6)\n }\n\n if (this.props.color === 'secondary') {\n return Color(this.props.theme.secondary).darken(0.6)\n }\n if (this.props.color === 'warning') {\n return Color(this.props.theme.red).darken(0.6)\n }\n }\n\n if (this.props.color === 'primary') {\n return this.props.theme.primary\n }\n\n if (this.props.color === 'secondary') {\n return this.props.theme.secondary\n }\n if (this.props.color === 'warning') {\n return this.props.theme.red\n }\n }\n\n render() {\n if (this.props.to) {\n return (\n \n {this.props.children}\n \n )\n }\n\n const {\n children,\n style,\n theme, //eslint-disable-line no-unused-vars\n typeColors, //eslint-disable-line no-unused-vars\n onClick,\n disabled,\n invert,\n ...pprops\n } = this.props\n\n return (\n \n {children}\n \n )\n }\n}\n\nTextLink.defaultProps = {\n theme: {},\n style: {},\n}\n\nTextLink.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n color: PropTypes.string,\n disabled: PropTypes.bool,\n invert: PropTypes.bool,\n theme: themeShape,\n typeColors: PropTypes.object,\n newTab: PropTypes.bool,\n onClick: PropTypes.func,\n to: PropTypes.shape({\n pathname: PropTypes.string,\n search: PropTypes.string,\n state: PropTypes.any,\n }),\n style: PropTypes.object,\n}\n\nexport default themeable(TextLink)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nexport const SectionHeader = ({ children, small, style }) => {\n const styles = {\n base: {\n marginTop: '0',\n fontSize: small ? '1.2em' : '1.5em',\n color: '#333',\n },\n }\n\n return

{children}

\n}\n\nSectionHeader.defaultProps = {\n style: {},\n}\n\nSectionHeader.propTypes = {\n children: PropTypes.node,\n small: PropTypes.bool,\n style: PropTypes.object,\n}\n\nexport default SectionHeader\n","/**\n *\n * NodeViewLayout\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { Responsive } from 'react-grid-layout'\nimport SizeMe from 'components/SizeMe'\nconst ResponsiveGridLayout = SizeMe(Responsive)\n\nimport 'react-grid-layout/css/styles.css'\nimport 'react-resizable/css/styles.css'\n\nconst styles = {\n grid: {\n overflow: 'auto',\n padding: '0.5em',\n },\n}\n\nexport class NodeViewBody extends React.Component {\n render() {\n return (\n
\n \n {this.props.children}\n \n
\n )\n }\n}\n\nconst layoutShape = PropTypes.shape({\n i: PropTypes.string,\n w: PropTypes.number,\n h: PropTypes.number,\n x: PropTypes.number,\n y: PropTypes.number,\n static: PropTypes.bool,\n})\n\nNodeViewBody.defaultProps = {\n cols: { lg: 8, md: 7, sm: 6, xs: 4 },\n}\n\nNodeViewBody.propTypes = {\n children: PropTypes.node,\n layouts: PropTypes.shape({\n lg: PropTypes.arrayOf(layoutShape),\n md: PropTypes.arrayOf(layoutShape),\n sm: PropTypes.arrayOf(layoutShape),\n xs: PropTypes.arrayOf(layoutShape),\n }),\n cols: PropTypes.object,\n}\n\nexport default NodeViewBody\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport Radium from 'radium'\n\nimport { getNodeViewPushParams, truncateMiddle } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport TextLink from 'components/TextLink'\nimport NodeViewDetails from './NodeViewDetails'\n\nclass PreviewCard extends Component {\n styles = {\n container: {\n display: 'grid',\n gridTemplateRows: 'auto 1fr auto',\n gridTemplateAreas: '\"header\" \"body\" \"children\"',\n height: '100%',\n },\n header: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n gridArea: 'header',\n },\n body: {\n gridArea: 'body',\n overflowY: 'auto',\n overflowX: 'hidden',\n },\n children: {\n gridArea: 'children',\n },\n nameContainer: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n ':hover': {\n textDecoration: 'underline',\n },\n },\n name: {\n fontSize: '28px',\n fontWeight: '200',\n },\n headerContent: {\n marginTop: '1.25rem',\n },\n iconMenu: {\n display: 'flex',\n alignSelf: 'flex-start',\n alignItems: 'center',\n },\n }\n\n render() {\n const selectedSrn = this.props.nodeData.srn\n return (\n
\n
\n
\n \n {truncateMiddle(\n this.props.nodeData.friendlyName ||\n this.props.nodeData.name ||\n this.props.nodeData.srn\n )}\n \n
\n\n
{this.props.actions}
\n
\n
\n \n
\n
{this.props.children}
\n
\n )\n }\n}\n\nPreviewCard.propTypes = {\n actions: PropTypes.node,\n children: PropTypes.node,\n nodeData: PropTypes.object,\n fields: PropTypes.array,\n}\n\nexport default Radium(PreviewCard)\n","export { default as NodeViewDetailString } from './NodeViewDetailString'\nexport { default as NodeViewDetailBool } from './NodeViewDetailBool'\nexport { default as NodeViewDetailDate } from './NodeViewDetailDate'\nexport { default as NodeViewDetailAccount } from './NodeViewDetailAccount'\nexport { default as NodeViewDetailSrn } from './NodeViewDetailSrn'\nexport { default as NodeViewBody } from './NodeViewBody'\nexport { default as NodeViewDetails } from './NodeViewDetails'\nexport { default as NodeViewSrn } from './NodeViewDetailSrn'\nexport { default as NodeViewTabs } from './NodeViewTabs'\nexport { default as NodeViewTab } from './NodeViewTab'\nexport { default as NodeViewDetailCode } from './NodeViewDetailCode'\nexport { default as NodeViewDetailLabel } from './NodeViewDetailLabel'\nexport { default as NodeViewDetailInt } from './NodeViewDetailInt'\nexport { default as NodeViewDetailMetadata } from './NodeViewDetailMetadata'\nexport { default as PreviewCard } from './PreviewCard'\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\nimport qs from 'query-string'\nimport { getFieldsForType } from 'query-builder'\nimport _ from 'lodash'\n\nimport { selectTags as selectSonraiTags } from 'containers/SonraiData/selectors'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { selectQueryTypes } from 'containers/SonraiData/selectors'\nimport { SKIP_PROPERTIES } from './constants'\n\nexport const nodeSolutionCenterDomain = state =>\n state.get('nodeSolutionCenter') || Map()\n\nexport const selectIsLoading = createSelector(\n nodeSolutionCenterDomain,\n nodeSolutionCenter => {\n return nodeSolutionCenter.get('isLoading')\n }\n)\n\nexport const selectData = createSelector(\n nodeSolutionCenterDomain,\n nodeSolutionCenter => {\n return nodeSolutionCenter.get('data') || Map()\n }\n)\n\nexport const selectTagOptions = createSelector(selectSonraiTags, tags => tags)\n\nexport const selectSavingTag = createSelector(\n nodeSolutionCenterDomain,\n nodeSolutionCenter => nodeSolutionCenter.get('savingTag')\n)\n\nexport const selectDetailsLoading = createSelector(\n nodeSolutionCenterDomain,\n nodeSolutionCenter => nodeSolutionCenter.get('detailsLoading')\n)\n\nexport const selectSwimlaneDetailsFailure = createSelector(\n nodeSolutionCenterDomain,\n nodeSolutionCenter => nodeSolutionCenter.get('swimlaneDetailsFailure')\n)\n\nexport const selectNodeId = (state, props) => {\n return (\n props.nodeId || //NodeID can be passed from quicksearch or other areas where its in a slideout panel\n _.get(props, ['nodeData', 'srn']) || //When the selector is used in a subcomponent of NodeSolutionCenter\n qs.parse(_.get(props, ['location', 'search'], '')).nodeId ||\n qs.parse(location.search).nodeId ||\n ''\n )\n}\n\nexport const selectFields = createSelector(\n [selectNodeId, selectQueryTypes],\n (nodeId, types) => {\n const type = getTypeFromSrn(nodeId).toLowerCase()\n const toSkip = [...SKIP_PROPERTIES]\n if (type !== 'image') {\n toSkip.push('sid')\n }\n const fields = getFieldsForType(type, types).filter(\n field => !toSkip.includes(field.get('name'))\n )\n\n return fields\n }\n)\n\nexport const selectNodeData = createSelector(selectData, data =>\n data ? _.get(data, [Object.keys(data)[0], 'items', 0], {}) : {}\n)\n\nexport const selectSwimlaneDetailsLoading = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('swimlaneDetailsLoading')\n)\n\nexport const selectIsMonitored = createSelector(\n nodeSolutionCenterDomain,\n nodeSolutionCenter => {\n return nodeSolutionCenter.get('isMonitored')\n }\n)\n\nexport const selectMonitoredProperties = createSelector(\n nodeSolutionCenterDomain,\n nodeSolutionCenter => {\n return nodeSolutionCenter.get('monitoredProperties') || List()\n }\n)\n\nexport const selectLoadingAccessPaths = createSelector(\n nodeSolutionCenterDomain,\n nodeSolutionCenter => nodeSolutionCenter.get('loadingAccessPaths')\n)\n\nexport const selectKeyVaultCreds = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('keyVaultCreds') || Map()\n)\n\nexport const selectFetchingKeyVaultCreds = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('fetchingKeyVaultCreds') || Map()\n)\n\nexport const selectDeletingKeyVaultCreds = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('deletingKeyVaultCreds') || Map()\n)\n\nexport const selectAddingKeyVaultCreds = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('addingAzureKeyVault') || Map()\n)\n\nexport const selectUpdatingKeyVaultCreds = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('updatingKeyVaultCreds') || Map()\n)\n\nexport const selectKeyVaultError = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('keyVaultError')\n)\n\nexport const selectShouldUpdateNodeSwimlanes = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('shouldUpdateNodeSwimlanes')\n)\n\nexport const selectEffectivePermissions = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('effectivePermissions')\n)\n\nexport const selectUsedEffectivePermissions = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('usedEffectivePermissions')\n)\n\nexport const selectEffectivePermissionsLoading = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('fetchingEffectivePermissions')\n)\n\nexport const selectUsedEffectivePermissionsLoading = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('fetchingUsedEffectivePermissions')\n)\n\nexport const selectUberPolicy = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('uberPolicy') || Map()\n)\n\nexport const selectTicketCount = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('ticketCount')\n)\n\nexport const selectCrmTickets = createSelector(\n nodeSolutionCenterDomain,\n state => state.get('crmTickets') || List()\n)\n","import PropTypes from 'prop-types'\n\nexport const PopoverBody = ({ children }) => {\n return children\n}\n\nPopoverBody.propTypes = {\n children: PropTypes.node,\n}\n\nexport default PopoverBody\n","import PropTypes from 'prop-types'\n\nexport const PopoverAnchor = ({ children }) => {\n return children\n}\n\nPopoverAnchor.propTypes = {\n children: PropTypes.node,\n}\n\nexport default PopoverAnchor\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport TooltipTrigger from 'react-popper-tooltip'\n\nimport PopoverBody from './PopoverBody'\nimport PopoverAnchor from './PopoverAnchor'\n\nexport class Popover extends React.Component {\n render() {\n return (\n (\n \n {!this.props.borderless && (\n \n )}\n {this.props.children.find(({ type }) => type === PopoverBody)}\n \n )}\n >\n {({ getTriggerProps, triggerRef }) => (\n \n {this.props.children.find(({ type }) => type === PopoverAnchor)}\n \n )}\n \n )\n }\n}\n\nPopover.defaultProps = {\n position: 'auto',\n trigger: 'click',\n}\n\nPopover.propTypes = {\n borderless: PropTypes.bool,\n children: PropTypes.node,\n onToggle: PropTypes.func,\n position: PropTypes.oneOf([\n 'auto',\n 'left',\n 'right',\n 'bottom',\n 'top',\n 'right-start',\n 'right-end',\n 'left-start',\n 'left-end',\n 'top-start',\n 'top-end',\n 'bottom-start',\n 'bottom-end',\n ]),\n style: PropTypes.object,\n trigger: PropTypes.oneOf(['click', 'hover', 'right-click', 'none']),\n isOpen: PropTypes.bool,\n}\n\nexport default Popover\nexport { default as PopoverAnchor } from './PopoverAnchor'\nexport { default as PopoverBody } from './PopoverBody'\n","export const RESTART_ON_REMOUNT = '@@saga-injector/restart-on-remount'\nexport const DAEMON = '@@saga-injector/daemon'\nexport const ONCE_TILL_UNMOUNT = '@@saga-injector/once-till-unmount'\n","import React, { Component } from 'react'\nimport sizeMe from 'react-sizeme'\n\nexport default (ComposedComponent, options = {}) => {\n const defaultOptions = {\n monitorWidth: true,\n monitorHeight: true,\n refreshRate: 16,\n refreshMode: 'debounce',\n }\n\n const sizeMeHOC = sizeMe({ ...defaultOptions, ...options })\n\n return sizeMeHOC(\n class extends Component {\n displayName = 'sizeMe'\n\n render() {\n const { width, height } = this.props.size\n\n return (\n \n )\n }\n }\n )\n}\n","/**\n *\n * DynamicFormattedMessage\n * Provides a default ID and message for translation messages\n * that may be missing their values due to being dynamically created\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { FormattedMessage } from 'react-intl'\n\nclass DynamicFormattedMessage extends React.PureComponent {\n render() {\n return (\n \n )\n }\n}\n\nDynamicFormattedMessage.propTypes = {\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n values: PropTypes.object,\n}\n\nexport default DynamicFormattedMessage\n","export const getDisplayName = WrappedComponent => {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component'\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { DropdownMenu as RSDropdownMenu } from 'reactstrap'\n\nexport class DropdownMenu extends React.Component {\n onClick = value => {\n this.props.onClick(value)\n this.props.toggle()\n }\n\n render() {\n return (\n \n {React.Children.map(this.props.children, child =>\n React.cloneElement(child, {\n onClick: this.onClick,\n })\n )}\n \n )\n }\n}\n\nDropdownMenu.propTypes = {\n children: PropTypes.node,\n onClick: PropTypes.func,\n toggle: PropTypes.func,\n}\n\nexport default DropdownMenu\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport BorderlessButton from 'components/BorderlessButton'\n\nclass DropdownItem extends React.Component {\n styles = {\n option: {\n width: '100%',\n textAlign: 'left',\n padding: '0.5em 1.5em',\n borderBottom: '1px solid #eee',\n },\n }\n\n clickOption = () => {\n this.props.onClick({\n label: this.props.label,\n value: this.props.value,\n })\n }\n\n render() {\n return (\n \n {this.props.label}\n \n )\n }\n}\n\nDropdownItem.propTypes = {\n disabled: PropTypes.bool,\n label: PropTypes.string.isRequired,\n value: PropTypes.any,\n defaultValue: PropTypes.bool, //Used in Dropdown\n onClick: PropTypes.func,\n}\n\nexport default DropdownItem\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { DropdownToggle } from 'reactstrap'\n\nclass InlineDropdownAnchor extends React.Component {\n styles = {\n label: {\n fontWeight: '500',\n color: '#555',\n display: 'inline',\n cursor: 'pointer',\n },\n }\n\n render() {\n return (\n \n {this.props.selectedOption ? this.props.selectedOption.label : ''}{' '}\n \n )\n }\n}\n\nInlineDropdownAnchor.propTypes = {\n selectedOption: PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.any,\n }),\n}\n\nexport default InlineDropdownAnchor\n","/**\n *\n * InlineTextDropdown\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport BorderlessButton from 'components/BorderlessButton'\nimport { Dropdown, DropdownToggle, DropdownMenu } from 'reactstrap'\n\nclass InlineTextDropdown extends React.Component {\n state = {\n expanded: false,\n }\n\n styles = {\n container: {\n display: 'inline',\n },\n label: {\n fontWeight: '500',\n color: '#555',\n position: 'static',\n cursor: 'pointer',\n },\n option: {\n width: '100%',\n textAlign: 'left',\n padding: '0.5em 1.5em',\n borderBottom: '1px solid #eee',\n },\n }\n\n toggleDropdown = () => {\n this.setState(oldState => {\n return {\n expanded: !oldState.expanded,\n }\n })\n }\n\n clickOption = option => {\n this.props.onClick(option)\n this.toggleDropdown()\n }\n\n render() {\n const selectedOption = this.props.options.find(\n option => option.value === this.props.selectedValue\n )\n\n const defaultOption = this.props.options.find(option => option.default)\n\n return (\n \n \n {selectedOption\n ? selectedOption.label\n : defaultOption\n ? defaultOption.label\n : ''}{' '}\n \n\n \n {this.props.options.map(option => (\n \n {option.label}\n \n ))}\n \n \n )\n }\n}\n\nInlineTextDropdown.propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any,\n default: PropTypes.bool,\n })\n ),\n onClick: PropTypes.func.isRequired,\n selectedValue: PropTypes.any,\n}\n\nexport default InlineTextDropdown\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { DropdownToggle } from 'reactstrap'\n\nclass DropdownAnchor extends React.Component {\n render() {\n const styles = {\n label: {\n cursor: 'pointer',\n border: this.props.borderless ? 'none' : undefined,\n },\n borderless: {\n border: 'none',\n },\n }\n\n return (\n \n {this.props.children}\n \n )\n }\n}\n\nDropdownAnchor.defaultprops = {\n style: {},\n}\n\nDropdownAnchor.propTypes = {\n borderless: PropTypes.bool,\n children: PropTypes.node,\n style: PropTypes.object,\n}\n\nexport default DropdownAnchor\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Dropdown as RSDropdown } from 'reactstrap'\nimport { isPlainObject } from 'lodash'\n\nimport DropdownMenu from './DropdownMenu'\nimport DropdownItem from './DropdownItem'\nexport class Dropdown extends React.Component {\n state = {\n dropdownExpanded: false,\n }\n\n styles = {\n container: {\n display: 'inline',\n },\n }\n\n toggleDropdown = () => {\n if (!this.props.disabled) {\n this.setState(currentState => ({\n dropdownExpanded: !currentState.dropdownExpanded,\n }))\n } else {\n this.setState(() => ({\n dropdownExpanded: false,\n }))\n }\n }\n\n render() {\n let selectedOption\n let defaultOption\n\n const color = this.props.disabled ? '#888888' : '#000000'\n\n const checkForValues = child => {\n if (child.props.value === this.props.selectedValue) {\n selectedOption = {\n value: child.props.value,\n label: child.props.label,\n }\n } else if (child.props.defaultValue) {\n defaultOption = {\n value: child.props.value,\n label: child.props.label,\n }\n }\n }\n\n React.Children.forEach(this.props.children, child => {\n if (child.type === DropdownMenu) {\n React.Children.forEach(child.props.children, checkForValues)\n } else if (child.type === DropdownItem) {\n checkForValues(child)\n }\n })\n return (\n \n {React.Children.map(this.props.children, child => {\n const style = isPlainObject(child.props.style)\n ? child.props.style\n : {}\n return React.cloneElement(child, {\n dropdownExpanded: this.state.dropdownExpanded,\n toggle: this.toggleDropdown,\n selectedOption: selectedOption || defaultOption,\n onClick: this.props.onClick,\n style: { ...style, color: color },\n })\n })}\n \n )\n }\n}\n\nDropdown.defaultProps = {\n onClick: () => {},\n}\n\nDropdown.propTypes = {\n children: PropTypes.node,\n selectedValue: PropTypes.any,\n onClick: PropTypes.func,\n disabled: PropTypes.bool,\n}\n\nexport default Dropdown\nexport InlineDropdownAnchor from './InlineDropdownAnchor'\nexport InlineTextDropdown from './InlineTextDropdown'\nexport DropdownMenu from './DropdownMenu'\nexport DropdownItem from './DropdownItem'\nexport DropdownAnchor from './DropdownAnchor'\n","import React, { Component } from 'react'\nimport CloudBadge from 'components/CloudBadge'\n\nexport default class SonraiBadge extends Component {\n render() {\n return (\n
\n \n Sonrai \n
\n )\n }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport ReactTooltip from 'react-tooltip'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport uuid from 'uuid/v4'\nimport { selectSwimlanes } from 'containers/SonraiData/selectors'\nimport {\n getSwimlaneNameFromSrn,\n getSwimlaneSrnFromResourceId,\n} from 'utils/sonraiUtils'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport TextLink from 'components/TextLink'\nimport Hoverable from 'components/Hoverable'\nimport qs from 'query-string'\n\nclass SwimlaneDisplay extends React.PureComponent {\n constructor(props) {\n super(props)\n this.uuid = uuid()\n\n this.styles = {\n textStyle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n clipboardButton: {\n marginBottom: '5px',\n width: '32px',\n height: '32px',\n },\n }\n }\n\n getSwimlaneTooltip = () => {\n if (this.props.hasTooltip) {\n return (\n \n {this.props.srn ||\n getSwimlaneSrnFromResourceId(this.props.resourceId)}\n \n )\n }\n }\n\n render() {\n const { resourceId, swimlanes, hasLink, hasCopy } = this.props\n const srn = this.props.srn || getSwimlaneSrnFromResourceId(resourceId)\n const name = getSwimlaneNameFromSrn(srn, swimlanes)\n\n if (hasLink && srn) {\n return (\n
\n (\n
\n \n {name}\n \n {hasCopy &&\n (hovered ? (\n
\n \n
\n ) : (\n
\n ))}\n
\n )}\n />\n {this.getSwimlaneTooltip()}\n
\n )\n }\n\n return (\n
\n (\n
\n {name}\n {hasCopy &&\n (hovered ? (\n
\n \n
\n ) : (\n
\n ))}\n
\n )}\n />\n {this.getSwimlaneTooltip()}\n
\n )\n }\n}\n\nSwimlaneDisplay.defaultProps = {\n static: true,\n}\n\nSwimlaneDisplay.propTypes = {\n srn: PropTypes.string.isRequired,\n resourceId: PropTypes.string,\n hasLink: PropTypes.bool,\n hasCopy: PropTypes.bool,\n hasTooltip: PropTypes.bool,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n swimlanes: selectSwimlanes,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default withConnect(SwimlaneDisplay)\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import React from 'react'\nimport PropTypes from 'prop-types'\nimport colorLib from 'color'\n\nexport const ChartTooltip = ({\n title,\n color,\n label,\n value,\n onHover,\n onEndHover,\n colorShadow,\n}) => {\n const styles = {\n container: {\n border: '1px solid #eee',\n borderRadius: '4px',\n backgroundColor: '#fff',\n fontSize: '0.8em',\n },\n header: {\n backgroundColor: '#fafafa',\n borderBottom: '1px solid #eee',\n padding: '0.5em',\n },\n body: {\n padding: '0.5em 1em',\n },\n color: {\n display: 'inline-block',\n borderRadius: '50%',\n backgroundColor: color,\n height: '1em',\n width: '1em',\n marginRight: '1em',\n },\n value: {\n fontWeight: 'bold',\n marginLeft: '0.5em',\n },\n }\n\n if (!color || colorLib(color).hex() === '#FFFFFF') {\n styles.color.border = '1px solid #eee'\n }\n\n if (colorShadow) {\n styles.container.boxShadow = `${colorLib(color)\n .alpha(0.12)\n .rgb()\n .string()} 0px 1px 3px, ${colorLib(color)\n .alpha(0.24)\n .rgb()\n .string()} 0px 1px 4px`\n }\n\n return (\n \n
{title}
\n
\n \n {label}: {value}\n
\n
\n )\n}\n\nChartTooltip.propTypes = {\n color: PropTypes.string,\n title: PropTypes.node,\n label: PropTypes.node,\n value: PropTypes.node,\n onEndHover: PropTypes.func,\n onHover: PropTypes.func,\n colorShadow: PropTypes.bool,\n}\n\nexport default ChartTooltip\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\n\nimport CodeMirror from 'codemirror'\nimport 'codemirror/addon/runmode/runmode'\nimport 'codemirror/mode/javascript/javascript'\n\nconst styles = {\n displayStyles: {\n filterMatch: {\n fontWeight: 'bold',\n backgroundColor: '#ffc1075e',\n },\n property: {\n color: 'black',\n },\n string: {\n color: '#007ad9',\n },\n },\n}\n\nexport const JsonView = props => {\n const [stringifiedText, setStringifiedText] = useState('')\n useEffect(() => {\n if (stringifiedText) {\n props.onStringify(stringifiedText)\n }\n }, [stringifiedText])\n\n let obj\n if (_.isObject(props.value)) {\n obj = props.value\n } else {\n try {\n obj = JSON.parse(props.value)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('could not parse props.value as JSON: ' + props.value, e)\n }\n }\n\n const jsonText = JSON.stringify(obj, null, 2)\n if (stringifiedText != jsonText) {\n setStringifiedText(jsonText)\n }\n\n const tokens = []\n CodeMirror.runMode(\n jsonText,\n {\n name: 'text/javascript',\n json: 'true',\n },\n (token, style) => {\n const tokenStyles = (style || '')\n .split(' ')\n .map(className => {\n return styles.displayStyles[className.trim()]\n })\n .filter(style => style)\n .reduce((allStyles, style) => {\n return {\n ...allStyles,\n ...style,\n }\n }, {})\n\n // if the text matches the search text, add an additional class\n if (props.highlightText) {\n let highlightText = props.highlightText.toLowerCase()\n if (\n token &&\n highlightText !== '' &&\n token.toLowerCase().includes(highlightText)\n ) {\n style += ' filter-match'\n Object.assign(tokenStyles, styles.displayStyles.filterMatch)\n }\n }\n tokens.push(\n \n {token}\n \n )\n }\n )\n\n return (\n
\n
{tokens}
\n
\n )\n}\n\nJsonView.defaultProps = {\n onStringify: () => {},\n}\n\nJsonView.propTypes = {\n highlightText: PropTypes.string,\n onStringify: PropTypes.func,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n}\n\nexport default JsonView\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport _ from 'lodash'\nimport {\n FETCH_CD_OPTIONS,\n FETCH_CD_OPTIONS_ERROR,\n FETCH_CD_OPTIONS_SUCCESS,\n FETCH_TICKET_LIST,\n FETCH_TICKET_LIST_ERROR,\n FETCH_TICKET_LIST_SUCCESS,\n SET_TICKET_LIST_FILTER,\n CLEAR_TICKET_LIST_FILTER,\n} from './constants'\n\nexport const initialState = fromJS({\n changeDectionOptions: {\n data: [],\n error: false,\n loading: true,\n },\n ticketList: {\n data: {},\n error: false,\n loading: true,\n },\n ticketListFilter: {},\n})\n\nexport default handleActions(\n {\n [FETCH_CD_OPTIONS]: state =>\n state\n .setIn(['changeDectionOptions', 'error'], false)\n .setIn(['changeDectionOptions', 'loading'], true),\n [FETCH_CD_OPTIONS_ERROR]: state =>\n state\n .setIn(['changeDectionOptions', 'error'], true)\n .setIn(['changeDectionOptions', 'loading'], false),\n [FETCH_CD_OPTIONS_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['changeDectionOptions', 'error'], false)\n .setIn(['changeDectionOptions', 'loading'], false)\n .setIn(['changeDectionOptions', 'data'], fromJS(payload.data)),\n [FETCH_TICKET_LIST]: state =>\n state\n .setIn(['ticketList', 'loading'], true)\n .setIn(['ticketList', 'error'], false),\n [FETCH_TICKET_LIST_ERROR]: state =>\n state\n .setIn(['ticketList', 'loading'], false)\n .setIn(['ticketList', 'error'], true),\n [FETCH_TICKET_LIST_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['ticketList', 'loading'], false)\n .setIn(['ticketList', 'error'], false)\n .setIn(['ticketList', 'data'], fromJS(payload.data)),\n [SET_TICKET_LIST_FILTER]: (state, { payload }) => {\n const currentTicketFilterState = state.get('ticketListFilter')\n const updated = _.keys(payload).reduce((nextState, type) => {\n const value = payload[type]\n return value === undefined\n ? nextState.delete(type)\n : nextState.set(type, fromJS(value))\n }, currentTicketFilterState)\n\n return state.set('ticketListFilter', updated)\n },\n [CLEAR_TICKET_LIST_FILTER]: state => state.set('ticketListFilter', Map()),\n },\n initialState\n)\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nexport const selectTicketListFilterPanelDomain = state =>\n state.get('ticketListFilterPanel') || Map()\n\nexport const selectTicketListFilterPanel = createSelector(\n selectTicketListFilterPanelDomain,\n state => state.get('ticketListFilters') || Map()\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport { FormattedMessage } from 'react-intl'\nimport { exists } from 'utils/sonraiUtils'\nimport { POLICY_EVAL_TYPES, POLICY_OP_TYPES } from './constants'\nimport Icon from 'components/Icon'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport { updatePolicy } from 'containers/ControlFrameworkData/actions'\nimport {\n selectSonraiSearches,\n selectSavedSearches,\n} from 'containers/SonraiData/selectors'\nimport { Map } from 'immutable'\n\nimport messages from './messages'\nimport { selectSaving } from './selectors'\nimport PolicyEditor from './PolicyEditor'\n\nexport class EditPolicyModal extends React.Component {\n constructor(props) {\n super(props)\n\n const evalCriteria = props.policy.get('evalCriteria') || Map()\n const firstCriteriaKey =\n evalCriteria.size > 0 ? evalCriteria.keySeq().first() : null\n\n const search = props.policy.getIn(['contains', 'items', 0], Map())\n\n this.state = {\n title: props.policy.get('title'),\n policyDescription: props.policy.get('description'),\n selectedSearchSrn: search.get('srn'),\n selectedSearchValue:\n search.get('__typename') === 'Savedquery'\n ? search.get('name')\n : search.get('sid'),\n policyEvalType: firstCriteriaKey\n ? props.policy.getIn(['evalCriteria', firstCriteriaKey, 0])\n : POLICY_EVAL_TYPES.COUNT,\n policyRemediationType: props.policy.get('remediationType'),\n policyEvalTarget: firstCriteriaKey\n ? props.policy.getIn(['evalCriteria', firstCriteriaKey, 1])\n : 0,\n policyEvalOp: firstCriteriaKey || POLICY_OP_TYPES.GT,\n alertingLevelNumeric: props.policy.get('alertingLevelNumeric') || 5,\n }\n }\n\n componentDidUpdate(oldProps) {\n if (\n (oldProps.saving && !this.props.saving) ||\n (oldProps.policy && oldProps.policy !== this.props.policy)\n ) {\n this.props.toggle()\n }\n }\n\n setPolicyDescription = value => {\n this.setState({\n policyDescription: value,\n })\n }\n\n setPolicyTitle = e => {\n this.setState({\n title: e.target.value,\n })\n }\n\n setPolicyEvalOp = e => {\n this.setState({\n policyEvalOp: e.target.value,\n })\n }\n\n setPolicyRemediationType = opt => {\n this.setState({\n policyRemediationType: opt.value,\n })\n }\n\n setPolicyEvalTarget = e => {\n const parsed = parseInt(e.target.value)\n this.setState({\n policyEvalTarget: isNaN(parsed) ? e.target.value : parsed,\n })\n }\n\n setPolicyEvalType = e => {\n this.setState({\n policyEvalType: e.target.value,\n })\n }\n\n handleSave = () => {\n const evalCriteria = {\n [this.state.policyEvalOp]: [\n this.state.policyEvalType,\n this.state.policyEvalTarget,\n ],\n }\n\n this.props.updatePolicy({\n title: this.state.title,\n description: this.state.policyDescription,\n searchId: this.state.selectedSearchSrn,\n srn: this.props.policy.get('srn'),\n evalCriteria: evalCriteria,\n alertingLevelNumeric: this.state.alertingLevelNumeric,\n remediationType: this.state.policyRemediationType,\n })\n }\n\n setSelectedSearch = value => {\n if (!value) {\n this.setState({\n selectedSearchValue: null,\n selectedSearchSrn: null,\n })\n } else {\n this.setState({\n selectedSearchValue: value.value,\n selectedSearchSrn: value.srn,\n })\n }\n }\n\n render() {\n const isOpen = exists(this.props.isOpen) ? this.props.isOpen : true\n return (\n \n \n \n \n \n \n this.setState({ alertingLevelNumeric })\n }\n alertingLevelNumeric={this.state.alertingLevelNumeric}\n setPolicyEvalTarget={this.setPolicyEvalTarget}\n setPolicyTitle={this.setPolicyTitle}\n setPolicyDescription={this.setPolicyDescription}\n setPolicyEvalType={this.setPolicyEvalType}\n setPolicyEvalOp={this.setPolicyEvalOp}\n setSelectedSearch={this.setSelectedSearch}\n policyEvalTarget={this.state.policyEvalTarget}\n policyEvalOp={this.state.policyEvalOp}\n policyEvalType={this.state.policyEvalType}\n description={this.state.policyDescription}\n title={this.state.title}\n sonraiSearches={this.props.sonraiSearches}\n selectedSearchValue={this.state.selectedSearchValue}\n savedSearches={this.props.savedSearches}\n policyRemediationType={this.state.policyRemediationType}\n setPolicyRemediationType={this.setPolicyRemediationType}\n />\n \n \n \n \n \n \n {this.props.saving ? (\n \n ) : (\n \n )}\n \n \n \n )\n }\n}\n\nEditPolicyModal.propTypes = {\n policy: ImmutablePropTypes.map.isRequired,\n saving: PropTypes.bool,\n savedSearches: ImmutablePropTypes.iterable.isRequired,\n sonraiSearches: ImmutablePropTypes.iterable.isRequired,\n toggle: PropTypes.func.isRequired,\n updatePolicy: PropTypes.func.isRequired,\n isOpen: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n saving: selectSaving,\n savedSearches: selectSavedSearches,\n sonraiSearches: selectSonraiSearches,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n updatePolicy,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(EditPolicyModal)\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\nimport qs from 'query-string'\nimport { selectControlFrameworksForUser } from 'containers/ControlFrameworkData/selectors'\n\nconst selectPolicyViewDomain = state => state.get('policyEdit') || Map()\n\nexport const selectPolicy = createSelector(\n selectPolicyViewDomain,\n state => state.get('policy') || Map()\n)\n\nexport const selectSaving = createSelector(\n selectPolicyViewDomain,\n state => state.get('saving')\n)\n\nexport const selectDeleting = createSelector(\n selectPolicyViewDomain,\n state => state.get('deleting')\n)\n\nexport const selectPolicyId = (state, props) =>\n props.location ? qs.parse(props.location.search).policyId : props.policyId\n\nexport const selectUserFrameworkIds = createSelector(\n selectControlFrameworksForUser,\n frameworks => frameworks.map(cf => cf.get('srn'))\n)\n","import { isImmutable, fromJS } from 'immutable'\nimport { getCurrentOrg } from 'auth/current-org'\n\n/**\n * Should we display the framework as if it is enabled:\n *\n * For supersonrai frameworks, we click \"enable\" and it actually clones the\n * framework, so for those ones we want to show them as \"disabled\" if they have\n * no clones.\n *\n * The special case is for supersonrai org users, when they log in they want to\n * see if it's enabled.\n *\n * Otherwise, we want to just show whether or not it's actually enabled.\n */\nexport function displayAsEnabled(controlFramework) {\n if (!isImmutable(controlFramework)) {\n // all the functions assume it is immutable\n return displayAsEnabled(fromJS(controlFramework))\n }\n\n if (isOwnedBySuperSonrai(controlFramework)) {\n if (isUserSuperSonrai()) {\n return isFrameworkEnabled(controlFramework)\n } else {\n return frameworkHasClone(controlFramework)\n }\n } else {\n return isFrameworkEnabled(controlFramework)\n }\n}\n\n/**\n * Get the property from the control framework. If it doesn't have it log warn\n */\nfunction getPropertyOrWarn(controlFramework, property, defaultVal = null) {\n if (!controlFramework.get(property)) {\n // eslint-disable-next-line no-console\n console.warn(\n `controlFramework ${controlFramework.get(\n 'srn'\n )} does not have ${property} property`\n )\n return defaultVal\n }\n return controlFramework.get(property)\n}\n\n/**\n * return true/false if the framework has been cloned\n */\nfunction frameworkHasClone(controlFramework) {\n const clonedBy = getPropertyOrWarn(\n controlFramework,\n 'clonedBy',\n fromJS({ items: [] })\n )\n return clonedBy.get('items').size > 0\n}\n\n/**\n * return true/false if the framework is enabled\n */\nfunction isFrameworkEnabled(controlFramework) {\n return controlFramework.get('enabled')\n}\n\n/**\n * return true/false if the framework is owned by supersonrai\n */\nfunction isOwnedBySuperSonrai(controlFramework) {\n const resourceId = getPropertyOrWarn(controlFramework, 'resourceId', '')\n return resourceId.match(/^\\/org\\/supersonrai\\/.*/)\n}\n\n/**\n * return true/false if the current user is supersonrai\n */\nfunction isUserSuperSonrai() {\n return getCurrentOrg() === 'supersonrai'\n}\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n actionErrorAcceptRiskTicket: {\n id: 'app.containers.TicketDetails.actionErrorCloseTicket',\n defaultMessage: 'Error ocurred accepting ticket risk.',\n },\n actionErrorCloseTicket: {\n id: 'app.containers.TicketDetails.actionErrorCloseTicket',\n defaultMessage: 'Error ocurred closing ticket.',\n },\n actionErrorReopenTicket: {\n id: 'app.containers.TicketDetails.actionErrorCloseTicket',\n defaultMessage: 'Error ocurred reopening ticket.',\n },\n actionErrorSnoozeTicket: {\n id: 'app.containers.TicketDetails.actionErrorSnoozeTicket',\n defaultMessage: 'Error ocurred snoozing ticket.',\n },\n actionErrorReassign: {\n id: 'app.containers.TicketDetails.actionErrorReassign',\n defaultMessage: 'Error ocurred reassigning ticket.',\n },\n assignToMe: {\n id: 'app.containers.TicketDetails.assignToMe',\n defaultMessage: 'Assign To Me',\n },\n assignToMeError: {\n id: 'app.containers.TicketDetails.assignToMeError',\n defaultMessage: 'There was an error assigning ticket to me.',\n },\n customFields: {\n id: 'app.containers.TicketDetails.customFields',\n defaultMessage: 'Custom Ticket Fields:',\n },\n description: {\n id: 'app.containers.TicketDetails.description',\n defaultMessage: 'Description',\n },\n na: {\n id: 'app.containers.TicketDetails.na',\n defaultMessage: 'N/A',\n },\n fetchSimilarTicketsError: {\n id: 'app.containers.TicketDetails.fetchSimilarTicketsError',\n defaultMessage: 'Error ocurred loading Similar Tickets.',\n },\n notFoundMessage: {\n id: 'app.containers.TicketDetails.notFoundMessage',\n defaultMessage: 'The ticket could not be found',\n },\n errorHeaderText: {\n id: 'app.containers.TicketDetails.errorHeaderText',\n defaultMessage: 'Ticket Error Occurred',\n },\n poilcyEvidenceLegacyLoadError: {\n id: 'app.containers.TicketDetails.poilcyEvidenceLegacyLoadError',\n defaultMessage: 'Error occurred loading policy evidence',\n },\n snoozeModalHeaderText: {\n id: 'app.containers.TicketDetails.snoozeModalHeaderText',\n defaultMessage: 'Snooze Ticket',\n },\n reassignModalHeaderText: {\n id: 'app.containers.TicketDetails.reassignModalHeaderText',\n defaultMessage: 'Reassign To User',\n },\n reassignModalOKText: {\n id: 'app.containers.TicketDetails.snoozeModalOKText',\n defaultMessage: 'Reassign',\n },\n snoozeModalHeaderInstructions: {\n id: 'app.containers.TicketDetails.snoozeModalHeaderInstructions',\n defaultMessage: 'Select period of snooze',\n },\n snoozeModalOKText: {\n id: 'app.containers.TicketDetails.snoozeModalOKText',\n defaultMessage: 'Snooze',\n },\n snoozeModalCancelText: {\n id: 'app.containers.TicketDetails.snoozeModalHeaderText',\n defaultMessage: 'Cancel',\n },\n unassigned: {\n id: 'app.containers.TicketDetails.unassigned',\n defaultMessage: 'Unassigned',\n },\n})\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\n\nimport messages from '../messages'\n\nconst ContentContainer = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n height: 100vh;\n width: 100vw;\n text-align: center;\n padding-top: 90px;\n`\n\nconst MessageContainer = styled.h3`\n margin-top: 10px;\n margin-bottom: 10px;\n`\n\nexport default function TicketNotFound() {\n return (\n \n \n \n \n \n )\n}\n","export const NEXT_STEP = `app/containers/TicketAutoRemediateWizard/NEXT_STEP`\nexport const PREV_STEP = `app/containers/TicketAutoRemediateWizard/PREV_STEP`\nexport const RESET_STATE = `app/containers/TicketAutoRemediateWizard/RESET_STATE`\nexport const SELECT_BOT = `app/containers/TicketAutoRemediateWizard/SELEC_BOT`\n\nexport const FETCH_ALL_ESCALATIONS = `app/containers/TicketAutoRemediateWizard/FETCH_ALL_ESCALATIONS`\nexport const FETCH_ALL_ESCALLATIONS_SUCCESS = `app/containers/TicketAutoRemediateWizard/FETCH_ALL_ESCALLATIONS_SUCCESS`\nexport const FETCH_ALL_ESCALLATIONS_ERROR = `app/containers/TicketAutoRemediateWizard/FETCH_ALL_ESCALLATIONS_ERROR`\n\nexport const SUBMIT_AUTO_REMEDIATE = `app/containers/TicketAutoRemediateWizard/SUBMIT_AUTO_REMEDIATE`\nexport const SUBMIT_AUTO_REMEDIATE_SUCCESS = `app/containers/TicketAutoRemediateWizard/SUBMIT_AUTO_REMEDIATE_SUCCESS`\nexport const SUBMIT_AUTO_REMEDIATE_ERROR = `app/containers/TicketAutoRemediateWizard/SUBMIT_AUTO_REMEDIATE_ERROR`\nexport const SUBMIT_AUTO_REMEDIATE_NOT_ACCEPTED = `app/containers/TicketAutoRemediateWizard/SUBMIT_AUTO_REMEDIATE_NOT_ACCEPTED`\nexport const SUBMIT_AUTO_REMEDIATE_NO_COLLECTOR_MATCHED = `app/containers/TicketAutoRemediateWizard/SUBMIT_AUTO_REMEDIATE_NO_COLLECTOR_MATCHED`\n","import { handleActions } from 'redux-actions'\nimport { fromJS } from 'immutable'\n\nimport {\n NEXT_STEP,\n PREV_STEP,\n RESET_STATE,\n SELECT_BOT,\n FETCH_ALL_ESCALATIONS,\n FETCH_ALL_ESCALLATIONS_ERROR,\n FETCH_ALL_ESCALLATIONS_SUCCESS,\n SUBMIT_AUTO_REMEDIATE,\n SUBMIT_AUTO_REMEDIATE_ERROR,\n SUBMIT_AUTO_REMEDIATE_NOT_ACCEPTED,\n SUBMIT_AUTO_REMEDIATE_NO_COLLECTOR_MATCHED,\n SUBMIT_AUTO_REMEDIATE_SUCCESS,\n} from './constants'\nexport const initialState = fromJS({\n allEscalations: {\n loading: false,\n error: false,\n data: null,\n },\n step: 1, // which step the wizard at\n selectedBot: null,\n submitAutoRemediateStatus: {\n loading: false,\n notAccepted: false,\n noCollectorMatched: false,\n error: false,\n },\n})\n\nconst ticketAutoRemediateWizard = handleActions(\n {\n [NEXT_STEP]: state => state.set('step', state.get('step') + 1),\n [PREV_STEP]: state => state.set('step', state.get('step') - 1),\n [RESET_STATE]: state =>\n initialState.merge(\n fromJS({ allEscalations: state.get('allEscalations') })\n ),\n [SELECT_BOT]: (state, { payload }) => state.set('selectedBot', payload),\n\n [FETCH_ALL_ESCALATIONS]: state =>\n state\n .setIn(['allEscalations', 'loading'], true)\n .setIn(['allEscalations', 'error'], false),\n [FETCH_ALL_ESCALLATIONS_ERROR]: state =>\n state\n .setIn(['allEscalations', 'loading'], false)\n .setIn(['allEscalations', 'error'], true),\n [FETCH_ALL_ESCALLATIONS_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['allEscalations', 'loading'], false)\n .setIn(['allEscalations', 'error'], false)\n .setIn(['allEscalations', 'data'], fromJS(payload.data)),\n [SUBMIT_AUTO_REMEDIATE]: state =>\n state\n .setIn(['submitAutoRemediateStatus', 'loading'], true)\n .setIn(['submitAutoRemediateStatus', 'error'], false)\n .setIn(['submitAutoRemediateStatus', 'notAccepted'], false)\n .setIn(['submitAutoRemediateStatus', 'noCollectorMatched'], false),\n [SUBMIT_AUTO_REMEDIATE_ERROR]: state =>\n state\n .setIn(['submitAutoRemediateStatus', 'loading'], false)\n .setIn(['submitAutoRemediateStatus', 'error'], true)\n .setIn(['submitAutoRemediateStatus', 'notAccepted'], false)\n .setIn(['submitAutoRemediateStatus', 'noCollectorMatched'], false),\n [SUBMIT_AUTO_REMEDIATE_NOT_ACCEPTED]: state =>\n state\n .setIn(['submitAutoRemediateStatus', 'loading'], false)\n .setIn(['submitAutoRemediateStatus', 'error'], false)\n .setIn(['submitAutoRemediateStatus', 'notAccepted'], true)\n .setIn(['submitAutoRemediateStatus', 'noCollectorMatched'], false),\n [SUBMIT_AUTO_REMEDIATE_SUCCESS]: state =>\n state\n .setIn(['submitAutoRemediateStatus', 'loading'], false)\n .setIn(['submitAutoRemediateStatus', 'error'], false)\n .setIn(['submitAutoRemediateStatus', 'notAccepted'], false)\n .setIn(['submitAutoRemediateStatus', 'noCollectorMatched'], false),\n [SUBMIT_AUTO_REMEDIATE_NO_COLLECTOR_MATCHED]: state =>\n state\n .setIn(['submitAutoRemediateStatus', 'loading'], false)\n .setIn(['submitAutoRemediateStatus', 'error'], false)\n .setIn(['submitAutoRemediateStatus', 'notAccepted'], false)\n .setIn(['submitAutoRemediateStatus', 'noCollectorMatched'], true),\n },\n initialState\n)\n\nexport default ticketAutoRemediateWizard\n","import { createAction } from 'redux-actions'\nimport {\n NEXT_STEP,\n PREV_STEP,\n RESET_STATE,\n SELECT_BOT,\n FETCH_ALL_ESCALATIONS,\n FETCH_ALL_ESCALLATIONS_ERROR,\n FETCH_ALL_ESCALLATIONS_SUCCESS,\n SUBMIT_AUTO_REMEDIATE,\n SUBMIT_AUTO_REMEDIATE_ERROR,\n SUBMIT_AUTO_REMEDIATE_NOT_ACCEPTED,\n SUBMIT_AUTO_REMEDIATE_NO_COLLECTOR_MATCHED,\n SUBMIT_AUTO_REMEDIATE_SUCCESS,\n} from './constants'\n\nexport const nextStep = createAction(NEXT_STEP)\nexport const prevStep = createAction(PREV_STEP)\nexport const resetState = createAction(RESET_STATE)\nexport const selectBot = createAction(SELECT_BOT)\n\nexport const fetchAllEscalations = createAction(FETCH_ALL_ESCALATIONS)\nexport const fetchAllEscalationsError = createAction(\n FETCH_ALL_ESCALLATIONS_ERROR\n)\nexport const fetchAllEscalationsSucccess = createAction(\n FETCH_ALL_ESCALLATIONS_SUCCESS\n)\n\nexport const submitAutoRemediate = createAction(SUBMIT_AUTO_REMEDIATE)\nexport const submitAutoRemediateSuccess = createAction(\n SUBMIT_AUTO_REMEDIATE_SUCCESS\n)\nexport const submitAutoRemediateNotAccepted = createAction(\n SUBMIT_AUTO_REMEDIATE_NOT_ACCEPTED\n)\nexport const submitAutoRemediateNoCollectorMatched = createAction(\n SUBMIT_AUTO_REMEDIATE_NO_COLLECTOR_MATCHED\n)\nexport const submitAutoRemediateError = createAction(\n SUBMIT_AUTO_REMEDIATE_ERROR\n)\n","import gql from 'graphql-tag'\n\nexport const FETCH_ALL_ESCALATIONS_QUERY = gql`\n query fetchAllEscalations {\n EscalationSchemes {\n items {\n srn\n description\n title\n rules {\n srn\n actionType\n triggerAfter\n escalateToBot {\n botSrn\n }\n }\n filters {\n srn\n ticketKey\n }\n }\n }\n }\n`\n\nexport const SUBMIT_AUTO_REMEDIATE_QUERY = gql`\n mutation autoRemediate($input: AutoRemediateRequestInput) {\n AutoRemediate(input: $input) {\n success\n error\n }\n }\n`\n","import { all, put, takeLatest, select } from 'redux-saga/effects'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { fetchTicketDetailsSuccess } from 'containers/TicketDetailsData/actions'\nimport { selectTicketDetails } from 'containers/TicketDetailsData/selectors'\nimport {\n fetchAllEscalationsError,\n fetchAllEscalationsSucccess,\n submitAutoRemediateError,\n submitAutoRemediateNotAccepted,\n submitAutoRemediateSuccess,\n submitAutoRemediateNoCollectorMatched,\n} from './actions'\nimport { FETCH_ALL_ESCALATIONS, SUBMIT_AUTO_REMEDIATE } from './constants'\nimport {\n FETCH_ALL_ESCALATIONS_QUERY,\n SUBMIT_AUTO_REMEDIATE_QUERY,\n} from './queries'\n\nfunction* fetchAllEscalations() {\n try {\n const client = yield getClient()\n const result = yield client.query({\n query: FETCH_ALL_ESCALATIONS_QUERY,\n })\n const path = ['data', 'EscalationSchemes', 'items']\n const data = _.get(result, path, null)\n if (data === null) {\n throw new Error(`No data at path ${path}`)\n }\n yield put(fetchAllEscalationsSucccess({ data }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error ocurred fetching all escallations', e)\n yield put(fetchAllEscalationsError())\n }\n}\n\nfunction* submitAutoRemediate(action) {\n try {\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: SUBMIT_AUTO_REMEDIATE_QUERY,\n variables: {\n input: {\n ticktSrn: action.payload.ticket.srn,\n botSrn: action.payload.bot.srn,\n },\n },\n })\n\n const error = _.get(result, ['data', 'AutoRemediate', 'error'], null)\n if ('NOT_ACCEPTED' === error) {\n yield put(submitAutoRemediateNotAccepted())\n return\n } else if ('NO_COLLECTOR_MATCHED' === error) {\n yield put(submitAutoRemediateNoCollectorMatched())\n return\n } else if (error) {\n throw new Error('Other unknown error ' + error)\n }\n\n const success = _.get(result, ['data', 'AutoRemediate', 'success'], false)\n if (!success) {\n throw new Error('AutoRemediate was not successful')\n }\n const ticketDetails = yield select(selectTicketDetails)\n if (ticketDetails.get('data') && !ticketDetails.get('loading')) {\n const ticket = ticketDetails.get('data').toJS()\n ticket.status = 'SNOOZED'\n yield put(fetchTicketDetailsSuccess({ data: ticket }))\n }\n yield put(submitAutoRemediateSuccess())\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error ocurred submitting autoremediate:', e)\n yield put(submitAutoRemediateError())\n }\n}\n\nfunction* ticketAutoRemediateWizardSaga() {\n yield all([\n takeLatest(FETCH_ALL_ESCALATIONS, fetchAllEscalations),\n takeLatest(SUBMIT_AUTO_REMEDIATE, submitAutoRemediate),\n ])\n}\n\nexport default ticketAutoRemediateWizardSaga\n","import { createSelector } from 'reselect'\nimport { initialState } from './reducers'\n\nexport const selectDomain = state =>\n state.get('ticketAutoRemediateWizard', initialState)\n\nexport const selectAllEscallations = createSelector(selectDomain, state =>\n state.get('allEscalations')\n)\n\nexport const selectStep = createSelector(selectDomain, state =>\n state.get('step')\n)\n\nexport const selectSelectedBot = createSelector(selectDomain, state =>\n state.get('selectedBot')\n)\n\nexport const selectSubmitAutoRemediateStatus = createSelector(\n selectDomain,\n state => state.get('submitAutoRemediateStatus')\n)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n autoremediate: {\n id: 'app.containers.TicketAutoRemediateWizard.autoremediate',\n defaultMessage: 'Auto Remediate',\n },\n back: {\n id: 'app.containers.TicketAutoRemediateWizard.back',\n defaultMessage: 'Back',\n },\n modalTitle: {\n id: 'app.containers.TicketAutoRemediateWizard.modalTitle',\n defaultMessage: 'Auto-Remediate Ticket',\n },\n next: {\n id: 'app.containers.TicketAutoRemediateWizard.next',\n defaultMessage: 'Next',\n },\n botDescriptionLabel: {\n id: 'app.containers.TicketAutoRemediateWizard.b',\n defaultMessage: 'Bot Description',\n },\n botTitleLabel: {\n id: 'app.containers.TicketAutoRemediateWizard.botTitleLabel',\n defaultMessage: 'Bot Title',\n },\n botTypeLabel: {\n id: 'app.containers.TicketAutoRemediateWizard.botTitleLabel',\n defaultMessage: 'Bot Type',\n },\n chooseBotPrompt: {\n id: 'app.containers.TicketAutoRemediateWizard.chooseBotPrompt',\n defaultMessage: 'Choose Bot Manually',\n },\n chooseDifferentBot: {\n id: 'app.containers.TicketAutoRemediateWizard.chooseDifferentBot',\n defaultMessage: 'Try choosing a different bot',\n },\n ok: {\n id: 'app.containers.TicketAutoRemediateWizard.ok',\n defaultMessage: 'OK',\n },\n noBots: {\n id: 'app.containers.TicketAutoRemediateWizard.noBots',\n defaultMessage: 'No bots available for auto remediation',\n },\n noSuggestedBots: {\n id: 'app.containers.TicketAutoRemediateWizard.noSuggestedBots',\n defaultMessage: 'Could not suggest bot for auto remediation',\n },\n showingAllBots: {\n id: 'app.containers.TicketAutoRemediateWizard.showingAllBots',\n defaultMessage: 'Displaying all bots',\n },\n showAll: {\n id: 'app.containers.TicketAutoRemediateWizard.showAll',\n defaultMessage: 'show all',\n },\n showingSuggestedBots: {\n id: 'app.containers.TicketAutoRemediateWizard.showingSuggestedBots',\n defaultMessage: 'Displaying suggested bots',\n },\n showSuggested: {\n id: 'app.containers.TicketAutoRemediateWizard.showingSuggestedBots',\n defaultMessage: 'show suggested',\n },\n step1Instructions: {\n id: 'app.containers.TicketAutoRemediateWizard.step1Instructions',\n defaultMessage: 'Select a bot to auto-remediate the ticket',\n },\n step2Instructions: {\n id: 'app.containers.TicketAutoRemediateWizard.step2Instructions',\n defaultMessage: 'Confirm auto remediation',\n },\n step2PolicyLabel: {\n id: 'app.containers.TicketAutoRemediateWizard.step2PolicyLabel',\n defaultMessage: 'The following Policy will be applied',\n },\n submitErrorMessage: {\n id: 'app.containers.TicketAutoRemediateWizard.submitErrorMessage',\n defaultMessage:\n 'There was an error submitting request to auto-remediate ticket',\n },\n submitNotAcceptedMessage: {\n id: 'app.containers.TicketAutoRemediateWizard.submitNotAcceptedMessage',\n defaultMessage: 'The request to remediate the ticket was not accepted.',\n },\n submitNoCollectorMatchedMessage: {\n id: 'app.containers.TicketAutoRemediateWizard.submitNotAcceptedMessage',\n defaultMessage:\n 'No collector is configured with capability to auto remediate the ticket.',\n },\n submitSuccessMessage: {\n id: 'app.containers.TicketAutoRemediateWizard.submitSuccessMessage',\n defaultMessage: 'Request to auto-remediate ticket has been submitted.',\n },\n})\n","import _ from 'lodash'\nimport { fromJS, List } from 'immutable'\n\n/**\n * get the bots that could apply to a ticket by analysing the escalations and\n * looking if they could apply to ticket, then getting the bots off the\n * escalations\n */\nexport const getSuggestedBots = (ticket, bots, allEscalations) => {\n if (!allEscalations.get('data')) {\n return List()\n }\n const escalations = allEscalations\n .get('data')\n .filter(escalation => escalationIsForTicket(escalation, ticket))\n return getEscalationsBots(escalations, bots)\n}\n\n/**\n * determine if escalation applies to ticket\n */\nexport const escalationIsForTicket = (escalation, ticket) => {\n return (\n undefined !==\n (escalation.get('filters') ?? List()).find(\n escalation => escalation.get('ticketKey') === ticket.ticketKey\n )\n )\n}\n\n/**\n * get thee bots off the escalations\n */\nexport const getEscalationsBots = (escalations, bots) => {\n const botsBySrn = _.keyBy(bots.get('data').toJS(), 'srn')\n const botsInrules = escalations\n .flatMap(escalation => escalation.get('rules'))\n .filter(rule => 'ESCALATE_TO_BOT' === rule.get('actionType'))\n .map(rule => {\n return botsBySrn[rule.getIn(['escalateToBot', 'botSrn'])]\n })\n .filter(bot => bot != undefined)\n return fromJS(_.uniqBy(botsInrules.toJS(), ({ srn }) => srn))\n}\n","import React, { Fragment, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport styled from 'styled-components'\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport DataTable from 'components/DataTable'\nimport TextLink from 'components/TextLink'\n\nimport messages from './messages'\nimport { getSuggestedBots } from './utils'\nimport { getCloudFromSrn } from 'utils/sonraiUtils'\n\nconst DataTableContainer = styled.div`\n height: 250px;\n`\n\nconst MessageContainer = styled.div`\n padding: 20px 0px;\n text-align: center;\n`\n\nfunction formatTableData(data, props) {\n if (!data) {\n return []\n }\n\n let cloudType = null\n if (props.ticket.resource && props.ticket.resource.cloudType) {\n cloudType = props.ticket.resource.cloudType\n } else if (props.ticket.account) {\n cloudType = getCloudFromSrn(props.ticket.account)\n }\n\n if (!cloudType) {\n // eslint-disable-next-line no-console\n console.error('could not determine cloud type for ticket', props.ticket)\n return []\n }\n\n return data\n .toJS()\n .filter(bot => bot.cloud)\n .filter(bot => bot.cloud.toLowerCase() === cloudType)\n .filter(bot => {\n return bot.type === 'Remediation'\n })\n .map(bot => {\n return {\n type: bot.type,\n srn: bot.srn,\n title: bot.title,\n description: bot.description,\n blob: bot.blob,\n }\n })\n}\n\nexport default function Step1(props) {\n const [showAllBots, setShowAllBots] = useState(false)\n\n const bots = showAllBots\n ? props.bots.get('data')\n : getSuggestedBots(props.ticket, props.bots, props.allEscallations)\n const formattedData = formatTableData(bots, props)\n\n let body\n let extraInstructions\n if (formattedData.length === 0) {\n if (showAllBots) {\n body = (\n \n \n \n )\n } else {\n body = (\n \n \n
\n setShowAllBots(true)}>\n \n \n
\n )\n }\n } else {\n body = (\n \n {\n props.selectBot(data)\n }}\n supressSelectAll\n />\n \n )\n if (!showAllBots) {\n extraInstructions = (\n \n \n setShowAllBots(true)}>\n {' '}\n ()\n \n \n )\n } else {\n extraInstructions = (\n \n \n setShowAllBots(false)}>\n {' '}\n ()\n \n \n )\n }\n }\n\n if (props.bots.get('loading')) {\n return \n }\n\n return (\n
\n

\n \n

{extraInstructions}

\n

\n {body}\n
\n )\n}\n\nStep1.propTypes = {\n allEscallations: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n }),\n bots: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n data: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n }),\n selectBot: PropTypes.func.isRequired,\n nextStep: PropTypes.func.isRequired,\n ticket: ImmutablePropTypes.map,\n}\n","import React, { Fragment, useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport styled from 'styled-components'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport CopyToClipBoard from 'components/CopyToClipboard'\nimport JsonView from 'components/JsonView'\n\nimport messages from './messages'\n\nconst TombstoneInfoContainer = styled.div`\n display: grid;\n grid-template-columns: 132px auto;\n margin-bottom: 16px;\n row-gap: 4px;\n\n & .label {\n font-weight: 500;\n }\n`\n\nconst PolicyContainer = styled.div`\n border: 1px solid #dddddd;\n margin-top: 8px;\n padding: 8px;\n position: relative;\n\n & button {\n margin: 0 !important;\n }\n`\n\nexport default function Step2(props) {\n const [policyJSON, setPolicyJSON] = useState()\n\n useEffect(() => {\n if (!props.selectedBot) {\n props.prevStep()\n }\n }, [props.selectedBot])\n if (!props.selectedBot) {\n return null\n }\n\n return (\n
\n

\n \n

\n \n
\n \n
\n
{props.selectedBot.title}
\n
\n \n
\n
{props.selectedBot.type}
\n
\n \n
\n
{props.selectedBot.description}
\n
\n
\n {props.selectedBot.blob !== null && (\n \n \n \n \n \n \n \n )}\n
\n
\n )\n}\n\nStep2.propTypes = {\n prevStep: PropTypes.func.isRequired,\n selectedBot: PropTypes.shape({\n title: PropTypes.string,\n type: PropTypes.string,\n description: PropTypes.string,\n blob: PropTypes.any,\n }),\n}\n","import React, { Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\n\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\n\nimport messages from './messages'\n\nexport default function Step3(props) {\n if (props.submitAutoRemediateStatus.get('loading')) {\n return \n }\n\n if (props.submitAutoRemediateStatus.get('error')) {\n return \n }\n\n if (props.submitAutoRemediateStatus.get('notAccepted')) {\n return (\n \n \n \n \n \n \n )\n }\n\n if (props.submitAutoRemediateStatus.get('noCollectorMatched')) {\n return (\n \n \n \n )\n }\n\n return \n}\n\nStep3.propTypes = {\n resetState: PropTypes.func,\n submitAutoRemediateStatus: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n }).isRequired,\n}\n","import React, { useEffect } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { isImmutable } from 'immutable'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { DAEMON } from 'utils/constants'\n\nimport reducer from './reducers'\nimport sagas from './sagas'\n\nimport TextLink from 'components/TextLink'\nimport {\n nextStep,\n prevStep,\n resetState,\n selectBot,\n fetchAllEscalations,\n submitAutoRemediate,\n} from './actions'\nimport { getBots } from 'containers/SonraiData/actions'\n\nimport { selectBots } from 'containers/SonraiData/selectors'\nimport {\n selectAllEscallations,\n selectStep,\n selectSelectedBot,\n selectSubmitAutoRemediateStatus,\n} from './selectors'\n\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport styled from 'styled-components'\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Step1 from './Step1'\nimport Step2 from './Step2'\nimport Step3 from './Step3'\n\nimport messages from './messages'\n\nconst ModalHeaderContainer = styled.div`\n width: 100%;\n`\n\nexport const ModalFootControls = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n width: 100%;\n & .next-button-container {\n text-align: right;\n }\n`\n\nfunction StepSwitch(props) {\n switch (props.step) {\n case 1:\n return \n case 2:\n return \n case 3:\n return \n default:\n // eslint-disable-next-line no-console\n console.error('no wisard step for step ' + props.step)\n return null\n }\n}\n\nStepSwitch.propTypes = {\n step: PropTypes.number.isRequired,\n}\n\nfunction isNextDisabled(props) {\n switch (props.step) {\n case 1:\n return props.selectedBot == null\n case 3:\n return props.submitAutoRemediateStatus.get('loading')\n default:\n return false\n }\n}\n\nfunction isPrevDisabled(props) {\n return props.step === 0\n}\n\nfunction getNextButtonText(props) {\n switch (props.step) {\n case 1:\n return messages.next\n case 2:\n return messages.autoremediate\n case 3:\n return messages.ok\n default:\n return messages.next\n }\n}\n\nfunction nextButtonOnClick(props) {\n switch (props.step) {\n case 1:\n props.nextStep()\n return\n case 2:\n props.submitAutoRemediate({\n ticket: isImmutable(props.ticket) ? props.ticket.toJS() : props.ticket,\n bot: isImmutable(props.selectedBot)\n ? props.selectedBot.toJS()\n : props.selectedBot,\n })\n props.nextStep()\n return\n case 3:\n props.close()\n props.resetState()\n return\n }\n}\n\nexport function TicketAutoRemediateWizard(props) {\n useEffect(() => {\n if (props.bots.get('data').isEmpty() && !props.bots.get('loading')) {\n props.getBots({ filters: {} })\n }\n if (\n props.allEscallations.get('data') === null &&\n !props.allEscallations.get('loading')\n ) {\n props.fetchAllEscalations()\n }\n return () => {\n props.resetState()\n }\n }, [])\n return (\n {\n props.close()\n props.resetState()\n }}\n >\n \n {\n props.close()\n props.resetState()\n }}\n >\n \n \n \n \n \n \n \n \n
\n {props.step == 2 && (\n \n \n \n )}\n
\n
\n {\n props.close()\n props.resetState()\n }}\n style={{ marginRight: '0.5em' }}\n >\n Cancel\n \n nextButtonOnClick(props)}\n >\n \n \n
\n
\n
\n \n )\n}\n\nTicketAutoRemediateWizard.propTypes = {\n close: PropTypes.func,\n isOpen: PropTypes.bool,\n ticket: ImmutablePropTypes.map,\n\n // ~ bound action creators ~\n getBots: PropTypes.func.isRequired,\n nextStep: PropTypes.func.isRequired,\n prevStep: PropTypes.func.isRequired,\n resetState: PropTypes.func.isRequired,\n fetchAllEscalations: PropTypes.func.isRequired,\n submitAutoRemediate: PropTypes.func.isRequired,\n\n // ~ from redux ~\n allEscallations: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n }).isRequired,\n bots: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n data: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n }).isRequired,\n step: PropTypes.number.isRequired,\n submitAutoRemediateStatus: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n }),\n}\n\nconst mapStateToProps = createStructuredSelector({\n allEscallations: selectAllEscallations,\n bots: selectBots,\n selectedBot: selectSelectedBot,\n step: selectStep,\n submitAutoRemediateStatus: selectSubmitAutoRemediateStatus,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getBots,\n nextStep,\n prevStep,\n resetState,\n selectBot,\n fetchAllEscalations,\n submitAutoRemediate,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'ticketAutoRemediateWizard', reducer })\nconst withSaga = injectSaga({\n key: 'ticketAutoRemediateWizard',\n saga: sagas,\n mode: DAEMON,\n})\n\nexport default compose(\n withReducer,\n withSaga,\n withConnect\n)(TicketAutoRemediateWizard)\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\n\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\n\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport Select from 'components/Select'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\n\nimport messages from '../messages'\n\nconst SNOOZE_UNTIL_OPTIONS = {\n DAYS_7: {\n label: '7 Days',\n value: [7, 'days'],\n },\n DAYS_14: {\n label: '14 Days',\n value: [14, 'days'],\n },\n DAYS_30: {\n label: '30 Days',\n value: [30, 'days'],\n },\n DAYS_90: {\n label: '90 days',\n value: [90, 'days'],\n },\n DAYS_180: {\n label: '180 days',\n value: [180, 'days'],\n },\n DAYS_1YEAR: {\n label: 'One year',\n value: [1, 'year'],\n },\n}\n\nfunction formatOptionValue({ value }) {\n return moment()\n .add(...value)\n .format('YYYY-MM-DD')\n}\n\nexport default function SnoozeTicketModal(props) {\n const [snoozeUntil, setSnoozeUntil] = useState(null)\n\n const clearAndClose = () => {\n setSnoozeUntil(null)\n props.close()\n }\n\n const onSubmit = () => {\n props.snoozeTicket({\n srn: props.ticket.srn,\n snoozedUntil: formatOptionValue(snoozeUntil),\n })\n clearAndClose()\n }\n\n return (\n \n \n \n \n \n \n setSnoozeUntil(val)}\n />\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nSnoozeTicketModal.propTypes = {\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool,\n snoozeTicket: PropTypes.func.isRequired,\n ticket: PropTypes.shape({\n srn: PropTypes.string.isRequired,\n }),\n}\n","import React, { Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\n\nimport { bindActionCreators, compose } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\n\nimport { assignToMe } from 'containers/TicketDetailsData/actions'\n\nimport { selectSonraiUserSrn } from 'containers/UserProfileData/selectors'\nimport { selectAssignToMe } from 'containers/TicketDetailsData/selectors'\n\nimport ToolTip from 'react-tooltip'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport TextLink from 'components/TextLink'\n\nimport messages from '../messages'\n\nexport function AssignToMe(props) {\n const color = props.status.get('loading') ? 'disabled' : 'primary'\n\n const handleClick = () => {\n props.assignToMe({\n userSrn: props.currentUserSrn,\n ticketSrn: props.ticket.get('srn'),\n })\n }\n\n return (\n \n \n {' '}\n {props.status.get('loading') && }\n \n {props.status.get('error') && (\n \n \n \n \n \n \n \n \n )}\n \n )\n}\n\nAssignToMe.propTypes = {\n // passed props\n ticket: ImmutablePropTypes.map,\n isAssignToMeDisabled: PropTypes.func.isRequired,\n\n // ~ bound action creators ~\n assignToMe: PropTypes.func.isRequired,\n\n // ~ props from redux ~\n currentUserSrn: PropTypes.string.isRequired,\n status: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n }),\n}\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators(\n {\n assignToMe,\n },\n dispatch\n )\n\nconst mapStatetoProps = createStructuredSelector({\n status: selectAssignToMe,\n currentUserSrn: selectSonraiUserSrn,\n})\n\nconst withConnect = connect(mapStatetoProps, mapDispatchToProps)\n\nexport default compose(withConnect)(AssignToMe)\n","import React, { useState } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { fromJS, List, Map } from 'immutable'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport Button from 'components/Button'\nimport Select from 'components/Select'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\nimport AssignToMe from './AssignToMe'\nimport messages from '../messages'\nimport { getCurrentOrg } from 'auth/current-org'\nimport UserWidget from 'components/UserWidget'\n\nexport default function ReassignToUserModal(props) {\n const [user, setUser] = useState(null)\n\n const clearAndClose = () => {\n setUser(null)\n props.close()\n }\n\n const onSubmit = () => {\n props.reassignToUser({\n ticketSrn: props.ticket.srn,\n userSrn: user,\n })\n clearAndClose()\n }\n\n //pass in immutable user\n const getRoleAssignmentsByScope = user => {\n const roleAssignments = user.getIn(['roleAssignments', 'items'], List())\n const roleAssignmentsByScope = {}\n roleAssignments.forEach(roleAssignment => {\n roleAssignmentsByScope[\n roleAssignment.get('scope')\n ] = roleAssignment.toJS()\n })\n return fromJS(roleAssignmentsByScope)\n }\n\n //pass in roleAssignmentsByScope obj\n //pass in a scope (resourceId or adminScope)\n const hasPermission = (roleAssignmentsByScope, scope) => {\n const adminPerm = '*'\n const passingPerm = 'view.data' // needs this to pass\n if (roleAssignmentsByScope.get(scope)) {\n const permissions = roleAssignmentsByScope.getIn(\n [scope, 'role', 'items', '0', 'permissions'],\n List()\n )\n\n if (\n permissions.includes(adminPerm) ||\n permissions.includes(passingPerm)\n ) {\n return true\n }\n } else {\n return false\n }\n }\n\n const getTicketSwimlaneResourceIds = ticket => {\n const adminScope = `/org/${getCurrentOrg()}/*`\n const srns = (ticket.swimlaneSRNs || []).map(swimlaneSrn => {\n const swimlane =\n props.swimlanes.find(swimlane => swimlane.get('srn') === swimlaneSrn) ||\n Map()\n return swimlane.get('resourceId')\n })\n srns.push(adminScope) // add the admin scope\n return srns\n }\n\n const getUserOptions = () => {\n //This is a list of all the swimlane resource IDs that the ticket is attached to -- not sure if we are suppose to use the ticket RESOURCE's swimlanes for this?\n\n const users = (props.users || List()).toList()\n let options = []\n users.forEach(user => {\n const roleAssignmentsByScope = getRoleAssignmentsByScope(user)\n const ticketSwimlaneResourceIds = getTicketSwimlaneResourceIds(\n props.ticket\n )\n //checking the tickets swimlanes against the users scopes and permissions\n ticketSwimlaneResourceIds.forEach(resourceId => {\n if (hasPermission(roleAssignmentsByScope, resourceId)) {\n options.push(user.toJS())\n }\n })\n })\n\n return options\n }\n\n const options = getUserOptions().map(item => ({\n label: item.name || item.srn,\n value: item.srn,\n }))\n\n return (\n \n \n \n \n \n setUser(val.value)}\n formatOptionLabel={option => (\n \n )}\n />\n \n \n
\n \n
\n \n \n \n \n
\n
\n )\n}\n\nReassignToUserModal.propTypes = {\n users: ImmutablePropTypes.iterable.isRequired,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool,\n reassignToUser: PropTypes.func.isRequired,\n ticket: PropTypes.shape({\n srn: PropTypes.string.isRequired,\n swimlaneSRNs: PropTypes.array.isRequired,\n assignedTo: PropTypes.string,\n }),\n}\n","import React, { Component, Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\n\nimport { Dropdown, DropdownToggle } from 'reactstrap'\nimport styled from 'styled-components'\nimport CreateUpdateTicketModal from 'containers/CreateUpdateTicketModal'\nimport permissionChecker from 'containers/PermissionChecker'\nimport themeable from 'containers/ThemeManager/Themeable'\nimport TicketAutoRemediateWizard from 'containers/TicketAutoRemediateWizard'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Button from 'components/Button'\nimport DropdownMenu from 'components/StyledReactstrapDropdownMenu'\nimport Icon from 'components/Icon'\nimport { hadResourceDeleted } from 'utils/sonraiUtils'\nimport SnoozeTicketModal from './SnoozeTicketModal'\nimport ReassignToUserModal from './ReassignToUserModal'\n\nconst TICKET_ACTIONS = {\n EDIT: {\n permissionName: 'edit.tickets',\n displayOnlyForTypes: ['Custom'],\n hideForStatuses: [],\n label: 'Edit Ticket',\n },\n SNOOZE: {\n permissionName: 'snooze.tickets',\n hideForStatuses: ['SNOOZED'],\n label: 'Snooze...',\n },\n ACCEPT_RISK: {\n permissionName: 'acceptrisk.tickets',\n hideForStatuses: ['RISK_ACCEPTED'],\n label: 'Accept Risk',\n },\n REOPEN: {\n permissionName: 'transition.tickets',\n hideForStatuses: ['NEW'],\n label: 'Reopen Ticket',\n },\n RESOLVE: {\n permissionName: 'transition.tickets',\n hideForStatuses: ['CLOSED'],\n label: 'Mark as Resolved',\n },\n REASSIGN: {\n permissionName: 'edit.tickets',\n hideForStatuses: [],\n label: 'Reassign to User...',\n },\n REMEDIATE: {\n permissionName: 'execute.bots',\n hideForStatuses: ['CLOSED', 'RISK_ACCEPTED', 'SNOOZED'],\n label: 'Auto Remediate...',\n },\n}\n\nconst LoadingIconContainer = styled.span`\n padding-right: 2px;\n color: transparent;\n &.loading-true {\n color: gray;\n }\n`\n\nexport class TicketDetailsHeaderActions extends Component {\n constructor(props) {\n super(props)\n this.state = {\n action: this.defaultTicketAction(),\n autoRemediateWizardOpen: false,\n isOpen: false,\n snoozeTicketModalOpen: false,\n reassignToUserModalOpen: false,\n }\n }\n\n style = {\n container: {\n display: 'flex',\n alignItems: 'center',\n },\n activeButton: {\n margin: '0rem 0.5rem 0rem 0rem',\n padding: '0.35rem',\n width: '160px', // maybe this is ok?\n },\n link: {\n padding: '0.65rem',\n },\n dropdownToggle: {\n border: '1px solid lightgrey',\n fontSize: '0.9rem',\n padding: '0.5rem 0.5rem',\n },\n }\n\n componentDidUpdate() {\n if (\n (TICKET_ACTIONS[this.state.action].hideForStatuses ?? []).includes(\n this.props.ticket.status\n )\n ) {\n this.setState({ action: this.defaultTicketAction() })\n }\n }\n\n defaultTicketAction = () => {\n switch (this.props.ticket.status) {\n case 'SNOOZED':\n case 'RISK_ACCEPTED':\n case 'CLOSED':\n return 'REOPEN'\n case 'NEW':\n default:\n return 'RESOLVE'\n }\n }\n\n handleChangeAction = action => {\n this.handleSelectAction(action)\n this.setState({ isOpen: false })\n }\n\n getActions = () => {\n const actions = Object.keys(TICKET_ACTIONS)\n .filter(action => {\n return this.props.userHasPermission({\n permissionName: TICKET_ACTIONS[action].permissionName,\n swimlanes: this.props.ticket.swimlaneSRNs,\n })\n })\n .filter(action => {\n return TICKET_ACTIONS[action].displayOnlyForTypes\n ? TICKET_ACTIONS[action].displayOnlyForTypes.includes(\n this.props.ticket.ticketType\n )\n : true // default display for all types\n })\n .filter(action => {\n return !(TICKET_ACTIONS[action].hideForStatuses ?? []).includes(\n this.props.ticket.status\n )\n })\n .map((action, index) => (\n this.handleChangeAction(action)}\n key={index}\n style={this.style.link}\n disabled={\n action === this.state.action ||\n (action === 'REMEDIATE' && hadResourceDeleted(this.props.ticket))\n }\n >\n {TICKET_ACTIONS[action].label}\n \n ))\n return actions\n }\n\n toggleDropdown = () => {\n this.setState(oldState => ({\n isOpen: !oldState.isOpen,\n }))\n }\n\n handleSelectAction = action => {\n // handle all the logic of firing the corresponding action\n switch (action) {\n case 'RESOLVE':\n this.props.closeTicket(this.props.ticket)\n break\n case 'ACCEPT_RISK':\n this.props.acceptRiskTicket(this.props.ticket)\n break\n case 'SNOOZE':\n this.setState({ snoozeTicketModalOpen: true })\n break\n case 'REOPEN':\n this.props.reopenTicket(this.props.ticket)\n break\n case 'REASSIGN':\n this.setState({ reassignToUserModalOpen: true })\n break\n case 'REMEDIATE':\n this.setState({ autoRemediateWizardOpen: true })\n break\n case 'EDIT':\n this.setState({ updateTicketModalOpen: true })\n break\n default:\n // eslint-disable-next-line no-console\n console.error(`Unkonown action `, action)\n }\n }\n\n render() {\n const actions = this.getActions()\n if (actions.length === 0) {\n // user has permission to to no sactions :(\n return null\n }\n\n return (\n \n
\n \n \n \n this.handleSelectAction(this.state.action)}\n >\n {TICKET_ACTIONS[this.state.action].label}\n \n \n \n \n \n {this.getActions()}\n \n
\n this.setState({ snoozeTicketModalOpen: false })}\n isOpen={this.state.snoozeTicketModalOpen}\n ticket={this.props.ticket}\n snoozeTicket={this.props.snoozeTicket}\n />\n this.setState({ reassignToUserModalOpen: false })}\n isOpen={this.state.reassignToUserModalOpen}\n ticket={this.props.ticket}\n reassignToUser={this.props.reassignToUser}\n reassignToUserStatus={this.props.reassignToUserStatus}\n swimlanes={this.props.swimlanes}\n />\n this.setState({ autoRemediateWizardOpen: false })}\n isOpen={this.state.autoRemediateWizardOpen}\n ticket={this.props.ticket}\n />\n this.setState({ updateTicketModalOpen: false })}\n ticket={this.props.ticket}\n resource={this.props.ticket.resource}\n update\n />\n
\n )\n }\n}\n\nTicketDetailsHeaderActions.propTypes = {\n acceptRiskTicket: PropTypes.func.isRequired,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n actionStatus: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n }).isRequired,\n closeTicket: PropTypes.func.isRequired,\n reopenTicket: PropTypes.func.isRequired,\n snoozeTicket: PropTypes.func.isRequired,\n reassignToUser: PropTypes.func.isRequired,\n reassignToUserStatus: ImmutablePropTypes.map,\n ticket: PropTypes.shape({\n resource: PropTypes.object,\n srn: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired,\n ticketType: PropTypes.string.isRequired,\n swimlaneSRNs: PropTypes.arrayOf(PropTypes.string).isRequired,\n }).isRequired,\n userHasPermission: PropTypes.func,\n users: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default themeable(permissionChecker(TicketDetailsHeaderActions))\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport qs from 'query-string'\nimport {\n getNameFromSrn,\n getNodeViewPushParams,\n getSwimlaneNameFromSrn,\n} from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\n\nimport messages from '../messages'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Badge from 'components/Badge'\nimport CloudAccount from 'components/CloudAccount'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\n\nclass TicketDetailsHeaderProperties extends Component {\n style = {\n container: {\n display: 'grid',\n gridTemplateColumns: 'auto auto auto auto 1fr',\n },\n\n property: {\n display: 'flex',\n flexDirection: 'column',\n margin: '0rem 1rem',\n },\n label: {\n fontSize: '1rem',\n fontWeight: '400',\n margin: '0rem 0rem 0.5rem 0rem',\n },\n value: {\n margin: '0.5rem 0rem 0rem 0rem',\n },\n accountLink: {\n fontSize: '0.9rem',\n },\n }\n\n getAlertLevel = severityCategory => {\n if (!severityCategory) {\n return null\n }\n const getBackgroundColor = severity => {\n switch (severity) {\n case 'HIGH':\n return this.props.theme.fail\n case 'MEDIUM':\n return this.props.theme.warn\n case 'LOW':\n return this.props.theme.info\n }\n }\n return (\n \n {_.startCase(severityCategory.toLowerCase())}\n \n )\n }\n\n getResourceLink = resource => {\n if (Object.keys(resource).length === 0) {\n // is it an empty object, e.g. no resource for ticket\n return \n }\n const { name, friendlyName, srn } = resource\n const displayName = name || friendlyName || getNameFromSrn(srn)\n return (\n \n {displayName}\n \n )\n }\n\n getAccount = ticket => {\n if (ticket.account) {\n return (\n
\n \n \n \n
\n )\n }\n const { resource } = ticket\n if (!resource) {\n return \n }\n return (\n
\n \n \n \n
\n )\n }\n\n getSwimlanes = ticket => {\n let swimlaneSRNs = []\n if (ticket.resource && Object.keys(ticket.resource).length > 0) {\n swimlaneSRNs = ticket.resource.swimlaneSRNs ?? []\n } else if (ticket.swimlaneSRNs) {\n swimlaneSRNs = ticket.swimlaneSRNs\n }\n return (\n
\n {swimlaneSRNs.map((srn, index) => {\n const name = getSwimlaneNameFromSrn(srn, this.props.swimlanes)\n const path = {\n pathname: '/App/SwimlaneDetails',\n search: qs.stringify({\n srn,\n }),\n }\n return (\n \n \n {name || srn}\n \n \n )\n })}\n
\n )\n }\n\n render() {\n const { ticket } = this.props\n return (\n
\n
\n
Severity
\n
{this.getAlertLevel(ticket.severityCategory)}
\n
\n
\n
Resource
\n
{this.getResourceLink(ticket.resource)}
\n
\n
\n
Account
\n
{this.getAccount(ticket)}
\n
\n
\n
Type
\n
{ticket.ticketType || '-'}
\n
\n
\n
Swimlane(s)
\n
{this.getSwimlanes(ticket)}
\n
\n
\n )\n }\n}\n\nTicketDetailsHeaderProperties.propTypes = {\n theme: themeShape,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n ticket: PropTypes.object.isRequired,\n}\n\nexport default themeable(TicketDetailsHeaderProperties)\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\n\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\n\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\n\nimport messages from '../messages'\n\nexport default function ErrorChangeStatusModal(props) {\n let errorMessageKey = ''\n if (props.acceptRiskTicketStatus.get('error')) {\n errorMessageKey = 'actionErrorAcceptRiskTicket'\n }\n\n if (props.closeTicketStatus.get('error')) {\n errorMessageKey = 'actionErrorCloseTicket'\n }\n\n if (props.snoozeTicketStatus.get('error')) {\n errorMessageKey = 'actionErrorSnoozeTicket'\n }\n\n if (props.reopenTicketStatus.get('error')) {\n errorMessageKey = 'actionErrorReopenTicket'\n }\n\n if (props.reassignToUserStatus.get('error')) {\n errorMessageKey = 'actionErrorReassign'\n }\n\n if (props.isOpen && '' === errorMessageKey) {\n // hopefully this doesn't happen:\n // eslint-disable-next-line no-console\n console.warn(\n `ErrorChangeStatusModal: could not generate error message`,\n this.props\n )\n props.close()\n return null\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nErrorChangeStatusModal.propTypes = {\n // ~ passed from parent ~\n isOpen: PropTypes.bool,\n close: PropTypes.func.isRequired,\n acceptRiskTicketStatus: ImmutablePropTypes.contains({\n error: PropTypes.bool,\n }).isRequired,\n closeTicketStatus: ImmutablePropTypes.contains({\n error: PropTypes.bool,\n }).isRequired,\n reopenTicketStatus: ImmutablePropTypes.contains({\n error: PropTypes.bool,\n }),\n reassignToUserStatus: ImmutablePropTypes.contains({\n error: PropTypes.bool,\n }),\n snoozeTicketStatus: ImmutablePropTypes.contains({\n error: PropTypes.bool,\n }).isRequired,\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { Map } from 'immutable'\nimport { push } from 'connected-react-router'\nimport { createStructuredSelector } from 'reselect'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport moment from 'moment'\nimport BorderedCard from 'components/BorderedCard'\nimport TicketDetailsHeaderActions from './components/TicketDetailsHeaderActions'\nimport TicketDetailsHeaderProperties from './components/TicketDetailsHeaderProperties'\nimport ErrorChangeStatusModal from './components/ErrorChangeStatusModal'\nimport { selectPolicies } from 'containers/ControlFrameworkData/selectors'\nimport {\n selectSwimlanes,\n selectSonraiUsers,\n} from 'containers/SonraiData/selectors'\nimport _ from 'lodash'\nimport { getFriendlyTicketName } from 'utils/widgetUtils'\nimport {\n acceptRiskTicket,\n closeTicket,\n reopenTicket,\n snoozeTicket,\n reassignToUser,\n} from 'containers/TicketDetailsData/actions'\nimport {\n selectActionStatus,\n selectAcceptRiskTicketStatus,\n selectCloseTicketStatus,\n selectReopenTicketStatus,\n selectSnoozeTicketStatus,\n selectReassignToUserStatus,\n} from 'containers/TicketDetailsData/selectors'\n\nexport class TicketDetailsHeader extends Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n actionErrorModalOpen: false,\n }\n }\n style = {\n container: {\n height: '100%',\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: '0.5fr 1.5fr',\n gridGap: '0.5rem',\n },\n top: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n gridTemplateRows: '1fr',\n gridTemplateAreas: '\"title actions\"',\n },\n title: {\n fontWeight: '400',\n fontSize: '1.35rem',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n snoozeLabel: {\n margin: '0rem 0.75rem 0rem 0rem',\n fontSize: '0.9rem',\n fontWeight: '500',\n letterSpacing: '1.2px',\n backgroundColor: '#fff',\n padding: '3px 5px 22px 6px',\n borderRadius: '0.8rem',\n color: this.props.theme.neutralMedium,\n textTransform: 'uppercase',\n border: `2px solid ${this.props.theme.neutralMedium}`,\n height: '26px',\n },\n resolvedLabel: {\n margin: '0rem 0.75rem 0rem 0rem',\n fontSize: '0.9rem',\n fontWeight: '500',\n letterSpacing: '1.2px',\n backgroundColor: '#fff',\n padding: '3px 5px 22px 6px',\n borderRadius: '0.8rem',\n color: this.props.theme.success,\n textTransform: 'uppercase',\n border: `2px solid ${this.props.theme.success}`,\n height: '26px',\n },\n secondaryContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n indicatorText: {\n fontWeight: '500',\n fontSize: '0.85rem',\n fontStyle: 'italic',\n color: this.props.theme.neutralMedium,\n },\n }\n\n componentDidUpdate(prevProps) {\n if (\n prevProps.actionStatus.get('error') == false &&\n this.props.actionStatus.get('error') == true\n ) {\n this.setState({ actionErrorModalOpen: true })\n }\n }\n\n renderSnoozeIndication = () => {\n const time = moment(this.props.ticket.get('snoozedUntil')).format('ll')\n\n return (\n
\n
Snoozed
\n
Snoozed until {time}
\n
\n )\n }\n\n renderResolvedIndication = () => {\n const status = _.startCase(\n _.lowerCase(this.props.ticket.get('status') || '')\n )\n const time = moment(this.props.ticket.get('transitionDate')).format('ll')\n return (\n
\n
Resolved
\n
\n Resolved as {status} on {time}\n
\n
\n )\n }\n\n render() {\n const title = getFriendlyTicketName(this.props.ticket, this.props.policies)\n const isSnoozed = !!this.props.ticket.get('snoozedUntil')\n const isResolved =\n !isSnoozed &&\n (this.props.ticket.get('status') === 'CLOSED' ||\n this.props.ticket.get('status') === 'RISK_ACCEPTED')\n return (\n \n {isSnoozed && this.renderSnoozeIndication()}\n {isResolved && this.renderResolvedIndication()}\n
\n
\n {title}\n
\n \n
\n \n this.setState({ actionErrorModalOpen: false })}\n acceptRiskTicketStatus={this.props.acceptRiskTicketStatus}\n closeTicketStatus={this.props.closeTicketStatus}\n reopenTicketStatus={this.props.reopenTicketStatus}\n snoozeTicketStatus={this.props.snoozeTicketStatus}\n reassignToUserStatus={this.props.reassignToUserStatus}\n />\n
\n )\n }\n}\n\nTicketDetailsHeader.propTypes = {\n // ~ bound action creators ~\n acceptRiskTicket: PropTypes.func.isRequired,\n closeTicket: PropTypes.func.isRequired,\n snoozeTicket: PropTypes.func.isRequired,\n reopenTicket: PropTypes.func.isRequired,\n reassignToUser: PropTypes.func.isRequired,\n\n // ~ props from redux store ~\n actionStatus: ImmutablePropTypes.map,\n acceptRiskTicketStatus: ImmutablePropTypes.map,\n closeTicketStatus: ImmutablePropTypes.map,\n snoozeTicketStatus: ImmutablePropTypes.map,\n reassignToUserStatus: ImmutablePropTypes.map,\n reopenTicketStatus: ImmutablePropTypes.map,\n policies: ImmutablePropTypes.iterable.isRequired,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n users: ImmutablePropTypes.iterable.isRequired,\n\n // ~ props from parent\n ticket: ImmutablePropTypes.iterable.isRequired,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n actionStatus: selectActionStatus,\n acceptRiskTicketStatus: selectAcceptRiskTicketStatus,\n closeTicketStatus: selectCloseTicketStatus,\n reopenTicketStatus: selectReopenTicketStatus,\n snoozeTicketStatus: selectSnoozeTicketStatus,\n reassignToUserStatus: selectReassignToUserStatus,\n policies: selectPolicies,\n swimlanes: selectSwimlanes,\n users: selectSonraiUsers,\n})\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators(\n {\n push,\n acceptRiskTicket,\n closeTicket,\n snoozeTicket,\n reopenTicket,\n reassignToUser,\n },\n dispatch\n )\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(themeable(TicketDetailsHeader))\n","import React from 'react'\nimport { Map, List } from 'immutable'\nimport moment from 'moment'\nimport { getMultiValuesFromString } from 'utils/sonraiUtils'\n\nconst styles = {\n regex: {\n fontFamily: 'monospace',\n fontStyle: 'normal',\n backgroundColor: '#eee',\n display: 'inline-block',\n whiteSpace: 'pre',\n },\n propName: {\n fontFamily: 'monospace',\n fontStyle: 'normal',\n },\n nodeValue: {\n fontFamily: 'monospace',\n fontStyle: 'normal',\n },\n}\n\nconst GLOBAL_ACCOUNT_ID = 'Global'\nconst MICROSOFT_ACCOUNT_ID = 'f8cdef31-a31e-4b4a-93e4-5f571e91255a'\n\nexport const filterOutStandardSearchArgs = args => {\n const modifiedArgs = args.map(arg => {\n const config = arg.first(Map())\n const propName = arg.keySeq().first()\n\n const configValue = config.get('value')\n const op = config.get('op')\n\n if (\n propName === 'active' &&\n (configValue === true || configValue === 'true')\n ) {\n return null\n }\n\n if (propName === 'tagSet') {\n if (List.isList(configValue)) {\n return arg.setIn(\n [propName, 'value'],\n configValue.filter(\n value =>\n typeof value !== 'string' ||\n !value.toLowerCase().includes('controlexception')\n )\n )\n } else if (typeof configValue === 'string') {\n return configValue.toLowerCase().includes('controlexception')\n ? null\n : arg\n }\n }\n\n if (propName === 'account' && op === 'NEQ') {\n if (List.isList(configValue)) {\n const filteredAccounts = configValue.filter(\n accountId =>\n accountId !== GLOBAL_ACCOUNT_ID &&\n accountId !== MICROSOFT_ACCOUNT_ID\n )\n\n if (filteredAccounts.isEmpty()) {\n return null\n }\n\n return arg.setIn([propName, 'value'], filteredAccounts)\n }\n\n const csv = getMultiValuesFromString(configValue)\n const nonGlobal = csv.filter(\n val => val !== GLOBAL_ACCOUNT_ID && val !== MICROSOFT_ACCOUNT_ID\n )\n\n if (nonGlobal.length > 0) {\n return arg.setIn([propName, 'value'], nonGlobal.join(','))\n } else {\n return null\n }\n }\n\n return arg\n })\n\n return modifiedArgs.filter(arg => !!arg)\n}\n\nexport const compareDateField = (\n config,\n nodeValue,\n propName,\n alertTime,\n nodeType\n) => {\n const result = {\n field: propName,\n message: null,\n triggerCondition: null,\n nodeType,\n }\n\n if (typeof config.get('dateOffset') === 'number') {\n if (config.get('dateOffset') < 0) {\n result.triggerCondition = `Field \"${propName}\" is older than ${Math.abs(\n config.get('dateOffset')\n )} days when the policy runs `\n\n const offsetDate = moment(alertTime).subtract(\n config.get('dateOffset'),\n 'days'\n )\n\n if (nodeValue && moment(nodeValue).isBefore(offsetDate)) {\n result.message = (\n \n Field {propName} with value{' '}\n \n {moment(nodeValue).format('lll')}\n {' '}\n was older than {Math.abs(config.get('dateOffset'))} days when the\n policy ran\n \n )\n }\n } else {\n const offsetDate = moment(alertTime).add(config.get('dateOffset'), 'days')\n\n result.triggerCondition = `Field \"${propName}\" is newer than ${config.get(\n 'dateOffset'\n )} days when the policy runs `\n\n if (nodeValue && moment(nodeValue).isBefore(offsetDate)) {\n result.message = (\n \n Field {propName} with value{' '}\n \n {moment(nodeValue).format('lll')}\n {' '}\n was newer than {config.get('dateOffset')} days when the policy ran\n \n )\n }\n }\n } else if (Map.isMap(config.get('dateOffset'))) {\n const offsetArg = config.get('dateOffset')\n const alertDate = moment(alertTime)\n const nodeDate = moment(nodeValue)\n\n if (offsetArg.get('tense') === 'future') {\n const compareToDate = alertDate.add(\n offsetArg.get('number'),\n offsetArg.get('measure')\n )\n\n if (offsetArg.get('type') === 'GT') {\n result.triggerCondition = `Field \"${propName}\" is more than ${offsetArg.get(\n 'number'\n )} ${offsetArg.get('measure')} in the future from when the policy runs `\n\n if (nodeValue && nodeDate.isAfter(compareToDate)) {\n result.message = (\n \n Field {propName} with value{' '}\n \n {moment(nodeValue).format('lll')}\n {' '}\n was more than {offsetArg.get('number')} {offsetArg.get('measure')}{' '}\n in the future from when the policy ran\n \n )\n }\n }\n\n if (offsetArg.get('type') === 'LT') {\n result.triggerCondition = `Field \"${propName}\" is less than ${offsetArg.get(\n 'number'\n )} ${offsetArg.get('measure')} in the future from when the policy runs `\n\n if (nodeValue && nodeDate.isBefore(compareToDate)) {\n result.message = (\n \n Field {propName}with value{' '}\n \n {moment(nodeValue).format('lll')}\n {' '}\n was less than {offsetArg.get('number')} {offsetArg.get('measure')}{' '}\n in the future from when the policy ran\n \n )\n }\n }\n } else {\n const compareToDate = alertDate.subtract(\n offsetArg.get('number'),\n offsetArg.get('measure')\n )\n\n if (offsetArg.get('type') === 'GT') {\n result.triggerCondition = `Field \"${propName}\" is less than ${offsetArg.get(\n 'number'\n )} ${offsetArg.get('measure')} in the past from when the policy runs `\n\n if (nodeValue && nodeDate.isAfter(compareToDate)) {\n result.message = (\n \n Field {propName} with value\n \n {moment(nodeValue).format('lll')}\n {' '}\n was less than {offsetArg.get('number')} {offsetArg.get('measure')}{' '}\n in the past from when the policy ran\n \n )\n }\n }\n\n if (offsetArg.get('type') === 'LT') {\n result.triggerCondition = `Field \"${propName}\" is more than ${offsetArg.get(\n 'number'\n )} ${offsetArg.get('measure')} in the past from when the policy runs `\n\n if (nodeValue && nodeDate.isBefore(compareToDate)) {\n result.message = (\n \n Field {propName} with value{' '}\n \n {moment(nodeValue).format('lll')}\n {' '}\n was more than {offsetArg.get('number')} {offsetArg.get('measure')}{' '}\n in the past from when the policy ran\n \n )\n }\n }\n }\n }\n\n return result\n}\n\nexport const getPropOfInterest = (\n config,\n propName,\n nodeValue,\n alertTime,\n nodeType\n) => {\n let configValue = config.get('value')\n const op = config.get('op')\n let configValues = []\n\n if (typeof configValue === 'string') {\n configValues = config.get('noCsv')\n ? [configValue]\n : getMultiValuesFromString(configValue)\n } else if (\n List.isList(configValue) &&\n configValue.filter(val => typeof val === 'string').size === configValue.size\n ) {\n configValues = configValue.toJS()\n }\n\n //Handle caseSensitive\n if (\n !config.get('caseSensitive') &&\n (op === 'NOT_CONTAINS' ||\n op === 'CONTAINS' ||\n op === 'EQ' ||\n op === 'NEQ' ||\n op === 'ENDS_WITH' ||\n op === 'STARTS_WITH')\n ) {\n configValues = configValues.map(configValue => configValue.toLowerCase())\n\n if (typeof nodeValue === 'string') {\n nodeValue = nodeValue.toLowerCase()\n } else if (List.isList(nodeValue)) {\n nodeValue = nodeValue.map(val =>\n typeof val === 'string' ? val.toLowerCase() : val\n )\n }\n }\n\n //Handle numeric comparisons\n if (op === 'LTE' || op === 'GTE' || op === 'LT' || op === 'GT') {\n if (typeof configValue === 'string' && typeof nodeValue === 'number') {\n const numeric = parseInt(configValue, 10)\n\n if (!isNaN(numeric)) {\n configValue = numeric\n }\n }\n }\n\n const joinedNodeVal = List.isList(nodeValue)\n ? nodeValue.join(', ')\n : nodeValue\n\n const result = {\n field: propName,\n message: null,\n triggerCondition: null,\n nodeType,\n }\n\n if (op === 'REGEX') {\n const withoutEscapes = configValue\n .replace(/\\\\\\\\\\\\/g, '\\\\')\n .replace(/\\\\\\\\/g, '\\\\')\n const regex = new RegExp(withoutEscapes)\n\n result.triggerCondition = (\n \n Field "{propName}" matches the regex{' '}\n {configValue}\n \n )\n\n if (regex.test(nodeValue)) {\n result.message = (\n \n Field "{propName}" with value "\n {nodeValue}" matched the\n regex {withoutEscapes}\n \n )\n }\n } else if (op === 'NOT_CONTAINS') {\n result.triggerCondition = (\n \n Field {propName}\n {' does not contain'}{' '}\n {configValues.length === 1\n ? `\"${configValues[0]}\"`\n : `one of [${configValues.join(', ')}]`}\n \n )\n\n if (\n (typeof nodeValue === 'string' || List.isList(nodeValue)) &&\n configValues.filter(\n configValue =>\n !nodeValue.includes(configValue) &&\n !joinedNodeVal.includes(configValue)\n ).length > 0\n ) {\n result.message = (\n \n Field {propName} with value{' '}\n "\n \n {List.isList(nodeValue) ? `[${joinedNodeVal}]` : nodeValue}\n \n "\n {' did not contain'}{' '}\n {configValues.length === 1\n ? `\"${configValues[0]}\"`\n : `one of [${configValues.join(', ')}]`}\n \n )\n } else if (nodeValue === null) {\n result.message = (\n \n Field {propName} was empty, and\n did not contain\n {configValues.length === 1\n ? `\"${configValues[0]}\"`\n : `one of [${configValues.join(', ')}]`}\n \n )\n }\n } else if (op === 'CONTAINS') {\n result.triggerCondition = (\n \n Field {propName} contains{' '}\n {configValues.length === 1\n ? `\"${configValues[0]}\"`\n : `one of [${configValues.join(', ')}]`}\n \n )\n\n if (\n (typeof nodeValue === 'string' || List.isList(nodeValue)) &&\n configValues.filter(\n configValue =>\n nodeValue.includes(configValue) || joinedNodeVal.includes(configValue)\n ).length > 0\n ) {\n result.message = (\n \n Field {propName} with value{' '}\n "\n \n {List.isList(nodeValue) ? `[${joinedNodeVal}]` : nodeValue}\n \n " contained{' '}\n {configValues.length === 1\n ? `\"${configValues[0]}\"`\n : `one of [${configValues.join(', ')}]`}\n \n )\n }\n } else if (op === 'EQ') {\n if (config.get('dateOffset')) {\n return compareDateField(config, nodeValue, propName, alertTime, nodeType)\n }\n\n if (configValues.length !== 0) {\n result.triggerCondition = (\n \n Field {propName} equals{' '}\n {configValues.map(str => `\"${str}\"`).join(' OR ')}\n \n )\n } else {\n result.triggerCondition = (\n \n Field {propName} equals "\n {configValue}"\n \n )\n }\n\n if (List.isList(nodeValue)) {\n nodeValue.forEach(val => {\n if (\n configValues.length !== 0 &&\n configValues.filter(configValue => val === configValue).length > 0\n ) {\n result.message = (\n \n Field {propName} with value\n \n [{nodeValue.toJS().join(', ')}]\n {' '}\n contained one of{' '}\n {configValues.map(str => `\"${str}\"`).join(' OR ')}\n \n )\n } else if (configValue === val) {\n result.message = (\n \n Field {propName} with value\n \n [{nodeValue.toJS().join(', ')}]\n {' '}\n contained "\n {typeof configValue === 'boolean'\n ? configValue.toString()\n : configValue}\n "\n \n )\n } else if (typeof configValue === 'string' && typeof val === 'number') {\n //Handle a special case where we get the search comparison value as a string but should treat it as a number\n const numeric = parseInt(configValue, 10)\n\n if (!isNaN(numeric) && numeric === val) {\n result.message = (\n \n Field {propName} with value\n \n [{nodeValue.toJS().join(', ')}]\n {' '}\n contained "\n {configValue}"\n \n )\n }\n }\n })\n } else if (configValues.length === 1 && configValues[0] === nodeValue) {\n result.message = (\n \n Field {propName} equaled "\n {configValues[0]}"\n \n )\n } else if (\n configValues.length !== 0 &&\n configValues.filter(configValue => nodeValue === configValue).length > 0\n ) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" equaled\n one of {configValues.map(str => `\"${str}\"`).join(' OR ')}\n \n )\n } else if (configValue === nodeValue) {\n result.message = (\n \n Field {propName} equaled "\n {typeof configValue === 'boolean'\n ? configValue.toString()\n : configValue}\n "\n \n )\n } else if (\n typeof configValue === 'string' &&\n typeof nodeValue === 'number'\n ) {\n //Handle a special case where we get the search comparison value as a string but should treat it as a number\n const numeric = parseInt(configValue, 10)\n\n if (!isNaN(numeric) && numeric === nodeValue) {\n result.message = (\n \n Field {propName} equaled "\n {configValue}"\n \n )\n }\n }\n } else if (op === 'NEQ') {\n if (configValues.length > 0) {\n result.triggerCondition = (\n \n Field {propName} does not equal{' '}\n {configValues.map(val => `\"${val}\"`).join(' OR ')}\n \n )\n } else if (configValues.length === 0 && configValue !== nodeValue) {\n result.triggerCondition = (\n \n Field {propName} does not equal{' '}\n "{configValue}"\n \n )\n }\n\n if (configValues.length === 1 && nodeValue !== configValues[0]) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" did not\n equal "{configValues[0]}"\n \n )\n } else if (configValues.filter(val => nodeValue !== val).length > 0) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" did not\n equal any of {configValues.map(str => `\"${str}\"`).join(' OR ')}\n \n )\n } else if (configValues.length === 0 && configValue !== nodeValue) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" did not\n equal "{configValue}"\n \n )\n }\n } else if (op === 'ENDS_WITH') {\n result.triggerCondition = `Field \"${propName}\" ends with (${configValues.join(\n ' OR '\n )})`\n\n if (\n configValues.filter(\n configValue =>\n typeof nodeValue === 'string' && nodeValue.endsWith(configValue)\n ).length > 0\n ) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" ended\n with ({configValues.join(' OR ')})\n \n )\n }\n } else if (op === 'STARTS_WITH') {\n result.triggerCondition = `Field \"${propName}\" starts with (${configValues.join(\n ' OR '\n )})`\n\n if (\n configValues.filter(\n configValue =>\n typeof nodeValue === 'string' && nodeValue.startsWith(configValue)\n ).length > 0\n ) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" started\n with ({configValues.join(' OR ')})\n \n )\n }\n } else if (op === 'IN_LIST' && List.isList(configValue)) {\n result.triggerCondition = `\"${propName}\" value is in the list [${config\n .get('value')\n .join()}]`\n\n if (configValue.includes(nodeValue)) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" was in\n the list [{config.get('value').join()}]\n \n )\n }\n } else if (op === 'NOT_IN_LIST' && List.isList(configValue)) {\n result.triggerCondition = `\"${propName}\" value is not in the list [${config\n .get('value')\n .join()}]`\n\n if (!configValue.includes(nodeValue)) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" was not\n in the list [{config.get('value').join()}]\n \n )\n }\n } else if (op === 'BETWEEN' && config.get('values')) {\n const firstDate = config.get('values').get(0)\n const secondDate = config.get('values').get(1)\n\n result.triggerCondition = `\"${propName}\" date is between ${firstDate} and ${secondDate}`\n const nodeDate = moment(nodeValue)\n\n if (nodeDate.isBetween(firstDate, secondDate)) {\n result.message = (\n \n Field {propName} with value\n {nodeDate.format('lll')} was\n between {firstDate} and {secondDate}\n \n )\n }\n } else if (op === 'NOT_BETWEEN' && Array.isArray(configValue)) {\n const firstDate = configValue.get(0)\n const secondDate = configValue.get(1)\n result.triggerCondition = `\"${propName}\" date is not between ${firstDate} and ${secondDate}`\n\n const nodeDate = moment(nodeDate)\n\n if (!nodeDate.isBetween(firstDate, secondDate)) {\n result.message = (\n \n Field {propName} with value\n {nodeDate.format('lll')} was not\n between {firstDate} and {secondDate}\n \n )\n }\n } else if (op === 'LTE') {\n result.triggerCondition = `Field \"${propName}\" is less than or equal to \"${configValue}\"`\n\n if (configValue >= nodeValue) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" was less\n than or equal to "\n {configValue}\n "\n \n )\n }\n } else if (op === 'GTE') {\n result.triggerCondition = `Field \"${propName}\" is greater than or equal to \"${configValue}\"`\n\n if (configValue <= nodeValue) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" was\n greater than or equal to "\n {configValue}\n "\n \n )\n }\n } else if (op === 'GT') {\n result.triggerCondition = `Field \"${propName}\" is greater than \"${configValue}\"`\n\n if (configValue < nodeValue) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" was\n greater than "\n {configValue}\n "\n \n )\n }\n } else if (op === 'LT') {\n result.triggerCondition = `Field \"${propName}\" is less than \"${configValue}\"`\n\n if (configValue > nodeValue) {\n result.message = (\n \n Field {propName} with value\n "{nodeValue}" was less\n than "\n {configValue}\n "\n \n )\n }\n } else {\n //eslint-disable-next-line no-console\n console.warn(\n `Unknown operator given to propsOfInterestUtils.getPropOfInterest: \"${op}\"`\n )\n }\n\n return result\n}\n\nexport const getFieldsOfInterest = ({\n args,\n alertTime,\n node = Map(),\n allTriggerProps,\n nodeType,\n}) => {\n let propsOfInterest = []\n\n args.forEach(value => {\n const config = value.first(Map())\n const propName = value.keySeq().first()\n let nodeValue = node.get(propName)\n\n const result = getPropOfInterest(\n config,\n propName,\n nodeValue,\n alertTime,\n nodeType\n )\n if (allTriggerProps || result.message) {\n propsOfInterest.push(result)\n }\n })\n\n return propsOfInterest\n}\n\nexport const getRelationOfInterest = (config, propName, nodeRelations) => {\n let value = config.get('value')\n const op = config.get('op')\n const typename = nodeRelations\n .get('__typename', '')\n .replace('EdgeRelation', '')\n\n const result = {\n field: propName,\n }\n\n const countValue = nodeRelations.has('count')\n ? nodeRelations.get('count')\n : nodeRelations.has('items')\n ? nodeRelations.get('items').size\n : undefined\n\n if (op === 'EQ' && value === 0) {\n result.triggerCondition = `There are no ${propName} relations ${\n typename ? `to a ${typename}` : ''\n }`\n\n if (countValue === 0) {\n result.message = `There were no ${propName} relations ${\n typename ? `to a ${typename}` : ''\n }`\n }\n } else if (op === 'GT' && value === 0) {\n result.triggerCondition = `There is at least one ${propName} relation ${\n typename ? `to a ${typename}` : ''\n }`\n\n if (countValue > 0) {\n result.message = `There was at least one ${propName} relation ${\n typename ? `to a ${typename}` : ''\n }`\n }\n } else if (op === 'GT' && value !== 0) {\n result.triggerCondition = `There are more than ${value} ${propName} relations ${\n typename ? `to a ${typename}` : ''\n }`\n\n if (countValue > value) {\n result.message = `There were more than ${value} ${propName} relations ${\n typename ? `to a ${typename}` : ''\n }`\n }\n } else if (op === 'LT') {\n if (countValue < value) {\n result.triggerCondition = `There are less than ${value} ${propName} relations ${\n typename ? `to a ${typename}` : ''\n }`\n\n result.message = `There was less than ${value} ${propName} relations ${\n typename ? `to a ${typename}` : ''\n }`\n }\n }\n\n return result\n}\n\nexport const getRelationshipsOfInterest = ({\n args,\n node = Map(),\n allTriggerProps,\n}) => {\n let relationsOfInterest = []\n\n args.forEach((value, propName) => {\n const config = value.first(Map())\n\n let nodeValue = node.get(propName) || Map()\n const result = getRelationOfInterest(config, propName, nodeValue)\n if (allTriggerProps || result.message) {\n relationsOfInterest.push(result)\n }\n })\n\n return relationsOfInterest\n}\n\nexport const getFieldsOfInterestForCard = ({\n rootSearchField,\n results,\n alertTime,\n allTriggerProps,\n}) => {\n const rootResultArgs = rootSearchField.get('arguments')\n\n const nodeArgs = rootResultArgs\n .get('and', List())\n .concat(rootResultArgs.get('or', List()))\n const importantArgs = filterOutStandardSearchArgs(nodeArgs)\n\n const props = getFieldsOfInterest({\n args: importantArgs,\n alertTime: alertTime,\n node: results,\n allTriggerProps,\n nodeType: rootSearchField.getIn(['definition', 'name']),\n })\n\n return props\n}\n\nconst convertEPToArgs = effectivePermissionsMap => {\n return effectivePermissionsMap\n .toList()\n .map(epList => epList.map(perm => perm.get('arg')))\n}\n\nexport const getEffectivePermissionsOfInterestForCard = ({\n rootSearchField,\n results,\n alertTime,\n allTriggerProps,\n}) => {\n if (!results) {\n return []\n }\n\n const effectivePermissions =\n rootSearchField.get('effectivePermissions') || Map()\n\n const includeGroups = convertEPToArgs(\n effectivePermissions.get('include', Map())\n )\n\n const includedConditions = includeGroups\n .map(group => {\n const matchingPermissions = results.map(result => {\n const props = getFieldsOfInterest({\n args: group,\n alertTime: alertTime,\n node: result,\n allTriggerProps,\n nodeType: rootSearchField.getIn(['definition', 'name']),\n })\n\n return props.filter(poi => !!poi.message)\n })\n\n return matchingPermissions.first(List())\n })\n .toJS()\n .filter(groupResults => {\n return groupResults.length > 0\n })\n\n return includedConditions\n}\n\nexport const getRelationsOfInterestForCard = ({\n rootSearchField,\n results,\n allTriggerProps,\n}) => {\n const rootResultArgs = rootSearchField.get('arguments')\n\n let propsOfInterest = []\n\n const relationshipArgs = rootResultArgs.delete('and').delete('or')\n if (!relationshipArgs.isEmpty()) {\n const relationsOfInterest = getRelationshipsOfInterest({\n args: relationshipArgs,\n node: results,\n allTriggerProps,\n })\n\n propsOfInterest = propsOfInterest.concat(relationsOfInterest)\n }\n\n return propsOfInterest\n}\n\nexport const getFieldsOfInterestForSearch = (\n search,\n results,\n alertTime,\n allTriggerProps\n) => {\n const rootItem = results.first(Map()).getIn(['items', 0], Map())\n const fields = search.getIn(['query', 'fields'])\n\n const rootSearchField = fields.find(\n field => !field.get('parentId'),\n null,\n Map()\n )\n const rootResultArgs = rootSearchField.get('arguments')\n\n const nodeArgs = rootResultArgs\n .get('and', List())\n .concat(rootResultArgs.get('or', List()))\n const importantArgs = filterOutStandardSearchArgs(nodeArgs)\n\n const props = getFieldsOfInterest({\n args: importantArgs,\n alertTime: alertTime,\n node: rootItem,\n allTriggerProps,\n nodeType: rootSearchField.getIn(['definition', 'name']),\n })\n\n let propsOfInterest = props\n\n const relationshipArgs = rootResultArgs.delete('and').delete('or')\n if (!relationshipArgs.isEmpty()) {\n const relationsOfInterest = getRelationshipsOfInterest({\n args: relationshipArgs,\n node: rootItem,\n allTriggerProps,\n })\n\n propsOfInterest = propsOfInterest.concat(relationsOfInterest)\n }\n\n return propsOfInterest\n}\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Map, List } from 'immutable'\nimport {\n getFieldsOfInterestForCard,\n getRelationsOfInterestForCard,\n getEffectivePermissionsOfInterestForCard,\n} from 'utils/propsOfInterestUtils'\nimport { getIconMapping } from 'utils/sonraiUtils'\nimport Icon from 'components/Icon'\nimport { getAliasForField } from 'query-builder'\nimport Expandable from 'components/Expandable'\nimport { getTypeFromDefinition } from 'utils/graphDataUtils'\nexport class PolicySearchConditions extends React.Component {\n allCardRelations = {}\n allCardConditions = {}\n allCardEffectivePermissions = {}\n\n renderTriggerConditions = (searchCard, fields, results) => {\n const cardConditions = getFieldsOfInterestForCard({\n rootSearchField: searchCard,\n results: results,\n alertTime: this.props.alertTime,\n })\n const cardRelations = getRelationsOfInterestForCard({\n rootSearchField: searchCard,\n results: results,\n })\n\n const cardEffectivePermissions = getEffectivePermissionsOfInterestForCard({\n rootSearchField: searchCard,\n results: results.getIn(['hasEffectivePermissions', 'items'], List()),\n alertTime: this.props.alertTime,\n allTriggerProps: true,\n })\n\n this.allCardRelations[searchCard.get('id')] = cardRelations\n this.allCardConditions[searchCard.get('id')] = cardConditions\n this.allCardEffectivePermissions[\n searchCard.get('id')\n ] = cardEffectivePermissions\n\n const nonGte0Relations = cardRelations.filter(\n relation => relation.message && !relation.message.includes('at least one')\n )\n\n const type = getTypeFromDefinition(searchCard)\n\n const nearestParentWithContent = this.getNearestParentWithContent(\n searchCard,\n fields\n )\n const nearestParentNameWithContent = this.getDisplayNameFromCard(\n nearestParentWithContent\n )\n\n const showContentForCard =\n nonGte0Relations.length > 0 ||\n cardEffectivePermissions.length > 0 ||\n cardConditions.length > 0 ||\n !searchCard.get('parentId')\n\n return (\n \n {showContentForCard && (\n \n
\n \n
\n
\n
{searchCard.get('name')}
\n\n {type.toLowerCase() !==\n searchCard.get('name', '').toLowerCase() ? (\n
({type})
\n ) : (\n ''\n )}\n
\n
\n {searchCard.get('parentId') &&\n nearestParentWithContent &&\n (nonGte0Relations.length > 0 || cardConditions.length > 0) && (\n \n {nearestParentWithContent.get('id') ===\n searchCard.get('parentId')\n ? `Has a ${searchCard.getIn([\n 'definition',\n 'name',\n ])} relation from ${nearestParentNameWithContent}`\n : `Has a relationship chain from ${nearestParentNameWithContent}`}\n

\n )}\n {cardConditions.map(cond => (\n

\n {cond.field === 'metadata' ? (\n cond.triggerCondition\n ) : (\n {cond.message}\n )}\n

\n ))}\n {!searchCard.get('parentId') &&\n cardConditions.length === 0 &&\n nonGte0Relations.length === 0 &&\n cardEffectivePermissions.length === 0 && (\n \n No relevant filters on the root card\n

\n )}\n\n {cardEffectivePermissions.length > 0 && (\n
\n
\n Has effective permissions matching:{' '}\n
\n\n
\n {cardEffectivePermissions.map((epGroup, index) => {\n return (\n \n {index !== 0 &&
AND
}\n \n {epGroup.map(cond => (\n \n

\n {cond.triggerCondition}\n

\n
\n ))}\n
\n \n )\n })}\n
\n
\n )}\n\n {searchCard\n .get('selectionSet', List())\n .toJS()\n .map(cardId => {\n const childCard = fields.get(cardId)\n const childCardRelationName = childCard.getIn([\n 'definition',\n 'name',\n ])\n const childCardRelation =\n cardRelations.find(\n rel => rel.field === childCardRelationName\n ) || {}\n\n if (\n childCardRelation.message &&\n childCardRelation.message.includes('at least one')\n ) {\n return null\n }\n\n return (\n

\n {childCardRelation.message}\n

\n )\n })}\n
\n \n )}\n {searchCard\n .get('selectionSet', List())\n .toJS()\n .map(cardId => {\n const childCard = fields.get(cardId)\n let childCardRelationName = childCard.getIn(['definition', 'name'])\n\n if (!results.get(childCardRelationName)) {\n childCardRelationName = getAliasForField(\n cardId,\n childCardRelationName\n )\n }\n\n return this.renderTriggerConditions(\n childCard,\n fields,\n results.getIn([childCardRelationName, 'items', 0], Map())\n )\n })}\n \n )\n }\n\n getNearestParentWithContent = (searchCard, fields) => {\n let nearestParentWithContent\n let curr = searchCard\n\n while (!nearestParentWithContent) {\n if (!curr.get('parentId')) {\n nearestParentWithContent = curr\n continue\n }\n\n const parentConditions =\n this.allCardConditions[curr.get('parentId')] || []\n const parentRelations = this.allCardRelations[curr.get('parentId')] || []\n const parentEffectivePermissions =\n this.allCardEffectivePermissions[curr.get('parentId')] || []\n\n const parentHasContent =\n parentConditions.length > 0 ||\n parentEffectivePermissions.length > 0 ||\n parentRelations.filter(\n relation =>\n relation.message && !relation.message.includes('at least one')\n ).length > 0\n\n const parent = fields.get(curr.get('parentId'), Map())\n\n if (parentHasContent) {\n nearestParentWithContent = parent\n } else {\n curr = parent\n }\n }\n\n return nearestParentWithContent\n }\n\n getDisplayNameFromCard = card => {\n if (!card) {\n return\n }\n\n const typename = getTypeFromDefinition(card)\n const cardName = card.get('name') || ''\n\n return typename.toLowerCase() === cardName.toLowerCase()\n ? cardName\n : `${cardName} (${typename})`\n }\n\n render() {\n if (\n (this.props.results || List()).isEmpty() ||\n this.props.search.isEmpty()\n ) {\n return null\n }\n\n const fields = this.props.search.getIn(['query', 'fields'], Map())\n\n const rootSearchField = fields.find(\n field => !field.get('parentId'),\n null,\n Map()\n )\n\n return (\n
\n {this.renderTriggerConditions(\n rootSearchField,\n fields,\n this.props.results\n )}\n
\n )\n }\n}\n\nPolicySearchConditions.defaultProps = {\n results: Map(),\n allTriggerProps: false,\n}\n\nPolicySearchConditions.propTypes = {\n alertTime: PropTypes.number,\n results: ImmutablePropTypes.map.isRequired,\n search: ImmutablePropTypes.map.isRequired,\n}\n\nexport default PolicySearchConditions\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { fromJS, isImmutable, List, Map } from 'immutable'\nimport _ from 'lodash'\n\nimport EmptyText from 'components/EmptyText'\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport DataTable from 'components/DataTable'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport PathWidget from 'components/PathWidget'\nimport PolicySearchConditions from 'components/PolicySearchConditions'\n\nimport { flattenData } from 'utils/sonraiUtils'\n\nimport messages from '../messages'\n\nfunction getPolicyEvidence(props) {\n const { ticket } = props\n let policyEvidence = props.useLegacyPolicyEvidence\n ? props.policyEvidenceLegacy.get('data') ?? Map()\n : ticket.getIn(['evidence', 'policyEvidence'], null)\n\n if (policyEvidence == null) {\n // eslint-disable-next-line no-console\n console.warn(`ticket ${ticket.get('srn')} did not have policyEvidence`)\n return null\n }\n\n if (_.isString(policyEvidence)) {\n try {\n return fromJS(JSON.parse(policyEvidence))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`Could not parse policy evidence ${policyEvidence}`, e)\n return null\n }\n }\n\n return policyEvidence\n}\n\n/**\n * Flatten the root item and then try to reposition the EP columns\n * after the fied they were defined on.\n *\n * Note: this'll break if the EP fields were defined on more than one\n * field until we fix CRC-1101\n */\nconst flattenRootItem = rootItem => {\n if (!rootItem) {\n return\n }\n\n const flattenedRootItems = flattenData({\n items: [rootItem.toJS()],\n })\n try {\n const actualItem = rootItem.toJS()\n\n // find which field has the effective permissions\n let epField = null\n if (actualItem.hasEffectivePermissions) {\n epField = actualItem\n } else {\n let children = Object.values(actualItem)\n .filter(value => _.isObject(value))\n .filter(value => value.items)\n .map(value => value.items)\n\n while (children.length > 0 && epField == null) {\n const temp = []\n for (let child of children) {\n if (child.hasEffectivePermissions) {\n epField = child\n break\n } else {\n let innerChildren = Object.values(child)\n .filter(value => _.isObject(value))\n .filter(value => value.items)\n .map(value => value.items)\n innerChildren.forEach(ic => temp.push(ic))\n }\n }\n children = temp\n }\n }\n\n if (!epField) {\n return flattenedRootItems\n }\n\n const epParentType = epField.__typename\n if (!epParentType) {\n //eslint-disable-next-line no-console\n console.warn('epField did not have typename ', epField)\n return flattenedRootItems\n }\n\n // want to insert the EP keys right after the parent keys\n const row1 = flattenedRootItems[0]\n if (!row1) {\n return flattenedRootItems // if there's no rows don't do anything\n }\n\n const allKeys = Object.keys(row1)\n const parentKeys = allKeys\n .filter(k => k.startsWith(epParentType))\n .filter(k => !k.endsWith('__typename'))\n const lastParentKey = _.last(parentKeys)\n const epKeys = allKeys.filter(k => k.startsWith('EffectivePermission'))\n\n // now insert them\n const keys = allKeys.filter(k => !k.startsWith('EffectivePermission'))\n const insertAtBase = keys.indexOf(lastParentKey)\n for (var i = 0; i < epKeys.length; i++) {\n keys.splice(insertAtBase + i, 0, epKeys[i])\n }\n\n // now we have a list of the fields in correct order make choose fields\n return flattenedRootItems.map(item => _.pick(item, keys))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('an error happened tryng to reposition the ep columns', e)\n return flattenedRootItems\n }\n}\n\nconst getAnalyticResultColumns = data => {\n //The analytics data result can have any properties with any shape of values.\n //We will consdier any non-string result to be something that is worth viewing as JSON.\n //Find the non-primitive values from a sample row, and add to the list of jsonCols\n const sampleRow = _.get(data, [0])\n const objectColumns = []\n\n if (sampleRow) {\n Object.keys(sampleRow).forEach(key => {\n const value = sampleRow[key]\n if (typeof value === 'object' && value !== null) {\n objectColumns.push(key)\n }\n })\n }\n\n return objectColumns\n}\n\nexport default function TicketPolicyEvidence(props) {\n if (props.useLegacyPolicyEvidence) {\n if (props.policyEvidenceLegacy.get('loading')) {\n return \n }\n\n if (props.policyEvidenceLegacy.get('error')) {\n return (\n \n )\n }\n }\n\n let policyEvidence = getPolicyEvidence(props)\n\n let hasSubValues = (policyEvidence || Map()).find(\n prop => isImmutable(prop) && !(prop.get('items') || List()).isEmpty()\n )\n const search = props.policy.getIn(['contains', 'items', 0], Map())\n\n const searchWithFields = props.searches.get(search.get('sid'), Map())\n\n const advancedSearch = props.advancedSearches.find(\n s => s.get('srn') === search.get('srn'),\n Map()\n )\n\n let data = flattenRootItem(policyEvidence)\n let isAnalyticQuery = false\n\n if (advancedSearch) {\n if (advancedSearch.get('query', '').includes('AnalyticsResults')) {\n isAnalyticQuery = true\n //It's using the special analytics type query, in which case we do not want to flatten the data.\n data = policyEvidence.get('data', List()).toJS()\n }\n } else {\n const searchFields = searchWithFields.getIn(['query', 'fields'], Map())\n const hasAnalyticField = searchFields.find(\n f => f.getIn(['definition', 'type', 'name']) === 'AnalyticsResults'\n )\n\n //AnalyticsResults dont have any relations so they will be the only card in a search. So we are safe to not flatten the results\n if (hasAnalyticField) {\n isAnalyticQuery = true\n data = policyEvidence.get('data', List()).toJS()\n }\n }\n\n return (\n
\n {search.isEmpty() ? (\n \n Some details could not be displayed because this policy does not have\n a search attached.\n \n ) : (\n \n
\n \n
\n {hasSubValues && (\n \n )}\n
\n )}\n\n \n \n
\n \n )\n}\n\nTicketPolicyEvidence.propTypes = {\n policy: ImmutablePropTypes.map,\n searches: ImmutablePropTypes.map,\n advancedSearches: ImmutablePropTypes.list,\n ticket: ImmutablePropTypes.contains({\n srn: PropTypes.string.isRequired,\n evidence: ImmutablePropTypes.contains({}),\n }),\n policyEvidenceLegacy: ImmutablePropTypes.map,\n useLegacyPolicyEvidence: PropTypes.bool,\n policyPath: ImmutablePropTypes.map,\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { List, fromJS } from 'immutable'\nimport { FlatPathWidget } from 'components/PathWidget'\nimport _ from 'lodash'\n\nclass ShowPath extends Component {\n styles = {\n titleName: {\n fontWeight: 500,\n },\n }\n\n getPath = () => {\n if (!this.props.resourceId || _.isEmpty(this.props.accessPaths)) {\n return List()\n }\n return fromJS([this.props.accessPaths])\n }\n\n render() {\n return (\n
\n \n
\n )\n }\n}\n\nShowPath.propTypes = {\n accessPaths: PropTypes.array,\n resourceId: PropTypes.string,\n sourceId: PropTypes.string.isRequired,\n onDoubleClick: PropTypes.func,\n}\n\nexport default ShowPath\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List, Map } from 'immutable'\n\nimport DataTable from 'components/DataTable'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { srnIsCRMActionable } from 'utils/widgetUtils'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport SectionHeader from 'components/SectionHeader'\n\nimport ShowPath from './ShowPath'\n\nclass CRMAlertDetails extends React.Component {\n styles = {\n base: {\n zIndex: '0',\n padding: '0em 1em 1em 1em',\n overflow: 'hidden',\n },\n tableHeightWrapper: {\n height: '350px',\n },\n pathHeightWrapper: {\n height: '350px',\n marginTop: '1em',\n },\n }\n\n shouldComponentUpdate(nextProps) {\n return this.props.activeAlertActions !== nextProps.activeAlertActions\n }\n\n onDoubleClickPathNode = ({ nodes }) => {\n if (nodes.length > 0) {\n const srn = nodes[0]\n\n if (srn.startsWith('srn:')) {\n this.props.push(getNodeViewPushParams(srn, getTypeFromSrn(srn)))\n }\n }\n }\n\n handleActionsNav = (srn, type) => {\n let nav = getNodeViewPushParams(srn, type)\n nav.search = `${nav.search}`\n\n this.props.push(nav)\n }\n\n renderAccessAlert = () => {\n const evidence = this.props.alert.get('evidence')\n\n let path = evidence.get('path') || List()\n if (typeof path === 'string') {\n path = JSON.parse(path)\n } else {\n path = path.toJS()\n }\n\n const resourceId = evidence.get('resourceSet', List()).first()\n\n return (\n
\n Access Path\n \n
\n )\n }\n\n renderActivityAlert = () => {\n if (this.props.activeAlertActionsLoading) {\n return \n }\n\n return (\n this.props.activeAlertActions && (\n
\n {this.props.showHeader && (\n Actions for this Ticket\n )}\n
\n \n
\n
\n )\n )\n }\n\n renderPropertyAlert = () => {\n const property = this.props.alert.get('ticketKey')\n const evidence = this.props.alert.get('evidence', Map())\n\n const hasBoolEvidence = evidence.get('fieldType') === 'Boolean'\n const hasStringEvidence = evidence.get('fieldType') === 'String'\n const hasIntEvidence = evidence.get('fieldType') === 'Int'\n const hasLongEvidence = evidence.get('fieldType') === 'Long'\n\n let prevVal\n let currVal\n\n if (hasBoolEvidence) {\n prevVal = evidence.get('prevBoolValue')\n currVal = evidence.get('boolValue')\n } else if (hasStringEvidence) {\n prevVal = evidence.get('prevValue')\n currVal = evidence.get('value')\n } else if (hasIntEvidence) {\n prevVal = evidence.get('prevIntValue')\n currVal = evidence.get('intValue')\n } else if (hasLongEvidence) {\n prevVal = evidence.get('prevLongValue')\n currVal = evidence.get('longValue')\n }\n\n prevVal = String(prevVal)\n currVal = String(currVal)\n\n return (\n
\n {this.props.showHeader && (\n Information\n )}\n Property {property} changed\n from{' '}\n \n {prevVal}\n {' '}\n to{' '}\n \n {currVal}\n \n
\n )\n }\n\n render() {\n return (\n
\n {this.props.alert.get('ticketType') === 'Access'\n ? this.renderAccessAlert()\n : this.props.alert.get('ticketType') === 'Activity'\n ? this.renderActivityAlert()\n : this.renderPropertyAlert()}\n
\n )\n }\n}\n\nCRMAlertDetails.defaultProps = {\n showHeader: true,\n}\n\nCRMAlertDetails.propTypes = {\n activeAlertActions: PropTypes.array,\n activeAlertActionsLoading: PropTypes.bool,\n push: PropTypes.func,\n alert: ImmutablePropTypes.map.isRequired,\n showHeader: PropTypes.bool,\n hiddenColumns: PropTypes.array,\n}\n\nexport default CRMAlertDetails\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { List } from 'immutable'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport { push } from 'connected-react-router'\n\nimport { fetchActivityTicketActions } from 'containers/TicketDetailsData/actions'\nimport { selectActivityTicketActions } from 'containers/TicketDetailsData/selectors'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nimport CRMAlertDetails from './CRMAlertDetails'\nexport class TicketCRMEvidence extends React.Component {\n constructor(props, context) {\n super(props, context)\n props.fetchActivityTicketActions({ ticket: props.ticket.toJS() })\n }\n\n render() {\n if (this.props.activityTicketActions.get('loading')) {\n return \n }\n\n if (this.props.activityTicketActions.get('error')) {\n return error\n }\n\n return (\n \n )\n }\n}\n\nTicketCRMEvidence.propTypes = {\n // ~ passed props ~\n ticket: ImmutablePropTypes.map.isRequired,\n // ~ bound action creators ~\n fetchActivityTicketActions: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n\n // ~ from redux ~\n activityTicketActions: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n }),\n}\n\nconst mapDispatchToProps = dispatch => {\n return bindActionCreators({ fetchActivityTicketActions, push }, dispatch)\n}\n\nconst mapStateToProps = createStructuredSelector({\n activityTicketActions: selectActivityTicketActions,\n})\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(TicketCRMEvidence)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport TicketPolicyEvidence from './TicketPolicyEvidence'\nimport TicketCRMEvidence from './TicketCRMEvidence'\n\nexport default function TicketEvidence(props) {\n switch (props.ticket.get('ticketType')) {\n case 'Policy':\n return \n case 'Activity':\n return \n case 'Access':\n return \n case 'Property':\n return \n default:\n return null\n }\n}\n\nTicketEvidence.propTypes = {\n ticket: ImmutablePropTypes.contains({\n ticketType: PropTypes.string.isRequired,\n }).isRequired,\n}\n","import React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Map, List } from 'immutable'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport TextLink from 'components/TextLink'\nimport { getNodeViewPushParams, getNameFromSrn } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport qs from 'query-string'\nimport SavedSearchDisplay from 'components/SavedSearchDisplay'\nimport MarkdownDisplay from 'components/MarkdownDisplay'\nimport { hadResourceDeleted } from 'utils/sonraiUtils'\n\nimport messages from '../messages'\n\nimport BorderlessButton from 'components/BorderlessButton'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Expandable from 'components/Expandable'\n\nimport Pill from 'components/Badge/Pill'\n\nimport SectionHeader from 'components/SectionHeader'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport Button from 'components/Button'\n\nimport TicketEvidence from './TicketEvidence'\nclass DetailsTab extends Component {\n styles = {\n resourceTop: {\n backgroundColor: this.props.theme.neutralLight,\n display: 'flex',\n alignItems: 'center',\n padding: '0.5rem',\n },\n property: {\n display: 'flex',\n margin: '0rem 0.25rem',\n padding: '0.25rem',\n },\n propertyLabel: {\n fontSize: '1rem',\n fontWeight: '400',\n margin: '0rem 0.5rem 0rem 0rem',\n },\n cfBadges: {\n display: 'flex',\n flexWrap: 'wrap',\n marginLeft: '-0.25rem',\n },\n props: {\n display: 'grid',\n gridTemplateColumns: '200px 1fr',\n padding: '0.5rem',\n },\n propLabel: {\n fontSize: '1rem',\n marginLeft: '0.5em',\n fontWeight: '400',\n },\n tooltipLabel: {\n margin: '0.25rem 0rem',\n fontWeight: '400',\n },\n li: {\n listStyleType: 'disc',\n marginLeft: '1rem',\n },\n }\n\n getPolicy = () => {\n const policy =\n this.props.policies.get(this.props.ticket.get('ticketKey')) || Map()\n\n return policy\n }\n\n getPolicyInfo = () => {\n const policy = this.getPolicy()\n if (!policy || policy.isEmpty()) {\n return null\n }\n const search = policy.getIn(['contains', 'items', 0]) || Map()\n\n const policyNavLink = {\n pathname: '/App/ControlCenter/Policy',\n search: qs.stringify({\n policyId: policy.get('srn'),\n }),\n }\n\n let searchLocationParams\n\n if (search.get('__typename') === 'Savedquery') {\n searchLocationParams = {\n pathname: '/App/GraphExplorer',\n state: {\n searchName: search.get('name'),\n },\n }\n } else if (search.get('__typename') === 'Search') {\n searchLocationParams = {\n pathname: '/App/Search',\n search: qs.stringify({\n searchId: search.get('sid'),\n }),\n }\n }\n\n const controlGroupIds = policy\n .getIn(['containedByControlFramework', 'items'], List())\n .map(cf => cf.get('srn'))\n const controlGroups = controlGroupIds.map(\n id => this.props.controlGroups.get(id) || Map()\n )\n\n return (\n \n
\n \n {policy.get('title')}\n \n
\n\n
\n Alerting Level: \n
{policy.get('alertingLevelNumeric')}
\n Control Frameworks: \n
\n {controlGroups.map(cf => (\n
\n \n \n {cf.get('title')}\n \n \n
\n ))}\n
\n Search: \n
\n \n
\n Description:\n
\n \n \n \n
\n
\n \n )\n }\n\n getEvidenceData = (ticket, fieldName) => {\n return ticket.getIn(['evidence', fieldName], List())\n }\n\n renderTicketEvidence = ticket => {\n const resourceSet = this.getEvidenceData(ticket, 'resourceSet')\n const regionSet = this.getEvidenceData(ticket, 'regionSet')\n const userAgentSet = this.getEvidenceData(ticket, 'userAgentSet')\n return (\n \n
Resource
\n
\n {!resourceSet.isEmpty() ? (\n
\n {getTypeFromSrn(resourceSet.first())} -{' '}\n \n {getNameFromSrn(resourceSet.first())}\n \n
\n ) : (\n '-'\n )}\n
\n
Region(s):
\n {!regionSet.isEmpty() ? (\n
    \n {regionSet.map((item, index) => (\n
  • \n {item}\n
  • \n ))}\n
\n ) : (\n '-'\n )}\n
User Agent(s):
\n {!userAgentSet.isEmpty() ? (\n
    \n {userAgentSet.map((item, index) => (\n
  • \n {item}\n
  • \n ))}\n
\n ) : (\n '-'\n )}\n \n )\n }\n\n render() {\n const policy = this.getPolicy()\n const hasPolicy = !!policy && !policy.isEmpty()\n const nodeId =\n this.props.ticket.getIn(['resource', 'srn']) ||\n this.props.ticket.get('resourceSRN')\n\n const hasNoResource = hadResourceDeleted(this.props.ticket.toJS())\n\n return (\n
\n {this.props.ticket.get('ticketType') === 'Custom' && (\n \n \n \n \n
\n {this.props.ticket.get('description') ? (\n \n ) : (\n \n )}\n
\n
\n
\n
\n )}\n {nodeId && (\n \n \n Resource Details{' '}\n \n {!hasNoResource && '(Go to Resource Node View)'}\n \n \n\n {!hasNoResource ? (\n \n ) : (\n \n This resource is no longer available as it was removed from the\n Sonrai platform.\n
\n )}\n \n )}\n\n {this.props.showRemediationModal && (\n \n \n Remediation\n \n
\n \n
\n
\n )}\n\n {hasPolicy && (\n \n {' '}\n Policy Details{' '}\n \n )}\n\n {this.props.ticket.get('ticketType') === 'Activity' && (\n
\n \n Ticket Evidence\n \n {this.renderTicketEvidence(this.props.ticket)}\n
\n )}\n\n {this.props.ticket.get('ticketType') === 'Activity' && (\n
\n \n {' '}\n Actions for this Ticket{' '}\n \n
\n )}\n\n {hasPolicy && this.getPolicyInfo()}\n {this.props.ticket.get('ticketType') !== 'Custom' && (\n \n \n \n )}\n \n )\n }\n}\n\nDetailsTab.propTypes = {\n ticket: ImmutablePropTypes.iterable.isRequired,\n theme: themeShape,\n advancedSearches: ImmutablePropTypes.list,\n policies: ImmutablePropTypes.iterable.isRequired,\n searches: ImmutablePropTypes.map.isRequired,\n showRemediationModal: PropTypes.func,\n controlGroups: ImmutablePropTypes.iterable.isRequired,\n policyEvidenceLegacy: ImmutablePropTypes.map,\n policyPath: ImmutablePropTypes.map,\n useLegacyPolicyEvidence: PropTypes.bool,\n}\n\nexport default themeable(DetailsTab)\n","import React, { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport ProfileIcon from 'components/ProfileIcon'\nimport TextLink from 'components/TextLink'\nimport qs from 'query-string'\nimport moment from 'moment'\nimport MarkdownDisplay from 'components/MarkdownDisplay'\n\nclass Comment extends Component {\n styles = {\n container: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: '1fr',\n gridGap: '0.15rem',\n gridTemplateAreas: '\"profile-icon content\"',\n padding: '0.5rem',\n borderBottom: !this.props.isLast && '1px solid #ABABAB',\n marginTop: !this.props.isFirst && '0.5rem',\n },\n content: {\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: ' 32px 1fr',\n gridGap: '0.25rem',\n gridTemplateAreas: '\"header\" \"body\"',\n gridArea: 'content',\n },\n body: {\n gridArea: 'body',\n paddingBottom: '0.5rem',\n },\n header: {\n gridArea: 'header',\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n },\n profileIcon: {\n marginTop: '2px',\n gridArea: 'profile-icon',\n },\n timestamp: {\n color: '#ABABAB',\n fontWeight: '400',\n fontSize: '0.85rem',\n },\n }\n\n render() {\n return (\n
\n
\n
\n
\n \n {this.props.user.get('name')}\n \n
\n\n
\n {moment(this.props.comment.get('createdDate')).fromNow()}\n
\n
\n
\n \n
\n
\n
\n {' '}\n \n
\n
\n )\n }\n}\n\nComment.propTypes = {\n comment: ImmutablePropTypes.iterable.isRequired,\n user: ImmutablePropTypes.iterable.isRequired,\n isFirst: PropTypes.bool,\n isLast: PropTypes.bool,\n}\n\nexport default Comment\n","import React, { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List, Map } from 'immutable'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport Error from 'components/Error'\nimport Comment from './Comment'\nimport moment from 'moment'\n\nclass TicketCommentsDisplay extends Component {\n styles = {\n container: {\n height: '100%',\n },\n secondayContainer: {\n height: '100%',\n minHeight: '64px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n empty: {\n color: '#ABABAB',\n },\n }\n\n getUser = comment => {\n const createdBy = comment.get('createdBy')\n return this.props.users.get(createdBy) || Map()\n }\n\n render() {\n if (this.props.ticketComments.get('error')) {\n return (\n
\n \n
\n )\n }\n\n if (this.props.ticketComments.get('loading')) {\n return (\n
\n \n
\n )\n }\n\n const comments = this.props.ticketComments.get('data') || List()\n if (comments.isEmpty()) {\n return (\n
\n This ticket has no comments.\n
\n )\n }\n\n return (\n
\n {comments\n .sort(\n (a, b) =>\n moment(b.get('createdDate')) - moment(a.get('createdDate'))\n ) // sort by most recent\n .map((comment, index) => {\n const user = this.getUser(comment)\n return (\n \n )\n })}\n
\n )\n }\n}\n\nTicketCommentsDisplay.propTypes = {\n users: ImmutablePropTypes.iterable.isRequired,\n ticketComments: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default TicketCommentsDisplay\n","import React, { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport PropTypes from 'prop-types'\nimport MarkdownEditor from 'components/MarkdownEditor'\nimport Button from 'components/Button'\n\nclass AddTicketComment extends Component {\n state = {\n comment: '',\n }\n\n styles = {\n container: {\n height: '100%',\n margin: '0.25rem 0rem 0.5rem 0rem',\n },\n disabled: {\n height: '100%',\n backgroundColor: this.props.theme.neutralLight,\n pointerEvents: 'none',\n },\n footer: {\n display: 'flex',\n alignItems: 'center',\n },\n error: {\n fontSize: '0.9rem',\n color: this.props.theme.fail,\n margin: '0rem 0rem 0rem 1rem',\n },\n }\n\n handleChange = comment => this.setState({ comment })\n\n handleBlur = comment => this.setState({ comment })\n\n handleAddComment = () => {\n this.props.addComment({\n ticketSrn: this.props.ticketSrn,\n body: this.state.comment,\n createdBy: this.props.currentUser,\n })\n this.setState({ comment: null })\n }\n\n render() {\n const isDisabled =\n this.props.ticketComments.get('loading') ||\n this.props.ticketComments.get('error') ||\n !this.state.comment\n const isEditDisabled =\n this.props.ticketComments.get('loading') ||\n this.props.ticketComments.get('error')\n return (\n
\n \n {isEditDisabled ? (\n
\n \n
\n ) : (\n
\n \n
\n )}\n
\n \n Add Comment\n \n {this.props.addCommentError && (\n
Failed to add comment
\n )}\n
\n
\n \n )\n }\n}\n\nAddTicketComment.propTypes = {\n ticketComments: ImmutablePropTypes.iterable.isRequired,\n addComment: PropTypes.func.isRequired,\n ticketSrn: PropTypes.string.isRequired,\n currentUser: PropTypes.string.isRequired,\n addCommentError: PropTypes.bool.isRequired,\n theme: themeShape,\n}\n\nexport default themeable(AddTicketComment)\n","import React, { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { List } from 'immutable'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport TicketCommentsDisplay from './TicketCommentsDisplay'\nimport AddTicketComment from './AddTicketComment'\nimport {\n fetchTicketComments,\n addComment,\n} from 'containers/TicketDetailsData/actions'\nimport {\n selectTicketComments,\n selectAddCommentError,\n} from 'containers/TicketDetailsData/selectors'\nimport SectionHeader from 'components/SectionHeader'\nimport { selectSonraiUserSrn } from 'containers/UserProfileData/selectors'\nimport { selectSonraiUsers } from 'containers/SonraiData/selectors'\n\nclass TicketCommentsTab extends Component {\n constructor(props) {\n super(props)\n\n props.fetchTicketComments({ ticketSrn: props.ticket.get('srn') })\n }\n styles = {\n container: {\n padding: '0rem 0.5rem 0.5rem 0.5rem',\n },\n }\n\n render() {\n const count = (this.props.ticketComments.get('data') || List()).size\n return (\n
\n {!this.props.ticketComments.get('loading') && (\n \n Comments ({count})\n \n )}\n \n \n
\n )\n }\n}\n\nTicketCommentsTab.propTypes = {\n fetchTicketComments: PropTypes.func.isRequired,\n ticket: ImmutablePropTypes.iterable.isRequired,\n ticketComments: ImmutablePropTypes.iterable.isRequired,\n users: ImmutablePropTypes.iterable.isRequired,\n addComment: PropTypes.func.isRequired,\n addCommentError: PropTypes.bool,\n currentUser: PropTypes.string,\n}\n\nconst mapStateToProps = createStructuredSelector({\n ticketComments: selectTicketComments,\n addCommentError: selectAddCommentError,\n currentUser: selectSonraiUserSrn,\n users: selectSonraiUsers,\n})\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators(\n {\n fetchTicketComments,\n addComment,\n },\n dispatch\n )\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(TicketCommentsTab)\n","import React, { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { List } from 'immutable'\nimport qs from 'query-string'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport _ from 'lodash'\n\nimport TextLink from 'components/TextLink'\nimport DataTable from 'components/DataTable'\nimport { fetchTicketHistory } from 'containers/TicketDetailsData/actions'\nimport { selectTicketHistory } from 'containers/TicketDetailsData/selectors'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport Error from 'components/Error'\nimport UserWidget from 'components/UserWidget'\nimport BotWidget from 'components/BotWidget'\nimport SectionHeader from 'components/SectionHeader'\n\nclass TicketHistoryTab extends Component {\n constructor(props) {\n super(props)\n\n props.fetchTicketHistory({\n ticketSrn: props.ticket.get('srn'),\n })\n\n this.styles = {\n container: {\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n gridGap: '1rem',\n },\n secondaryContainer: {\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n content: {\n height: '350px',\n },\n }\n }\n\n formatEvent = ({ actionType }) => {\n if ('TICKET_BOT_EXECUTED' === actionType) {\n return 'Ticket Bot Submitted'\n } else {\n return _.startCase(_.lowerCase(actionType || '-'))\n }\n }\n\n getData = () => {\n const data = this.props.ticketHistory.get('data') || List()\n return data\n .sortBy(hist => hist.get('createdDate'))\n .reverse()\n .toJS()\n .map(item => {\n return {\n message: item.message,\n event: this.formatEvent(item),\n performedBy: item.actorSrn,\n succeeded: item.succeeded,\n date: item.createdDate,\n srn: item.srn,\n }\n })\n }\n\n render() {\n if (this.props.ticketHistory.get('error')) {\n return (\n
\n \n
\n )\n }\n\n if (this.props.ticketHistory.get('loading')) {\n return (\n
\n \n
\n )\n }\n return (\n
\n Ticket History \n {\n if (!data || !value) {\n return null\n }\n\n if (data.performedBy && data.performedBy.includes(':bot/')) {\n //Make the message clickable to view the full action details\n return (\n \n {value}\n \n )\n }\n\n return value\n },\n },\n performedBy: {\n cellRendererFramework: ({ data, value }) => {\n if (!data || !value) {\n return null\n }\n\n if (value.includes(':bot/')) {\n //If the actor is actually a bot srn from an action:\n return \n }\n\n return \n },\n },\n }}\n />\n
\n )\n }\n}\n\nTicketHistoryTab.propTypes = {\n fetchTicketHistory: PropTypes.func.isRequired,\n ticket: ImmutablePropTypes.iterable.isRequired,\n ticketHistory: ImmutablePropTypes.iterable.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n ticketHistory: selectTicketHistory,\n})\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators(\n {\n fetchTicketHistory,\n },\n dispatch\n )\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(TicketHistoryTab)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { isImmutable } from 'immutable'\nimport _ from 'lodash'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport SectionHeader from 'components/SectionHeader'\nimport {\n changeSimilarTicketsFilters,\n fetchSimilarTickets,\n} from 'containers/TicketDetailsData/actions'\nimport CenterContent from 'components/CenterContent'\nimport { selectSimilarTickets } from 'containers/TicketDetailsData/selectors'\nimport {\n selectSonraiUsers,\n selectSonraiUsersLoading,\n} from 'containers/SonraiData/selectors'\n\nimport TicketList from 'containers/Tickets/components/TicketList'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nimport messages from '../messages'\n\n/**\n * Transform to state from:\n * { severityCategory: high }\n * to\n * { severityCategory: { value: high } }\n */\nfunction filterToReduxState(filter) {\n if (isImmutable(filter)) {\n return filterToReduxState(filter.toJS())\n }\n return _.mapValues(filter, value => ({ value }))\n}\n\n/**\n * Transform to state from:\n * { severityCategory: { value: high } }\n * to\n * { severityCategory: high }\n */\nfunction filterFromReduxState(filter) {\n if (isImmutable(filter)) {\n return filterFromReduxState(filter.toJS())\n }\n return _.mapValues(filter, ({ value }) => value)\n}\n\nexport class SimilarTicketsTab extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.fetchTickets()\n this.state = {\n filter: filterFromReduxState(props.similarTickets.get('filter')),\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.filter != this.state.filter) {\n this.props.changeSimilarTicketsFilters({\n ticket: this.props.ticket.toJS(),\n filter: filterToReduxState(this.state.filter),\n })\n }\n }\n\n fetchTickets = () => {\n this.props.fetchSimilarTickets({ ticket: this.props.ticket.toJS() })\n }\n\n handleFilterChange = value => {\n this.setState({ filter: value })\n }\n\n render() {\n if (this.props.similarTickets.get('loading')) {\n return (\n \n \n \n )\n }\n\n if (this.props.similarTickets.get('error')) {\n return (\n \n
\n \n
\n
\n )\n }\n\n return (\n
\n Similar Tickets\n \n
\n )\n }\n}\n\nSimilarTicketsTab.propTypes = {\n // ~ passed props ~\n policies: ImmutablePropTypes.map,\n ticket: ImmutablePropTypes.map.isRequired,\n\n // ~ bound action creators ~\n changeSimilarTicketsFilters: PropTypes.func.isRequired,\n fetchSimilarTickets: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n\n // ~ props from redux ~\n similarTickets: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n filter: ImmutablePropTypes.map,\n }),\n users: selectSonraiUsers,\n usersLoading: selectSonraiUsersLoading,\n}\n\nconst mapDispatchToProps = dispatch => {\n return bindActionCreators(\n { changeSimilarTicketsFilters, fetchSimilarTickets, push },\n dispatch\n )\n}\n\nconst mapStateToProps = createStructuredSelector({\n similarTickets: selectSimilarTickets,\n users: selectSonraiUsers,\n usersLoading: selectSonraiUsersLoading,\n})\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\nexport default compose(withConnect)(SimilarTicketsTab)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\nimport { createStructuredSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nimport { NodeViewTabs } from 'components/NodeView'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport DetailsTab from 'containers/TicketDetails/components/DetailsTab'\nimport TicketCommentsTab from 'containers/TicketDetails/components/TicketCommentsTab'\nimport TicketHistoryTab from 'containers/TicketDetails/components/TicketHistoryTab'\nimport { selectChangeDetectionOptions } from 'containers/Tickets/selectors'\nimport SimilarTicketsTab from './components/SimilarTicketsTab'\n\nimport {\n fetchPolicyEvidenceLegacy,\n fetchPolicyPath,\n} from 'containers/TicketDetailsData/actions'\n\nimport {\n selectPolicies,\n selectControlGroups,\n} from 'containers/ControlFrameworkData/selectors'\nimport {\n selectSwimlanes,\n selectSwimlanesLoading,\n selectSavedSearches,\n selectSonraiSearches,\n} from 'containers/SonraiData/selectors'\nimport {\n selectPolicyEvidenceLegacy,\n selectTicketComments,\n selectPolicyPath,\n} from 'containers/TicketDetailsData/selectors'\n\nexport class TicketDetailsTabs extends Component {\n constructor(props, context) {\n super(props, context)\n if (this.requiresLegacyPolicyEvidence()) {\n props.fetchPolicyEvidenceLegacy({ ticket: props.ticket.toJS() })\n }\n if (!props.policies.isEmpty()) {\n const policy = props.policies.get(props.ticket.get('ticketKey')) || Map()\n props.fetchPolicyPath({\n resourceSrn: props.ticket.get('resourceSRN'),\n searchId: policy.getIn(['contains', 'items', 0, 'sid']),\n })\n }\n }\n\n style = {\n container: {\n minHeight: '100%',\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n },\n tabContainer: {\n height: '100%',\n padding: '1rem',\n backgroundColor: this.props.theme.light,\n borderTop: 0,\n overflow: 'auto',\n borderBottom: `1px solid ${this.props.theme.neutralMedium}`,\n borderLeft: `1px solid ${this.props.theme.neutralMedium}`,\n borderRight: `1px solid ${this.props.theme.neutralMedium}`,\n },\n }\n\n requiresLegacyPolicyEvidence() {\n if (\n 'Policy' === this.props.ticket.get('ticketType') &&\n null === this.props.ticket.getIn(['evidence', 'policyEvidence'], null)\n ) {\n return true\n }\n return false\n }\n\n render() {\n return (\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n
\n )\n }\n}\n\nTicketDetailsTabs.propTypes = {\n ticket: ImmutablePropTypes.iterable.isRequired,\n theme: themeShape,\n policies: ImmutablePropTypes.iterable.isRequired,\n searches: ImmutablePropTypes.map,\n policyPath: ImmutablePropTypes.map,\n advancedSearches: ImmutablePropTypes.iterable,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n swimlanesLoading: PropTypes.bool,\n controlGroups: ImmutablePropTypes.iterable.isRequired,\n changeDetectionOptions: ImmutablePropTypes.iterable.isRequired,\n fetchPolicyEvidenceLegacy: PropTypes.func.isRequired,\n fetchPolicyPath: PropTypes.func,\n policyEvidenceLegacy: ImmutablePropTypes.map,\n showRemediationModal: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n ticketComments: selectTicketComments,\n policies: selectPolicies,\n controlGroups: selectControlGroups,\n searches: selectSavedSearches,\n advancedSearches: selectSonraiSearches,\n swimlanes: selectSwimlanes,\n swimlanesLoading: selectSwimlanesLoading,\n changeDetectionOptions: selectChangeDetectionOptions,\n policyEvidenceLegacy: selectPolicyEvidenceLegacy,\n policyPath: selectPolicyPath,\n})\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators(\n {\n push,\n fetchPolicyEvidenceLegacy,\n fetchPolicyPath,\n },\n dispatch\n )\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(themeable(TicketDetailsTabs))\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport themeable from 'containers/ThemeManager/Themeable'\nimport UserWidget from 'components/UserWidget'\nimport color from 'color'\nimport moment from 'moment'\nimport CloudBadge from 'components/CloudBadge'\nimport TextLink from 'components/TextLink'\nimport { Map, List } from 'immutable'\nimport qs from 'query-string'\nimport _ from 'lodash'\nimport Error from 'components/Error'\n\nconst getColor = ({ ticket, theme }) => {\n const time = moment(ticket.getIn(['nextEscalation', 'escalationTime'], null))\n const twentyFour = moment(\n ticket.getIn(['nextEscalation', 'escalationTime'], null)\n ).add(1, 'days')\n const fourtyEight = moment(\n ticket.getIn(['nextEscalation', 'escalationTime'], null)\n ).add(2, 'days')\n if (time.isBefore(twentyFour)) {\n return theme.warn // oranage\n } else if (time.isAfter(twentyFour) && time.isBefore(fourtyEight)) {\n return theme.info // yellow\n } else {\n return 'rgb(171, 171, 171)' // grey & black\n }\n}\n\nclass Escalation extends Component {\n styles = {\n container: {\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n gridTemplateAreas: '\"title\" \"details\"',\n border: `2px solid ${getColor(this.props)}`,\n },\n title: {\n display: 'flex',\n justifyContent: 'center',\n backgroundColor: color(getColor(this.props)).lighten(0.4),\n padding: '0.25rem',\n borderBottom: `4px solid ${getColor(this.props)}`,\n },\n details: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: '0.5rem',\n },\n time: {\n display: 'flex',\n },\n timeText: {\n fontSize: '1.5rem',\n fontWeight: '400',\n },\n nextAssigne: {\n display: 'flex',\n alignItems: 'center',\n },\n }\n\n getBotEscalation = rule => {\n const srn = rule.getIn(['escalateToBot', 'botSrn'], null)\n const bots = this.props.bots.get('data') || List()\n const bot = bots.find(bot => bot.get('srn') === srn) || Map()\n if (!srn || bot.isEmpty()) {\n return '-'\n }\n return (\n \n \n \n {' '}\n {bot.get('title')}{' '}\n \n \n )\n }\n\n getTime = () => {\n const time = this.props.ticket.getIn(\n ['nextEscalation', 'escalationTime'],\n null\n )\n return time ? `${moment(time).fromNow()}` : '-'\n }\n\n renderRules = () => {\n const rules = this.props.ticket.getIn(['nextEscalation', 'rule'], List())\n const bots = this.props.ticket\n .getIn(['nextEscalation', 'rule'], List())\n .filter(rule => rule.get('actionType') === 'ESCALATE_TO_BOT')\n if (!bots.isEmpty()) {\n return (\n
\n \n Will escalate to\n \n {rules.map((rule, index) => {\n return (\n \n {this.getBotEscalation(rule)}\n {index !== rules.size - 1 && ', '}\n
\n )\n })}\n \n )\n } else {\n return (\n
\n \n Will escalate to\n \n {rules.map((rule, index) => {\n return
{this.getNextAssigne(rule)}
\n })}\n
\n )\n }\n }\n\n getNextAssigne = rule => {\n const actionType = rule.get('actionType')\n\n if (!actionType) {\n return '-'\n }\n\n switch (actionType) {\n case 'ASSIGN_USER':\n return \n case 'ASSIGN_ROLE':\n return (\n
\n {_.startCase(\n _.toLower(rule.getIn(['assignRole', 'ActionRoleType'], null))\n ) || '-'}\n
\n )\n default:\n return '-'\n }\n }\n\n render() {\n return (\n
\n {this.props.hasError ? (\n \n \n
\n ) : (\n
\n
\n Next Escalation\n
\n
\n
\n
{this.getTime()}
\n
\n {this.renderRules()}\n
\n
\n )}\n \n )\n }\n}\n\nEscalation.propTypes = {\n hasError: PropTypes.bool,\n ticket: ImmutablePropTypes.map.isRequired,\n bots: ImmutablePropTypes.map.isRequired,\n}\n\nexport default themeable(Escalation)\n","import React, { Component, Fragment } from 'react'\n// import PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport moment from 'moment'\nimport { connect } from 'react-redux'\nimport { List } from 'immutable'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\nimport { createStructuredSelector } from 'reselect'\n\nimport Escalation from 'containers/TicketDetails/components/Escalation'\nimport { selectBots } from 'containers/SonraiData/selectors'\n\nimport TicketStatusIcon from 'components/TicketStatusIcon'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport BorderedCard from 'components/BorderedCard'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport CreatedByBadge from 'components/CreatedByBadge'\nimport SectionHeader from 'components/SectionHeader'\nimport TextLink from 'components/TextLink'\nimport UserWidget from 'components/UserWidget'\n\nimport messages from './messages'\n\nexport class TicketDetailsEscalation extends Component {\n style = {\n container: {\n marginTop: '34px',\n display: 'flex',\n flexDirection: 'column',\n },\n propertiesContainer: {\n padding: '0.5rem 0rem',\n },\n property: {\n display: 'flex',\n flexDirection: 'column',\n marginBottom: '2rem',\n },\n label: {\n fontSize: '1rem',\n fontWeight: '400',\n margin: '0rem 0rem 0.5rem 0rem',\n },\n value: {\n fontSize: '0.95rem',\n maxWidth: '360px',\n overflow: 'hidden',\n wordWrap: 'break-word',\n },\n }\n\n getCreatedBy = () => {\n const createdBy = this.props.ticket.get('createdBy')\n return \n }\n\n hasEscalationWidget = () => {\n const rules = this.props.ticket.getIn(['nextEscalation', 'rule']) || List()\n if (!this.props.bots.get('isLoading') && !rules.isEmpty()) {\n return true\n }\n return false\n }\n\n /**\n * Get display value for a custom field from ticket template\n */\n getCustomFieldValue = customField => {\n const type = customField.get('type')\n const value = customField.get('value')\n\n // if it's a muti select, render a thingy for each of the values as\n // if it was only a single value by making recursive call\n if (type === 'SELECT' && customField.get('isMulti') && value) {\n let values\n // for mutli, the values will be stringified JSON\n try {\n values = JSON.parse(value)\n } catch (e) {\n // eslint-disable-next-line\n console.error(`error occured displaying value ${value}`, e)\n return Error occurred processing value {value}\n }\n if (_.isArray(values)) {\n return values.map((value, index) => (\n // pass custom field with one of the values and render non-multi mode\n
\n {this.getCustomFieldValue(\n customField.set('value', value).set('isMulti', false)\n )}\n
\n ))\n }\n }\n\n if (type === 'CHECKBOX') {\n // for checkbox, always false unless explicitly true (e.g. null = false)\n return `${value == 'true'}`\n }\n\n if (value === null) {\n return \n }\n\n // if it's an SRN, make link to srn\n if (`${value}`.startsWith('srn:')) {\n return (\n \n {value}\n \n )\n }\n\n // by default, just return the value text\n return customField.get('value')\n }\n\n render() {\n const hasEscalationError = _.isNull(this.props.ticket.get('nextEscalation'))\n const hasEscalationWidget = this.hasEscalationWidget() || hasEscalationError\n return (\n \n {hasEscalationWidget && (\n \n )}\n\n
\n
\n
Status
\n
\n \n
\n
\n
\n
Assigned To
\n
\n {this.props.ticket.get('assignedTo') ? (\n \n ) : (\n \n \n \n )}\n
\n
\n
\n
Date Created
\n
\n {this.props.ticket.get('createdDate')\n ? moment(this.props.ticket.get('createdDate')).format(\n 'MMM Do YYYY h:mm a'\n )\n : '-'}\n
\n
\n
\n
Created By
\n
{this.getCreatedBy()}
\n
\n {this.props.ticket.get('ticketType') === 'Custom' &&\n this.props.ticket.get('customFields') != null &&\n this.props.ticket.get('customFields').size > 0 && (\n // render display of custom fields from custom ticket template:\n \n
\n \n \n \n {this.props.ticket.get('customFields').map(customField => {\n return (\n \n
\n {customField.get('name')}\n
\n
\n {this.getCustomFieldValue(customField)}\n
\n
\n )\n })}\n \n )}\n \n
\n )\n }\n}\n\nTicketDetailsEscalation.propTypes = {\n theme: themeShape,\n ticket: ImmutablePropTypes.iterable.isRequired,\n bots: ImmutablePropTypes.iterable.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n bots: selectBots,\n})\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators(\n {\n push,\n },\n dispatch\n )\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(themeable(TicketDetailsEscalation))\n","import React, { Fragment, useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap'\nimport { List, isImmutable } from 'immutable'\nimport _ from 'lodash'\nimport Select from 'react-select'\nimport 'react-gh-like-diff/dist/css/diff2html.min.css'\nimport { ReactGhLikeDiff } from 'react-gh-like-diff'\n\nimport { getNameFromSrn } from 'utils/sonraiUtils'\nimport CodeBlock from 'components/CodeBlock'\nimport { REMEDIATION_TYPES } from 'appConstants'\nimport CopyToClipBoard from 'components/CopyToClipboard'\nimport FormLabel from 'components/FormLabel'\nimport { ButtonGroup } from 'reactstrap'\nimport Button from 'components/Button'\n\nconst RemediationModal = ({ toggle, ticket, policy }) => {\n const evidence = ticket.getIn(['evidence', 'policyEvidence'], '')\n const policyEvidence = isImmutable(evidence) ? evidence.toJS() : evidence\n const data = _.get(policyEvidence, ['data']) || []\n const policySrn = _.get(data, ['0', 'policySrn'], null)\n const initialPolicy = policySrn\n ? { label: getNameFromSrn(policySrn), value: policySrn }\n : null\n const [selectedPolicy, setPolicy] = useState(initialPolicy)\n const [tabIndex, setTabIndex] = useState(0)\n const [hasMonitoredActionsPolicy, setHasMonitoredActionsPolicy] = useState(\n false\n )\n const fullPolicy = selectedPolicy\n ? data.find(item => item.policySrn === selectedPolicy.value) || {}\n : {}\n\n const styles = {\n policyDiffContainer: {\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n gridGap: '1rem',\n gridTemplateAreas: '\"select\" \"view\"',\n },\n selectContainer: {\n gridArea: 'select',\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n alignItems: 'flex-end',\n gridColumnGap: '2.5rem',\n },\n policyDiffHeader: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gridColumnGap: '1em',\n margin: '0rem 0rem 0.5rem 0rem',\n },\n policyDiffTitleContainer: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n alignItems: 'center',\n },\n modalBody: {\n maxHeight: '80vh',\n minHeight: '40vh',\n overflow: 'auto',\n padding: '0rem 1rem 1rem 1rem',\n },\n }\n\n useEffect(() => {\n if (fullPolicy) {\n if (fullPolicy.monitoredActionsPolicy) {\n setHasMonitoredActionsPolicy(true)\n } else {\n setHasMonitoredActionsPolicy(false)\n }\n }\n }, [selectedPolicy])\n\n const renderPolicyDiffView = () => {\n let currentPol = fullPolicy.currentPolicy\n const suggestedPol =\n tabIndex !== 0 && hasMonitoredActionsPolicy\n ? fullPolicy.monitoredActionsPolicy\n : fullPolicy.policy\n\n if (!currentPol || !suggestedPol) {\n return
No suggested policy for this resource
\n }\n\n const oldCode = JSON.stringify(currentPol, null, 2)\n const newCode = JSON.stringify(suggestedPol, null, 2)\n\n return (\n
\n
\n
\n Original Policy\n \n
\n
\n \n {tabIndex === 0\n ? 'Recommended Policy'\n : 'Monitored Actions Policy'}\n \n\n \n
\n
\n \n
\n )\n }\n\n const renderPolicyDiff = () => {\n const options = data.map(({ policySrn }) => ({\n label: getNameFromSrn(policySrn),\n value: policySrn,\n }))\n\n return (\n
\n {selectedPolicy && (\n
\n
\n \n Select Policy to Compare{' '}\n \n \n
\n
\n \n setTabIndex(0)}\n >\n Recommended Policy\n \n setTabIndex(1)}\n >\n Monitored Actions Policy\n \n \n
\n
\n )}\n
\n {selectedPolicy ? (\n renderPolicyDiffView()\n ) : (\n
No suggested policy for this resource
\n )}\n
\n
\n )\n }\n\n const renderManualRemediationSteps = () => {\n //TODO: replace this with the remediation steps on the ticket itself (a new field)\n\n return (\n \n {policy\n .getIn(['hasManualRemediations', 'items'], List())\n .map((remediation, index) => (\n \n {remediation.get('remediationSteps')}\n \n ))}\n \n )\n }\n\n return (\n \n Remediation Steps\n \n {policy &&\n policy.get('remediationType') === REMEDIATION_TYPES.UPDATE_POLICY\n ? renderPolicyDiff()\n : renderManualRemediationSteps()}\n \n \n )\n}\n\nRemediationModal.propTypes = {\n policy: ImmutablePropTypes.map,\n ticket: ImmutablePropTypes.map.isRequired,\n toggle: PropTypes.func,\n}\n\nexport default RemediationModal\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport { Map, List, isImmutable } from 'immutable'\nimport _ from 'lodash'\n\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport TicketNotFound from './components/TicketNotFound'\nimport TicketDetailsHeader from './TicketDetailsHeader'\nimport TicketDetailsTabs from './TicketDetailsTabs'\nimport TicketDetailsEscalation from './TicketDetailsEscalation'\nimport { fetchTicketDetails } from 'containers/TicketDetailsData/actions'\nimport {\n selectTicketDetails,\n selectActionStatus,\n} from 'containers/TicketDetailsData/selectors'\nimport { selectPolicies } from 'containers/ControlFrameworkData/selectors'\nimport { REMEDIATION_TYPES } from 'appConstants'\n\nimport RemediationModal from './RemediationModal'\n\nclass Ticket extends React.Component {\n constructor(props, context) {\n super(props, context)\n\n if (props.ticketSrn) {\n props.fetchTicketDetails({ srn: props.ticketSrn })\n }\n\n this.style = {\n content: {\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: '0.5fr auto',\n gridTemplateAreas: '\"header\" \"body\"',\n gridGap: '1rem',\n overflow: 'auto',\n width: '100%',\n },\n body: {\n display: 'grid',\n gridTemplateColumns: '1.5fr 0.5fr',\n gridTemplateAreas: 'tabs escalation',\n gridGap: '1rem',\n },\n loadingContainer: {\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n }\n\n this.state = {\n showRemediationModal: false,\n }\n }\n\n componentDidUpdate(prevProps) {\n if (\n prevProps.ticketDetails.get('data') &&\n prevProps.ticketDetails.getIn(['data', 'status']) !==\n this.props.ticketDetails.getIn(['data', 'status'])\n ) {\n this.props.fetchTicketDetails({ srn: this.props.ticketSrn })\n }\n\n if (\n prevProps.actionStatus.get('loading') &&\n !this.props.actionStatus.get('loading')\n ) {\n // we could take this out if all the action endpoints return the updated ticket obj -- for ex: snooze ticket returns bool\n this.props.fetchTicketDetails({ srn: this.props.ticketSrn })\n }\n }\n\n showRemediationModal = () => {\n this.setState({\n showRemediationModal: true,\n })\n }\n\n hideRemediationModal = () => {\n this.setState({\n showRemediationModal: false,\n })\n }\n\n hasRemediation = () => {\n const ticket = this.props.ticketDetails.get('data') || Map()\n const ticketPolicy = this.props.policies.get(ticket.get('ticketKey'))\n\n if (!ticketPolicy) {\n return false\n }\n\n const isUpdatePolicy =\n ticketPolicy.get('remediationType') === REMEDIATION_TYPES.UPDATE_POLICY\n\n if (isUpdatePolicy) {\n const evidence = ticket.getIn(['evidence', 'policyEvidence'], '')\n const policyEvidence = isImmutable(evidence) ? evidence.toJS() : evidence\n\n let currentPol = _.get(policyEvidence, ['data', 0, 'currentPolicy'])\n const suggestedPol = _.get(policyEvidence, ['data', 0, 'policy'])\n\n if (currentPol && suggestedPol) {\n return true\n }\n }\n\n //TODO: replace this with a check for the remediation steps on the ticket itself (a new field)\n const hasManualRemediations =\n ticketPolicy.get('hasManualRemediations') &&\n !ticketPolicy.getIn(['hasManualRemediations', 'items'], List()).isEmpty()\n\n if (hasManualRemediations) {\n return true\n }\n\n return false\n }\n\n render() {\n if (this.props.ticketDetails.get('loading')) {\n return (\n
\n \n
\n )\n }\n\n if (this.props.ticketDetails.get('error')) {\n return \n }\n\n if (this.props.ticketDetails.get('data') == null) {\n return null\n }\n\n const ticket = this.props.ticketDetails.get('data') || Map()\n const ticketPolicy = this.props.policies.get(ticket.get('ticketKey'))\n const canBeRemediated = this.hasRemediation()\n\n return (\n
\n \n
\n \n \n
\n {this.state.showRemediationModal && (\n \n )}\n
\n )\n }\n}\n\nTicket.propTypes = {\n fetchTicketDetails: PropTypes.func,\n policies: ImmutablePropTypes.map.isRequired,\n ticketDetails: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.map,\n }),\n ticketSrn: PropTypes.string,\n actionStatus: ImmutablePropTypes.map,\n}\n\nconst mapStateToProps = createStructuredSelector({\n ticketDetails: selectTicketDetails,\n actionStatus: selectActionStatus,\n policies: selectPolicies,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n fetchTicketDetails,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(Ticket)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { default as ReactSplitterLayout } from 'react-splitter-layout'\nimport 'react-splitter-layout/lib/index.css'\nimport './gridStyles.css'\nimport './styles.css'\n\nexport class SplitterLayout extends React.Component {\n render() {\n const { children, grid, ...pprops } = this.props\n return (\n \n {children}\n \n )\n }\n}\n\nSplitterLayout.propTypes = {\n grid: false,\n}\n\nSplitterLayout.propTypes = {\n children: PropTypes.node,\n}\n\nexport default SplitterLayout\n","/**\n *\n * ContextMenu\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport BorderlessButton from 'components/BorderlessButton'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass ContextMenu extends React.Component {\n styles = {\n container: {\n zIndex: 100,\n position: 'absolute',\n top: `${this.props.coords[0]}px`,\n left: `${this.props.coords[1]}px`,\n boxShadow: `rgba(176, 176, 176, 0.5) 0px 0px 5px 2.5px`,\n padding: '0.5rem',\n backgroundColor: this.props.theme.light,\n borderRadius: '0.2rem',\n },\n button: {\n padding: '0 0.3em',\n border: 'none',\n fontSize: '0.9rem',\n display: 'inline',\n boxShadow: 'none',\n backgroundColor: 'transparent',\n },\n }\n\n getActions = actions =>\n actions.map(box => (\n \n {box.text}\n \n ))\n\n render() {\n return (\n
\n {this.getActions(this.props.actions)}\n
\n )\n }\n}\n\nContextMenu.propTypes = {\n actions: PropTypes.array,\n coords: PropTypes.array,\n theme: themeShape,\n}\n\nexport default themeable(ContextMenu)\n","import { createSelector } from 'reselect'\n\n/**\n * Direct selector to the explorer state domain\n */\nconst selectExplorerDomain = state => state.get('explorer')\n\nexport const selectSourceNodes = createSelector(\n selectExplorerDomain,\n state => state.get('sourceNodes')\n)\n\nexport const selectIsLoading = createSelector(\n selectExplorerDomain,\n state => state.get('isLoading')\n)\n\nexport const selectAvailableFilters = createSelector(\n selectExplorerDomain,\n state => state.get('availableFilters')\n)\n\nexport const selectNodes = createSelector(\n selectExplorerDomain,\n state => state.get('nodes')\n)\n\nexport const selectSelectedNode = createSelector(\n selectExplorerDomain,\n state => state.get('selectedNode')\n)\n\nexport const selectNodePreview = createSelector(\n selectExplorerDomain,\n state => state.get('nodePreview')\n)\nexport const selectNodePreviewRelations = createSelector(\n selectExplorerDomain,\n state => state.get('nodePreviewRelations') || Map()\n)\n\nexport const selectIsLoadingNodePreview = createSelector(\n selectExplorerDomain,\n state => state.get('isLoadingNodePreview')\n)\n\nexport const selectHiddenNodes = createSelector(\n selectExplorerDomain,\n state => state.get('hiddenNodes')\n)\n\nexport const selectExpandedNodeTypes = createSelector(\n selectExplorerDomain,\n state => state.get('expandedNodeTypes')\n)\n\nexport const selectIsLoadingNodes = createSelector(\n selectExplorerDomain,\n state => state.get('isLoadingNodes')\n)\n/**\n * Other specific selectors\n */\n\n/**\n * Default selector used by Explorer\n */\n\nconst makeSelectExplorer = () =>\n createSelector(\n selectExplorerDomain,\n substate => substate.toJS()\n )\n\nexport default makeSelectExplorer\nexport { selectExplorerDomain }\n","/*\n *\n * Explorer constants\n *\n */\n\nexport const GET_SOURCE_NODE = 'app/Explorer/GET_SOURCE_NODE'\nexport const GET_MULTI_SOURCE_NODES = 'app/Explorer/GET_MULTI_SOURCE_NODES'\nexport const SET_SOURCE_NODES = 'app/Explorer/SET_SOURCE_NODES'\nexport const GET_RELATIONS = 'app/Explorer/GET_RELATIONS'\nexport const SET_RELATIONS = 'app/Explorer/SET_RELATIONS'\nexport const REMOVE_RELATIONS = 'app/Explorer/REMOVE_RELATIONS'\nexport const SET_FILTER = 'app/Explorer/SET_FILTER'\nexport const REMOVE_FILTER = 'app/Explorer/REMOVE_FILTER'\nexport const SELECT_NODE = 'app/Explorer/SELECT_NODE'\nexport const SET_AVAILABLE_FILTERS = 'app/Explorer/SET_AVAILABLE_FILTERS'\nexport const CLEAR_GRAPH = 'app/Explorer/CLEAR_GRAPH'\nexport const GET_NODE_PREVIEW = 'app/Explorer/GET_NODE_PREVIEW'\nexport const SET_NODE_PREVIEW = 'app/Explorer/SET_NODE_PREVIEW'\nexport const LOAD_ALL_CHILDREN = 'app/Explorer/LOAD_ALL_CHILDREN'\nexport const CLEAR_FILTERS = 'app/Explorer/CLEAR_FILTERS'\nexport const REMOVE_NODE = 'app/Explorer/REMOVE_NODE'\nexport const GET_NODE_PREVIEW_RELATIONS =\n 'app/Explorer/GET_NODE_PREVIEW_RELATIONS'\nexport const SET_NODE_PREVIEW_RELATIONS =\n 'app/Explorer/SET_NODE_PREVIEW_RELATIONS'\n\nexport const HANDLE_EXPAND = 'app/Explorer/HANDLE_EXPAND'\nexport const HANDLE_HIDE = 'app/Explorer/HANDLE_HIDE'\nexport const HANDLE_SHOW = 'app/Explorer/HANDLE_SHOW'\nexport const HANDLE_UPDATE = 'app/Explorer/HANDLE_UPDATE'\nexport const LOAD_NODES = 'app/Explorer/LOAD_NODES'\n","/*\n *\n * Explorer reducer\n *\n */\n\nimport { fromJS, Map, List } from 'immutable'\nimport _ from 'lodash'\nimport { handleActions } from 'redux-actions'\nimport {\n SET_RELATIONS,\n REMOVE_RELATIONS,\n GET_SOURCE_NODE,\n GET_MULTI_SOURCE_NODES,\n SET_SOURCE_NODES,\n SET_FILTER,\n REMOVE_FILTER,\n SELECT_NODE,\n SET_AVAILABLE_FILTERS,\n CLEAR_GRAPH,\n GET_NODE_PREVIEW,\n SET_NODE_PREVIEW,\n LOAD_ALL_CHILDREN,\n CLEAR_FILTERS,\n REMOVE_NODE,\n SET_NODE_PREVIEW_RELATIONS,\n HANDLE_EXPAND,\n HANDLE_HIDE,\n HANDLE_SHOW,\n LOAD_NODES,\n HANDLE_UPDATE,\n} from './constants'\nimport { EXPLORER_VIEW_TYPES } from 'appConstants'\n\nconst initialState = fromJS({\n sourceNodes: [],\n isLoading: false,\n nodes: {},\n selectedNode: null,\n availableFilters: {},\n isLoadingNodePreview: false,\n nodePreview: {},\n nodePreviewRelations: {},\n hiddenNodes: [],\n expandedNodeTypes: [],\n isLoadingNodes: false,\n})\n\nconst explorerReducer = handleActions(\n {\n [REMOVE_NODE]: (state, { payload }) => {\n const node = payload.get('srn')\n const allNodes = state.get('nodes')\n\n let children = List()\n allNodes.forEach(n => {\n const parents = n.get('parents', List())\n if (parents.includes(node)) {\n children = children.push(n)\n }\n })\n\n const childNodeIds = children.map(child => child.get('srn'))\n const newNodes = allNodes.filter(\n x => !childNodeIds.includes(x.get('srn')) && x.get('srn') !== node\n )\n\n return state.set('selectedNode', null).set('nodes', newNodes)\n },\n [CLEAR_GRAPH]: state =>\n state\n .set('selectedNode', null)\n .set('sourceNodes', fromJS([]))\n .set('nodes', fromJS({}))\n .set('availableFilters', fromJS({}))\n .set('tableData', fromJS([]))\n .set('viewType', EXPLORER_VIEW_TYPES.EXPLORER)\n .set('nodePreview', fromJS({}))\n .set('nodePreviewRelations', fromJS({}))\n .set('hiddenNodes', fromJS([]))\n .set('expandedNodeTypes', fromJS([])),\n [LOAD_ALL_CHILDREN]: (state, { payload }) => {\n let nodes = {}\n _.keys(payload.relations).map(a => {\n nodes[a] = []\n payload.relations[a].map(b => {\n let srns = nodes[a].map(y => y.item.srn)\n let sourceNodes = state.get('sourceNodes')\n if (!srns.includes(b.item.srn)) {\n if (!sourceNodes.includes(b.item.srn)) {\n nodes[a].push(b)\n }\n }\n })\n })\n const relations = fromJS(nodes)\n let newState = state.setIn(['nodes', payload.srn, 'relations'], relations)\n relations.forEach(relationsForType => {\n relationsForType.forEach(relation => {\n const item = relation.get('item')\n if (!newState.get('nodes').has(item.get('srn'))) {\n newState = newState.setIn(\n ['nodes', item.get('srn')],\n item\n .set('filters', Map())\n .set('isSourceNode', false)\n .set('parents', fromJS([payload.srn]))\n )\n }\n })\n })\n return newState\n },\n [CLEAR_FILTERS]: (state, { payload }) => {\n let currentRelations = state\n .getIn(['nodes', payload.node, 'relations'])\n .toJS()\n\n let newState = state.deleteIn(['nodes', payload.node, 'relations'])\n const sourceNodes = payload.sourceNodes.toJS()\n let clearRelations = {}\n for (let i = 0; i < _.keys(currentRelations).length; i++) {\n clearRelations[_.keys(currentRelations)[i]] = _.uniqBy(\n currentRelations[_.keys(currentRelations)[i]].filter(\n x => !sourceNodes.includes(x.item.srn)\n ),\n x => x.item.srn\n )\n }\n\n fromJS(clearRelations).forEach(type => {\n type.forEach(rel => {\n newState = removeDeselectedNodes(newState, rel.get('item').get('srn'))\n })\n })\n return newState.setIn(\n ['nodes', state.get('selectedNode'), 'filters'],\n Map()\n )\n },\n [SET_RELATIONS]: (state, { payload }) => {\n const sourceNodes = state.get('sourceNodes')\n const parentNodes = state.getIn(['nodes', payload.srn, 'parents'])\n\n let relations = payload.relations.filter(\n x => !sourceNodes.includes(x.item.srn)\n )\n if (parentNodes && !parentNodes.isEmpty()) {\n relations = relations.filter(y => !parentNodes.includes(y.item.srn))\n }\n\n let newState = state\n .setIn(\n ['nodes', payload.srn, 'relations', payload.label],\n fromJS(relations.map(rel => ({ parent: payload.srn, ...rel })))\n )\n .setIn(\n ['nodes', payload.srn, 'filters', payload.label],\n fromJS({ selected: true })\n )\n\n for (let relation of relations) {\n if (!newState.get('nodes').has(relation.item.srn)) {\n newState = newState.setIn(\n ['nodes', relation.item.srn],\n fromJS({\n ...relation.item,\n filters: {},\n isSourceNode: false,\n parents: [payload.srn],\n })\n )\n } else {\n let parents = newState.getIn(['nodes', relation.item.srn, 'parents'])\n\n let currentParents = parents.filter(\n x => !state.get('sourceNodes').includes(x)\n )\n\n if (!currentParents.isEmpty()) {\n if (!currentParents.contains(payload.srn)) {\n newState = newState.setIn(\n ['nodes', relation.item.srn, 'parents'],\n currentParents.add(payload.srn)\n )\n }\n }\n }\n }\n return newState.set('isLoading', false).set('isLoadingNodes', false)\n },\n [REMOVE_RELATIONS]: (state, { payload }) => {\n let currentRelations = fromJS(\n _.uniqBy(\n state\n .getIn(['nodes', payload.srn, 'relations', payload.label])\n .toJS(),\n x => x.item.srn\n )\n )\n\n const sourceNodes = payload.sourceNodes.toJS()\n currentRelations = currentRelations.filter(\n rel => !sourceNodes.includes(rel.getIn(['item', 'srn']))\n )\n\n let newState = state.deleteIn([\n 'nodes',\n payload.srn,\n 'relations',\n payload.label,\n ])\n\n currentRelations.forEach(rel => {\n newState = removeDeselectedNodes(newState, rel.get('item').get('srn'))\n })\n return newState\n },\n [GET_SOURCE_NODE]: state => state.set('isLoading', true),\n [GET_MULTI_SOURCE_NODES]: state => state.set('isLoading', true),\n [SET_SOURCE_NODES]: (state, { payload }) => {\n let nodes = payload.nodes\n let sourceNodes = []\n let stateNodes = {}\n nodes.forEach(node => {\n sourceNodes.push(node.srn)\n stateNodes[node.srn] = {\n ...node,\n filters: {},\n isSourceNode: true,\n name: node.friendlyName || node.name,\n type: node.__typename,\n relations: {},\n }\n })\n let newState = state\n .set('isLoading', false)\n .set('nodes', fromJS(stateNodes))\n .set('sourceNodes', fromJS(sourceNodes))\n return newState\n },\n [LOAD_NODES]: (state, { payload }) => {\n let nodes = {}\n payload.forEach(node => {\n nodes[node.get('srn')] = { ...node.toJS() }\n })\n\n const sourceNodes = payload\n .filter(node => node.get('isSourceNode'))\n .map(node => node.get('srn'))\n\n return state.set('nodes', fromJS(nodes)).set('sourceNodes', sourceNodes)\n },\n [SET_FILTER]: (state, { payload }) => {\n return state.setIn(\n ['nodes', state.get('selectedNode'), 'filters', payload],\n fromJS({ selected: true })\n )\n },\n [REMOVE_FILTER]: (state, { payload }) => {\n return state.setIn(\n ['nodes', state.get('selectedNode'), 'filters', payload],\n fromJS({ selected: false })\n )\n },\n [SELECT_NODE]: (state, { payload }) => {\n return state.set('selectedNode', payload.node)\n },\n [SET_AVAILABLE_FILTERS]: (state, { payload }) => {\n return state.setIn(['availableFilters', payload.type], payload.filters)\n },\n [HANDLE_HIDE]: (state, { payload }) => {\n const sourceNodes = state.get('sourceNodes')\n const nodesToHide = payload.listOfSrnsToHide\n .filter(node => {\n if (!sourceNodes.includes(node)) {\n return node\n }\n })\n .map(node =>\n fromJS({\n srn: node,\n __typename: payload.typename,\n })\n )\n const hiddenNodes = state.get('hiddenNodes').concat(nodesToHide)\n\n return state.set('hiddenNodes', hiddenNodes)\n },\n [HANDLE_SHOW]: (state, { payload }) => {\n const hiddenNodes = state.get('hiddenNodes')\n const newHiddenNodes = hiddenNodes.filter(\n node => node.get('__typename') !== payload\n )\n return state.set('hiddenNodes', newHiddenNodes)\n },\n [GET_NODE_PREVIEW]: state => state.set('isLoadingNodePreview', true),\n [SET_NODE_PREVIEW]: (state, { payload }) => {\n return state\n .set('nodePreview', fromJS(payload))\n .set('isLoadingNodePreview', false)\n },\n [SET_NODE_PREVIEW_RELATIONS]: (state, { payload }) => {\n return state.set('nodePreviewRelations', fromJS(payload))\n },\n [HANDLE_EXPAND]: (state, { payload }) => {\n const types = payload.map(x => x.typename)\n const expandedNodeTypes = state.get('expandedNodeTypes').toJS()\n const updatedExpandedNodeTypes = fromJS(\n [].concat(types, expandedNodeTypes)\n )\n return state\n .set('isLoadingNodes', true)\n .set('expandedNodeTypes', updatedExpandedNodeTypes)\n },\n [HANDLE_UPDATE]: (state, { payload }) => {\n return state\n .set('nodes', fromJS(payload))\n .set('hiddenNodes', List())\n .set('expandedNodeTypes', List())\n },\n },\n initialState\n)\n\nconst removeDeselectedNodes = (state, srn) => {\n let newState = state\n const currentNode = newState.getIn(['nodes', srn])\n\n if (currentNode && currentNode.get('parents')) {\n if (currentNode.get('parents').size <= 1) {\n newState = newState.deleteIn(['nodes', srn])\n }\n }\n\n const currentRelations = newState.getIn([\n 'nodes',\n currentNode.get('srn'),\n 'relations',\n ])\n if (currentRelations) {\n currentRelations.forEach(relationsForType => {\n relationsForType.forEach(item => {\n newState = removeDeselectedNodes(newState, item.get('srn'))\n })\n })\n }\n\n newState.get('nodes').forEach(node => {\n if (node.get('parents')) {\n if (\n node\n .get('parents')\n .toJS()\n .includes(currentNode.get('srn'))\n ) {\n newState = removeDeselectedNodes(newState, node.get('srn'))\n }\n }\n })\n\n return newState\n}\n\nexport default explorerReducer\n","/*\n *\n * Explorer actions\n *\n */\n\nimport {\n GET_SOURCE_NODE,\n SET_SOURCE_NODES,\n GET_MULTI_SOURCE_NODES,\n GET_RELATIONS,\n SET_RELATIONS,\n REMOVE_RELATIONS,\n SET_FILTER,\n REMOVE_FILTER,\n SELECT_NODE,\n SET_AVAILABLE_FILTERS,\n CLEAR_GRAPH,\n GET_NODE_PREVIEW,\n SET_NODE_PREVIEW,\n LOAD_ALL_CHILDREN,\n CLEAR_FILTERS,\n REMOVE_NODE,\n SET_NODE_PREVIEW_RELATIONS,\n GET_NODE_PREVIEW_RELATIONS,\n HANDLE_EXPAND,\n HANDLE_HIDE,\n HANDLE_SHOW,\n LOAD_NODES,\n HANDLE_UPDATE,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getSourceNode = createAction(GET_SOURCE_NODE)\nexport const getMultiSourceNodes = createAction(GET_MULTI_SOURCE_NODES)\nexport const setSourceNodes = createAction(SET_SOURCE_NODES)\nexport const getRelations = createAction(GET_RELATIONS)\nexport const setRelations = createAction(SET_RELATIONS)\nexport const removeRelations = createAction(REMOVE_RELATIONS)\nexport const setFilter = createAction(SET_FILTER)\nexport const removeFilter = createAction(REMOVE_FILTER)\nexport const selectNode = createAction(SELECT_NODE)\nexport const setAvailableFilters = createAction(SET_AVAILABLE_FILTERS)\nexport const clearGraph = createAction(CLEAR_GRAPH)\nexport const getNodePreview = createAction(GET_NODE_PREVIEW)\nexport const setNodePreview = createAction(SET_NODE_PREVIEW)\nexport const loadAllChildren = createAction(LOAD_ALL_CHILDREN)\nexport const clearFilters = createAction(CLEAR_FILTERS)\nexport const removeNode = createAction(REMOVE_NODE)\nexport const getNodePreviewRelations = createAction(GET_NODE_PREVIEW_RELATIONS)\nexport const setNodePreviewRelations = createAction(SET_NODE_PREVIEW_RELATIONS)\nexport const handleExpand = createAction(HANDLE_EXPAND)\nexport const handleHide = createAction(HANDLE_HIDE)\nexport const handleShow = createAction(HANDLE_SHOW)\nexport const loadNodes = createAction(LOAD_NODES)\nexport const handleUpdate = createAction(HANDLE_UPDATE)\n","import { all, put, takeLatest, call } from 'redux-saga/effects'\nimport { fromJS, List, Map } from 'immutable'\nimport _ from 'lodash'\nimport {\n FETCH_ALL_TYPES_RELATIONS_QUERY,\n FETCH_ACTIONS_RELATIONS_QUERY,\n MULTI_FETCH_ALL_TYPES_RELATIONS_QUERY,\n FETCH_ACCOUNT_SOURCE_NODES_QUERY,\n GET_RELATIONS_QUERY,\n DEFAULT_EXPLORER_LIMIT,\n} from 'static-queries'\n\nimport {\n GET_SOURCE_NODE,\n GET_RELATIONS,\n GET_NODE_PREVIEW,\n GET_NODE_PREVIEW_RELATIONS,\n HANDLE_EXPAND,\n GET_MULTI_SOURCE_NODES,\n} from './constants'\nimport { getClient } from 'apolloClient'\nimport {\n setSourceNodes,\n setRelations,\n setNodePreview,\n setNodePreviewRelations,\n} from './actions'\nimport gql from 'graphql-tag'\nimport { exists } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils.js'\n\nconst uniqByLabel = relations => {\n let uniqByLabel = {}\n relations.forEach(result => {\n if (uniqByLabel[result.label]) {\n uniqByLabel[result.label] = [\n ...uniqByLabel[result.label],\n result.relation,\n ]\n } else {\n uniqByLabel[result.label] = [result.relation]\n }\n })\n return uniqByLabel\n}\n\nfunction* getRelationsOnType(action) {\n const arrOfExpandableNodeTypes = action.payload\n const listOfSrns = [].concat(\n ...arrOfExpandableNodeTypes.map(x => x.listOfSrnsToExpand)\n )\n\n const results = yield all(\n listOfSrns.map(node => call(fetchRelationsOnSourceNodes, node, true))\n )\n\n const resultsToDisplay = results.map(result => ({\n relations: uniqByLabel(result.relations),\n srn: result.srn,\n }))\n\n yield all(\n resultsToDisplay.map(result =>\n _.keys(result.relations).map(key =>\n put(\n setRelations({\n srn: result.srn,\n relations: result.relations[key],\n label: key,\n })\n )\n )\n )\n )\n}\n\nfunction* fetchRelationsOnSourceNodes(node, uniqByLabel) {\n const client = getClient()\n const results = yield client.query({\n fetchPolicy: 'no-cache',\n query: gql`\n query fetchAllRelations {\n Entities(where: { srn: { value: \"${node}\" } }) {\n items {\n label\n srn\n ... on Resource { \n name\n }\n relations(limit: ${DEFAULT_EXPLORER_LIMIT}) {\n item {\n srn\n label\n ... on Resource {\n name\n friendlyName\n }\n }\n relation {\n direction\n name\n }\n }\n }\n }\n }\n `,\n })\n\n const entity = _.get(results, ['data', 'Entities', 'items', 0], {})\n const entityRelations = _.get(entity, ['relations'], [])\n\n const relations = uniqByLabel\n ? entityRelations.map(rel => ({\n label: rel.item.label,\n parent: node,\n relation: rel,\n }))\n : entityRelations\n\n return {\n srn: node,\n label: entity.__typename,\n relations,\n }\n}\n\nfunction* getRelationsOnNodePreview(action) {\n try {\n const client = getClient()\n const query =\n 'Action' === getTypeFromSrn(action.payload)\n ? FETCH_ACTIONS_RELATIONS_QUERY\n : FETCH_ALL_TYPES_RELATIONS_QUERY\n const results = yield client.query({\n fetchPolicy: 'no-cache',\n query: gql`\n ${query}\n `,\n variables: {\n sourceNodeId: action.payload,\n },\n })\n\n if (results.data.Entities.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setNodePreviewRelations(results.data.Entities.items[0].relations))\n } catch (e) {\n console.error(`${e}`) //eslint-disable-line no-console\n }\n}\n\nfunction* getMultiSourceNodes({ payload }) {\n const client = getClient()\n try {\n const result = yield client.query({\n query: gql`\n ${MULTI_FETCH_ALL_TYPES_RELATIONS_QUERY}\n `,\n fetchPolicy: 'no-cache',\n variables: {\n sourceNodeIds: payload.ids,\n },\n })\n const nodes = _.get(result, ['data', 'Entities', 'items'])\n\n yield put(setSourceNodes({ nodes: nodes, search: false }))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(`${e}`)\n }\n}\n\nfunction* getSourceNode(action) {\n const client = getClient()\n\n let result\n if (exists(action.payload.id)) {\n const query =\n 'Action' === getTypeFromSrn(action.payload.id)\n ? FETCH_ACTIONS_RELATIONS_QUERY\n : FETCH_ALL_TYPES_RELATIONS_QUERY\n result = yield client.query({\n query: gql`\n ${query}\n `,\n fetchPolicy: 'no-cache',\n variables: {\n sourceNodeId: action.payload.id,\n },\n })\n } else {\n result = yield client.query({\n query: gql`\n ${FETCH_ACCOUNT_SOURCE_NODES_QUERY}\n `,\n fetchPolicy: 'no-cache',\n })\n }\n\n if (result.data[_.keys(result.data)[0]].items.length > 0) {\n const node = result.data[_.keys(result.data)[0]].items[0]\n yield put(setSourceNodes({ nodes: [node], search: false }))\n\n let groupedRelations = Map()\n node.relations.forEach(relation => {\n const typename = relation.item.__typename\n const newRelation = fromJS({ parent: node.srn, ...relation })\n\n if (!groupedRelations.get(typename)) {\n groupedRelations = groupedRelations.set(typename, List([newRelation]))\n } else {\n groupedRelations = groupedRelations.update(typename, typeRelations =>\n typeRelations.push(newRelation)\n )\n }\n })\n\n yield all(\n groupedRelations\n .map((typedRelations, label) =>\n put(\n setRelations({\n srn: node.srn,\n relations: typedRelations,\n label: label,\n })\n )\n )\n .toJS()\n )\n }\n}\n\nfunction* getRelations({ payload }) {\n const { srn, itemFilter } = payload\n const query = gql`\n ${GET_RELATIONS_QUERY}\n `\n\n const client = getClient()\n\n try {\n const result = yield client.query({\n query,\n variables: { srn, itemFilter, limit: DEFAULT_EXPLORER_LIMIT },\n fetchPolicy: 'no-cache',\n })\n\n if (result.data.Entities.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const relations = result.data.Entities.items[0].relations\n yield put(setRelations({ srn, relations, label: itemFilter.label.value }))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting relationships for node', e.message)\n yield put(\n setRelations({ srn, relations: [], label: itemFilter.label.value })\n )\n }\n}\n\nfunction* getNodePreview(action) {\n const query = action.payload.query\n const variables = action.payload.variables\n\n const client = getClient()\n const result = yield client.query({\n query,\n variables,\n fetchPolicy: 'no-cache',\n })\n\n yield put(setNodePreview(result.data.Resources.items[0]))\n}\n\nfunction* explorerSaga() {\n yield all([\n takeLatest(GET_RELATIONS, getRelations),\n takeLatest(GET_SOURCE_NODE, getSourceNode),\n takeLatest(GET_MULTI_SOURCE_NODES, getMultiSourceNodes),\n takeLatest(GET_NODE_PREVIEW, getNodePreview),\n takeLatest(GET_NODE_PREVIEW_RELATIONS, getRelationsOnNodePreview),\n takeLatest(HANDLE_EXPAND, getRelationsOnType),\n ])\n}\n\nexport default explorerSaga\n","import React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport _ from 'lodash'\nimport { List } from 'immutable'\nimport MultiSelect from 'react-select'\nimport makeAnimated from 'react-select/animated'\nimport { Dropdown, DropdownToggle } from 'reactstrap'\n\nimport TimeoutLoader from 'components/TimeoutLoader'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { getNodeInfoQuery } from 'utils/graphDataUtils'\nimport { getFieldsForType, getFullType } from 'query-builder'\nimport Icon from 'components/Icon'\nimport {\n selectQueryNames,\n selectQueryTypes,\n selectQueryRelations,\n} from 'containers/SonraiData/selectors'\nimport { computeAvailableFilters } from 'utils/sonraiUtils'\nimport BorderlessButton from 'components/BorderlessButton'\nimport TextLink from 'components/TextLink'\nimport CenterContent from 'components/CenterContent'\nimport { PreviewCard } from 'components/NodeView'\nimport DropdownMenu from 'components/StyledReactstrapDropdownMenu'\n\nimport {\n selectAvailableFilters,\n selectNodes,\n selectSelectedNode,\n selectIsLoadingNodePreview,\n selectNodePreview,\n selectNodePreviewRelations,\n} from './selectors'\nimport {\n getRelations,\n removeRelations,\n setFilter,\n removeFilter,\n selectNode,\n clearFilters,\n loadAllChildren,\n getNodePreview,\n setAvailableFilters,\n removeNode,\n getNodePreviewRelations,\n} from './actions'\n\nconst skipValues = [\n 'srn',\n 'sid',\n 'observedDate',\n 'loadId',\n 'resourceId',\n 'createdBy',\n 'content',\n]\n\nclass NodePreview extends Component {\n styles = {\n container: {\n display: 'grid',\n gridTemplateRows: 'auto 1fr auto',\n gridTemplateAreas: '\"header\" \"body\" \"children\"',\n maxHeight: '80%',\n },\n header: {\n minWidth: '100%',\n maxWidth: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gridArea: 'header',\n },\n body: {\n gridArea: 'body',\n maxHeight: '500px',\n },\n closeButton: {\n alignSelf: 'start',\n margin: '0.05rem 0rem 0rem 0.5rem',\n },\n removeNode: {\n display: 'block',\n width: '100%',\n marginBottom: '0.5em',\n paddingTop: '0.25em',\n paddingBottom: '0.25em',\n paddingLeft: '1em',\n paddingRight: '1em',\n textAlign: 'left',\n },\n filterTitle: {\n margin: '0.5rem 0rem',\n fontWeight: '400',\n },\n disabledSelectAll: {\n cursor: 'default',\n color: '#c8c8c8',\n },\n selectHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n moreButton: {\n padding: '0 0.3em',\n border: 'none',\n display: 'inline',\n boxShadow: 'none',\n backgroundColor: 'transparent',\n },\n iconMenu: {\n display: 'flex',\n alignSelf: 'flex-start',\n alignItems: 'center',\n },\n }\n\n constructor(props) {\n super(props)\n\n this.state = {\n dropdownExpanded: false,\n }\n if (props.selectedNode) {\n const query = this.getGenericQuery(props.selectedNode)\n const variables = { srn: props.selectedNode }\n props.getNodePreview({ query, variables })\n\n const nodeConfig = props.nodes.get(props.selectedNode)\n\n const nodeType = getFullType(nodeConfig.get('__typename'))\n\n const itemType = props.queryTypes\n .getIn([nodeType, 'fields'], List())\n .find(i => i.get('name') === 'items')\n .getIn(['type', 'ofType', 'name'])\n\n if (!this.props.availableFilters.get(itemType)) {\n const availableRelations = computeAvailableFilters(\n itemType,\n props.queryRelations,\n props.queryTypes\n )\n\n props.setAvailableFilters({\n type: itemType,\n filters: availableRelations,\n })\n }\n }\n }\n\n componentDidUpdate(oldProps) {\n const { nodePreview } = this.props\n const srn = nodePreview.get('srn')\n if (oldProps.nodePreview.get('srn') !== srn) {\n if (srn) {\n this.props.getNodePreviewRelations(srn)\n }\n }\n }\n\n getGenericQuery = nodeId => {\n return getNodeInfoQuery(\n nodeId,\n this.props.queryNames,\n this.props.queryTypes\n )\n }\n\n isActive = label => {\n const filterForLabel = this.props.nodes\n .get(this.props.selectedNode)\n .get('filters')\n .get(label)\n if (filterForLabel && filterForLabel.get('selected')) {\n return true\n }\n return false\n }\n\n handleSelectAll = () => {\n if (this.props.nodePreviewRelations.isEmpty()) {\n return\n }\n\n const node = this.props.nodePreview\n const sourceNodes = this.props.sourceNodes.toJS()\n const parentNodes = this.props.nodes\n .get(this.props.selectedNode)\n .get('parents')\n ? this.props.nodes.get(this.props.selectedNode).get('parents').toJS()\n : []\n\n let relations = {}\n const srn = node.get('srn')\n\n this.props.nodePreviewRelations.forEach(relation => {\n const typename = relation.getIn(['item', '__typename'])\n const newRelation = { parent: srn, ...relation.toJS() }\n if (!relations[typename]) {\n relations[typename] = [newRelation]\n } else {\n relations[typename].push(newRelation)\n }\n })\n\n _.keys(relations).forEach(type => {\n const typeArr = relations[type]\n .filter(x => !sourceNodes.includes(x.item.srn))\n .filter(y => !parentNodes.includes(y.item.srn))\n if (!_.isEmpty(typeArr)) {\n this.props.setFilter(type)\n }\n })\n\n this.props.loadAllChildren({\n srn,\n relations,\n })\n }\n\n handleChildFilter = (newValue, actionMeta) => {\n switch (actionMeta.action) {\n case 'select-option':\n this.props.setFilter(actionMeta.option.value)\n this.props.getRelations({\n srn: this.props.selectedNode,\n itemFilter: {\n label: { value: actionMeta.option.value, caseSensitive: false },\n },\n })\n break\n case 'clear':\n this.props.clearFilters({\n node: this.props.selectedNode,\n sourceNodes: this.props.sourceNodes,\n })\n break\n default:\n this.props.removeFilter(actionMeta.removedValue.value)\n this.props.removeRelations({\n srn: this.props.selectedNode,\n label: actionMeta.removedValue.value,\n sourceNodes: this.props.sourceNodes,\n })\n }\n }\n\n getPreviewFields = () => {\n const type = this.props.nodePreview.get('__typename').toLowerCase()\n const fields = getFieldsForType(type, this.props.queryTypes).filter(\n field => !skipValues.includes(field.get('name'))\n )\n\n return fields.toJS()\n }\n\n getOptions = nodeId => {\n if (nodeId && this.props.nodes) {\n const selectedNode = this.props.nodes.get(nodeId)\n if (selectedNode) {\n const selectedType = selectedNode.get('__typename')\n return _.keys(this.props.availableFilters.get(selectedType))\n .filter(filter => filter !== 'Action')\n .map(filter => ({\n label: filter,\n value: filter,\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n }\n }\n }\n\n toggleDropdown = () => {\n this.setState(oldState => ({\n dropdownExpanded: !oldState.dropdownExpanded,\n }))\n }\n\n getValues = options => {\n return options.filter(option => this.isActive(option.value))\n }\n\n render() {\n if (this.props.nodePreview.isEmpty() || this.props.isLoadingNodePreview) {\n return (\n
\n
\n
\n
\n this.props.selectNode({ node: null })}\n >\n \n \n
\n
\n
\n \n \n \n
\n
\n )\n }\n\n const node = this.props.nodePreview\n const selectOptions = this.getOptions(this.props.selectedNode)\n const value = this.getValues(selectOptions)\n\n return (\n \n {!this.props.sourceNodes.includes(node.get('srn')) && (\n \n \n \n \n \n this.props.removeNode(node)}\n >\n Remove Node\n \n \n \n )}\n this.props.selectNode({ node: null })}\n >\n \n \n \n }\n >\n
\n Show Relations:\n \n {this.props.nodePreviewRelations.isEmpty() && (\n \n )}{' '}\n Show All\n \n
\n\n \n \n )\n }\n}\n\nNodePreview.propTypes = {\n availableFilters: ImmutablePropTypes.iterable.isRequired,\n clearFilters: PropTypes.func.isRequired,\n colourStyles: PropTypes.object.isRequired,\n isLoadingNodePreview: PropTypes.bool,\n getNodePreview: PropTypes.func.isRequired,\n getRelations: PropTypes.func.isRequired,\n loadAllChildren: PropTypes.func.isRequired,\n nodePreview: ImmutablePropTypes.map.isRequired,\n nodes: ImmutablePropTypes.iterable.isRequired,\n queryNames: ImmutablePropTypes.iterable.isRequired,\n queryRelations: ImmutablePropTypes.iterable.isRequired,\n queryTypes: ImmutablePropTypes.iterable.isRequired,\n removeFilter: PropTypes.func.isRequired,\n removeRelations: PropTypes.func.isRequired,\n selectedNode: PropTypes.string,\n selectNode: PropTypes.func.isRequired,\n setAvailableFilters: PropTypes.func.isRequired,\n setFilter: PropTypes.func.isRequired,\n theme: themeShape,\n sourceNodes: PropTypes.object,\n removeNode: PropTypes.func,\n getNodePreviewRelations: PropTypes.func,\n nodePreviewRelations: ImmutablePropTypes.map,\n}\n\nconst mapStateToProps = createStructuredSelector({\n queryNames: selectQueryNames,\n queryRelations: selectQueryRelations,\n queryTypes: selectQueryTypes,\n availableFilters: selectAvailableFilters,\n nodes: selectNodes,\n selectedNode: selectSelectedNode,\n isLoadingNodePreview: selectIsLoadingNodePreview,\n nodePreview: selectNodePreview,\n nodePreviewRelations: selectNodePreviewRelations,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n clearFilters,\n getNodePreview,\n loadAllChildren,\n getRelations,\n removeRelations,\n setAvailableFilters,\n setFilter,\n removeFilter,\n selectNode,\n removeNode,\n getNodePreviewRelations,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, themeable)(NodePreview)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport makeAnimated from 'react-select/animated'\nimport CreatableSelect from 'react-select/creatable'\nimport BorderlessButton from 'components/BorderlessButton'\nimport IHelp from 'containers/IHelp'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Icon from 'components/Icon'\nexport class NodeSearch extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n placeholder: 'Search All Nodes...',\n colourStyles: {\n multiValue: styles => ({\n ...styles,\n backgroundColor: 'rgba(27, 117, 188, 0.45)',\n }),\n multiValueLabel: styles => ({\n ...styles,\n color: '#FFFFFF',\n fontWeight: '400',\n fontSize: '1rem',\n }),\n multiValueRemove: styles => ({\n ...styles,\n color: '#FFFFFF',\n opacity: 1,\n ':hover': {\n backgroundColor: this.props.theme.red,\n color: '#FFFFFF',\n },\n }),\n },\n }\n\n this.styles = {\n iconContainer: {\n height: '40px',\n display: 'flex',\n alignItems: 'center',\n },\n\n filterIcon: {\n marginRight: '0.5em',\n },\n }\n }\n\n handleChange = (newValue, actionMeta) => {\n if (actionMeta.action === 'create-option') {\n const isNewVal = newValue[newValue.length - 1]\n const value = { label: isNewVal.label, value: isNewVal.value }\n const existingSearches =\n JSON.parse(localStorage.getItem('searches')) || []\n const list = [...existingSearches, value]\n\n if (list.length > 99) {\n list.shift()\n }\n localStorage.setItem('searches', JSON.stringify(list))\n }\n\n this.props.setTerms(newValue)\n }\n\n onMenuOpen = () => {\n this.setState({ placeholder: 'Recent Searches...' })\n }\n\n onMenuClose = () => {\n this.setState({ placeholder: 'Search Nodes...' })\n }\n\n render() {\n const localStorageValues =\n JSON.parse(localStorage.getItem('searches')) || []\n const selectOptions =\n localStorageValues.length > 3\n ? localStorageValues\n : [\n { label: 'Cloud', value: 'Cloud' },\n { label: 'Service', value: 'Service' },\n { label: 'Action', value: 'Action' },\n ]\n\n return (\n
\n \n \n \n
\n \n
\n
\n \n
\n
\n )\n }\n}\n\nNodeSearch.defaultProps = {\n style: {},\n}\n\nNodeSearch.propTypes = {\n setTerms: PropTypes.func.isRequired,\n style: PropTypes.object,\n theme: themeShape,\n filterActive: PropTypes.bool,\n toggleFilterPanel: PropTypes.func,\n}\n\nexport default themeable(NodeSearch)\n","import React, { Component } from 'react'\nimport BorderedCard from 'components/BorderedCard'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport {\n Input,\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n Modal,\n ModalHeader,\n ModalBody,\n ModalFooter,\n} from 'reactstrap'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Button from 'components/Button'\nimport Checkbox from 'components/Checkbox'\nimport Icon from 'components/Icon'\nimport BorderlessButton from 'components/BorderlessButton'\nimport TextLink from 'components/TextLink'\nimport Tooltip from 'components/Tooltip'\nimport { getIconMapping } from 'utils/sonraiUtils'\nimport { getColor } from 'components/GraphVis/nodeIcons'\n\nclass FilterPanel extends Component {\n state = {\n filter: '',\n selected: [],\n }\n\n style = {\n container: {\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n title: { fontSize: '1.2rem' },\n filterBar: { margin: '1rem 0rem' },\n toggleFilterPanel: {\n top: '1rem',\n right: '1rem',\n position: 'absolute',\n cursor: 'pointer',\n },\n button: {\n padding: '0.25rem',\n fontSize: '0.8rem',\n },\n buttonContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n minWidth: '140px',\n },\n entityTitle: { fontSize: '0.95rem', marginLeft: '1rem' },\n entityContainer: {\n display: 'flex',\n alignItems: 'center',\n padding: '0.85rem 0.4rem',\n justifyContent: 'space-between',\n margin: '0.25rem',\n },\n count: { color: '#c8c8c8' },\n filterBarContainer: {\n padding: '0.8rem 0.4rem',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n borderBottom: '1px solid lightgrey',\n },\n tooltip: {\n fontWeight: '400',\n fontSize: '14px',\n overflow: 'hidden',\n },\n }\n\n isHidden = type => {\n const types = this.props.hiddenNodes.map(x => x.get('__typename'))\n return types.includes(type)\n }\n\n handleCollapse = () => {\n const { selected } = this.state\n const { expandedNodeTypes, nodes } = this.props\n const labels = selected.filter(x => expandedNodeTypes.toJS().includes(x))\n const nodeTypesToCollapse = nodes.filter(node => {\n if (labels.includes(node.get('label'))) {\n return node\n }\n })\n const parents = _.keys(nodeTypesToCollapse.toJS())\n let update = []\n let updatedNodes = {}\n nodes.forEach(node => {\n if (node.get('parents') || node.get('isSourceNode')) {\n if (\n !parents.includes(node.getIn(['parents', '0'])) ||\n node.get('isSourceNode')\n ) {\n update.push(node.toJS())\n }\n }\n })\n\n update.forEach(node => {\n updatedNodes[node.srn] = node\n })\n\n this.setState({\n selected: [],\n })\n this.props.handleUpdate(updatedNodes)\n }\n\n handleExpand = () => {\n const { selected } = this.state\n\n const totalNumberOfEntites = _.sum(\n selected.map(x => this.getCount(x, true))\n )\n\n if (totalNumberOfEntites >= 10) {\n this.setState({\n warningModal: true,\n })\n } else {\n this.setState({\n selected: [],\n })\n this.props.handleExpand(selected)\n }\n }\n\n getCount = (type, int) => {\n const nodes = this.props.nodes\n .toList()\n .filter(node => node.get('__typename') == type)\n if (int) {\n return nodes.size\n }\n return nodes.size < 100 ? `${nodes.size}` : `100+`\n }\n\n handleChecked = type => {\n if (this.state.selected.includes(type)) {\n this.setState(oldState => {\n const newArr = [...oldState.selected]\n const index = newArr.indexOf(type)\n newArr.splice(index, 1)\n return { selected: newArr }\n })\n } else {\n this.setState(oldState => {\n const newArr = [...oldState.selected]\n newArr.push(type)\n return {\n selected: newArr,\n }\n })\n }\n }\n\n renderEntityTypes = () => {\n if (!this.props.data.isEmpty()) {\n const entityTypes =\n this.state.filter !== ''\n ? this.props.data.filter(type =>\n type.toLowerCase().includes(this.state.filter)\n )\n : this.props.data\n\n if (!entityTypes.isEmpty()) {\n return entityTypes.map((type, i) => {\n const isHidden = this.isHidden(type)\n const onClick = isHidden\n ? () => this.props.handleShow(type)\n : () => this.props.handleHide(type)\n const count = this.getCount(type)\n const iconName = getIconMapping(type).faIcon\n\n return (\n \n
\n this.handleChecked(type)}\n checked={\n this.state.selected && this.state.selected.includes(type)\n }\n scale={0.8}\n />\n
\n \n {type} ({count}) \n
\n
\n \n \n }\n tooltipContent={\n
\n {isHidden ? `Show ${type}` : `Hide ${type}`}\n
\n }\n position=\"right\"\n />\n \n
\n )\n })\n }\n }\n }\n isCollapseDisabled = () => {\n const { selected } = this.state\n const { expandedNodeTypes } = this.props\n if (!expandedNodeTypes || expandedNodeTypes.isEmpty()) {\n return true\n }\n\n return !!_.isEmpty(\n selected.filter(x => expandedNodeTypes.toJS().includes(x))\n )\n }\n\n isResetDisabled = () => {\n const { hiddenNodes, expandedNodeTypes } = this.props\n\n return !!hiddenNodes.isEmpty() && !!expandedNodeTypes.isEmpty()\n }\n\n handleReset = () => {\n const { sourceNodes, nodes } = this.props\n let update = []\n let updateNodes = {}\n sourceNodes.forEach(sourceNode => {\n nodes.forEach(node => {\n if (\n node.get('isSourceNode') ||\n node.get('parents').includes(sourceNode)\n ) {\n update.push(node.toJS())\n }\n })\n })\n\n update.forEach(node => {\n updateNodes[node.srn] = node\n })\n\n this.setState({\n selected: [],\n })\n\n this.props.handleUpdate(updateNodes)\n }\n\n getFilterBar = () => {\n const { selected } = this.state\n return (\n
\n \n \n Reset\n \n \n \n Expand\n \n \n \n Collapse\n \n
\n )\n }\n\n handleFilter = e => {\n this.setState({\n filter: e.target.value,\n })\n }\n\n handleModalConfirm = () => {\n this.setState({ warningModal: false })\n this.props.handleExpand(this.state.selected)\n }\n\n handleModalCancel = () => {\n this.setState({ warningModal: false, selected: [] })\n }\n\n renderWarningModal = () => (\n \n \n Confirm Delayed Physics\n \n \n By expanding the relations of more than 10 entites at a time, the graph\n may suffer poor performance.\n \n \n \n Cancel\n \n \n \n \n )\n\n render() {\n return (\n \n
\n \n \n
\n {this.renderWarningModal()}\n
Global Filters
\n \n \n \n \n \n \n \n \n
{this.getFilterBar()}
\n
{this.renderEntityTypes()}
\n \n
\n )\n }\n}\nFilterPanel.propTypes = {\n toggleFilterPanel: PropTypes.func,\n style: PropTypes.object,\n expandedNodeTypes: ImmutablePropTypes.iterable,\n handleExpand: PropTypes.func,\n hiddenNodes: ImmutablePropTypes.iterable,\n sourceNodes: ImmutablePropTypes.iterable,\n handleHide: PropTypes.func,\n handleShow: PropTypes.func,\n handleUpdate: PropTypes.func,\n data: ImmutablePropTypes.iterable,\n nodes: ImmutablePropTypes.iterable,\n theme: themeShape,\n typeColors: PropTypes.object,\n}\n\nexport default themeable(FilterPanel)\n","/**\n *\n * Explorer\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport Radium from 'radium'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\nimport _ from 'lodash'\nimport qs from 'query-string'\n\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport SplitterLayout from 'components/SplitterLayout'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Transition } from 'react-spring/renderprops.cjs'\nimport BorderedCard from 'components/BorderedCard'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport injectSaga from 'utils/injectSaga'\nimport injectReducer from 'utils/injectReducer'\nimport TableWidget from 'components/TableWidget'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { exists } from 'utils/sonraiUtils'\nimport GraphVis from 'components/GraphVis'\nimport LoadingAnim from 'components/LoadingAnim'\nimport { LAYERS } from 'utils/styleUtils'\nimport { selectQueryTypes } from 'containers/SonraiData/selectors'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport { getAccountFromSrn } from 'utils/sonraiUtils'\nimport ContextMenu from 'components/ContextMenu'\nimport {\n selectSourceNodes,\n selectIsLoading,\n selectNodes,\n selectSelectedNode,\n selectHiddenNodes,\n selectExpandedNodeTypes,\n selectIsLoadingNodes,\n} from './selectors'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport {\n getSourceNode,\n getMultiSourceNodes,\n selectNode,\n clearGraph,\n setRelations,\n setSourceNodes,\n removeNode,\n handleExpand,\n handleHide,\n handleShow,\n loadNodes,\n handleUpdate,\n} from './actions'\nimport NodePreview from './NodePreview'\nimport NodeSearch from './NodeSearch'\nimport { EXPLORER_VIEW_TYPES } from 'appConstants'\nimport { fromJS, List } from 'immutable'\nimport FilterPanel from './FilterPanel'\n\nexport class Explorer extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n viewType: EXPLORER_VIEW_TYPES.EXPLORER,\n terms: [],\n filterActive: true,\n isDragging: false,\n resizing: false,\n }\n\n this.colourStyles = {\n multiValue: styles => ({\n ...styles,\n backgroundColor: props.theme.primary,\n }),\n multiValueLabel: styles => ({\n ...styles,\n color: props.theme.light,\n fontWeight: '400',\n fontSize: '1rem',\n }),\n multiValueRemove: styles => ({\n ...styles,\n color: props.theme.light,\n opacity: 1,\n ':hover': {\n backgroundColor: props.theme.red,\n color: props.theme.light,\n },\n }),\n }\n\n this.styles = {\n container: {\n position: 'relative',\n height: '100%',\n display: 'flex',\n flexDirection: 'row',\n overflow: 'hidden',\n },\n iconContainer: {\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n },\n showTableIcon: {\n position: 'absolute',\n top: '0',\n right: '0',\n backgroundColor: props.theme.light,\n padding: '1em',\n borderRadius: '50%',\n zIndex: LAYERS.TOOLBAR,\n },\n filterPanel: {\n width: '25%',\n margin: '1em 0em 1em 1em',\n },\n searchContainer: {\n position: 'absolute',\n top: '1rem',\n left: '1rem',\n zIndex: LAYERS.TOOLBAR,\n right: '1em',\n },\n iconCenteredContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n graphContainer: {\n height: '100%',\n position: 'relative',\n },\n nodePreviewContainer: {\n position: 'absolute',\n backgroundColor: props.theme.light,\n top: '5rem',\n right: '1.5rem',\n padding: '1rem',\n width: '30%',\n boxShadow: `rgba(176, 176, 176, 0.2) 0px 0px 5px 2.5px`,\n maxHeight: '80%',\n height: '500px',\n },\n tableContainer: { width: '100%', height: '100%', padding: '0.5rem' },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n },\n split: {\n width: '100%',\n height: '100%',\n },\n nodePreviewMessage: {\n top: '5rem',\n boxShadow: `rgba(176, 176, 176, 0.5) 0px 0px 5px 2.5px`,\n borderRadius: '0.2rem',\n right: '2rem',\n color: '#888888',\n position: 'absolute',\n backgroundColor: props.theme.light,\n padding: '1rem',\n },\n }\n }\n\n componentDidMount() {\n if (this.props.data) {\n this.props.loadNodes(this.props.data)\n } else if (this.props.history) {\n const incNodes = _.get(this.props, ['location', 'state', 'nodes'], null)\n const params = qs.parse(this.props.history.location.search)\n if (incNodes) {\n this.props.getMultiSourceNodes({ ids: incNodes.map(n => n.item.srn) })\n } else if (params) {\n this.props.getSourceNode(params)\n }\n }\n\n window.addEventListener('resize', this.updateDimensions)\n }\n\n componentWillUnmount() {\n this.props.clearGraph()\n window.removeEventListener('resize', this.updateDimensions)\n\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer)\n }\n }\n\n updateDimensions = () => {\n this.setState({\n resizing: true,\n })\n\n clearTimeout(this.resizeTimer)\n this.resizeTimer = setTimeout(() => {\n this.setState({\n resizing: false,\n })\n }, 500)\n }\n\n getNodes = () => {\n const nodes = this.props.nodes\n const hiddenNodes = this.props.hiddenNodes\n const nodesToDisplay = nodes\n .toList()\n .toJS()\n .map(node => ({\n item: node,\n }))\n\n if (!hiddenNodes.isEmpty()) {\n return _.uniqBy(nodesToDisplay, node => node.item.srn).filter(node => {\n if (!hiddenNodes.map(x => x.get('srn')).includes(node.item.srn)) {\n return node\n }\n })\n }\n\n return _.uniqBy(nodesToDisplay, node => node.item.srn)\n }\n\n getEdges = () => {\n const allRelations = []\n this.props.nodes\n .filter(node => node.has('relations'))\n .forEach(node => {\n node.get('relations', List()).forEach(relationType => {\n allRelations.push(...relationType.toJS())\n })\n })\n allRelations.push(..._.get(this.props, ['location', 'state', 'edges'], []))\n return _.uniqBy(allRelations, value => {\n const itemId = value.item.srn\n const attachedToId = exists(value.parent)\n ? value.parent\n : this.props.sourceNodes.toJS()[0]\n\n return value.relation.direction === 'OUT'\n ? [itemId, attachedToId].join()\n : [attachedToId, itemId].join()\n })\n }\n\n getLabel = relation => {\n let name = relation.item.srn.split('/')\n let label = `${relation.item.__typename}: ${relation.item.friendlyName ||\n relation.item.name ||\n name[name.length - 1]} `\n return label\n }\n\n handleChange = (newValue, actionMeta) => {\n if (actionMeta.action === 'create-option') {\n const isNewVal = newValue[newValue.length - 1]\n const value = { label: isNewVal.label, value: isNewVal.value }\n const existingSearches =\n JSON.parse(localStorage.getItem('searches')) || []\n const list = [...existingSearches, value]\n if (list.length > 99) {\n list.shift()\n }\n localStorage.setItem('searches', JSON.stringify(list))\n }\n this.setState({ terms: newValue })\n }\n\n handleSelect = event => {\n this.setState({\n context: undefined,\n coords: undefined,\n })\n if (event && event.nodes) {\n if (event.nodes.length === 0) {\n this.setState({\n x: undefined,\n y: undefined,\n })\n this.props.selectNode({ node: null })\n return\n }\n\n const nodeId = event.nodes[0]\n const nodeConfig = this.props.nodes.get(nodeId)\n\n if (!nodeConfig) {\n return\n }\n this.props.selectNode({ node: nodeId })\n }\n }\n\n setTerms = value => {\n this.setState({\n terms: value,\n })\n }\n\n toggleViewType = () => {\n this.setState(prevState => ({\n viewType:\n prevState.viewType == EXPLORER_VIEW_TYPES.EXPLORER\n ? EXPLORER_VIEW_TYPES.TABLE\n : EXPLORER_VIEW_TYPES.EXPLORER,\n }))\n }\n\n onDoubleClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n handleRemoveNode = () => {\n this.setState({\n coords: undefined,\n })\n const { nodes, selectedNode } = this.props\n const node = fromJS(nodes.get(selectedNode))\n if (node) {\n this.props.removeNode(node)\n }\n }\n\n renderContextMenu = () => {\n return (\n \n )\n }\n\n handleContext = (context, coords) => {\n this.props.selectNode({ node: context })\n this.setState({ coords })\n }\n\n handleDoubleClick = () => {\n if (this.state.viewType == EXPLORER_VIEW_TYPES.TABLE) {\n this.setState({ viewType: EXPLORER_VIEW_TYPES.EXPLORER })\n }\n }\n\n isMatch = label => {\n const { terms } = this.state\n if (!_.isEmpty(terms)) {\n const searches = terms.map(term => term.label.toLowerCase())\n\n const values = searches.map(search =>\n label.toLowerCase().includes(search)\n )\n if (!values.includes(true)) {\n return true\n }\n }\n }\n\n getTableWidgetData = () => {\n const nodes = !_.isEmpty(this.state.terms)\n ? _.uniqBy(Object.values(this.props.nodes.toJS()), val => val.srn).filter(\n node => {\n const name = node.srn.split('/')\n const label = `${node.__typename}: ${node.friendlyName ||\n node.name ||\n name[name.length - 1]} `\n return !this.isMatch(label)\n }\n )\n : _.uniqBy(Object.values(this.props.nodes.toJS()), val => val.srn)\n return nodes.map(x => ({\n srn: x.srn,\n label: x.label,\n type: x.type || x.__typename,\n name: x.name,\n account: getAccountFromSrn(x.srn),\n }))\n }\n\n handleExpand = selected => {\n const arrOfExpandableNodeTypes = selected.map(typename => ({\n listOfSrnsToExpand: this.props.nodes\n .map(node =>\n fromJS({\n srn: node.get('srn'),\n __typename: node.get('__typename'),\n })\n )\n .toList()\n .filter(node => node.get('__typename') === typename)\n .map(node => node.get('srn'))\n .toJS(),\n typename,\n }))\n\n if (!_.isEmpty(arrOfExpandableNodeTypes)) {\n this.props.handleExpand(arrOfExpandableNodeTypes)\n }\n }\n\n handleHide = typename => {\n const listOfSrnsToHide = this.props.nodes\n .map(node =>\n fromJS({\n srn: node.get('srn'),\n __typename: node.get('__typename'),\n })\n )\n .toList()\n .filter(node => node.get('__typename') == typename)\n .map(node => node.get('srn'))\n if (!listOfSrnsToHide.isEmpty()) {\n this.props.handleHide({ listOfSrnsToHide, typename })\n }\n }\n\n handleShow = typename => {\n this.props.handleShow(typename)\n }\n\n getEntityTypes = () =>\n fromJS(\n _.uniq(\n this.props.nodes\n .map(node => node.get('__typename'))\n .toList()\n .toJS()\n )\n )\n\n renderGraph = () => {\n if (\n this.state.isDragging ||\n this.state.resizing ||\n this.props.isLoadingNodes\n ) {\n return (\n
\n \n
\n )\n }\n\n return (\n
\n \n \n\n {this.state.coords &&\n exists(this.props.selectedNode) &&\n !this.props.sourceNodes.includes(this.props.selectedNode) &&\n this.renderContextMenu()}\n\n {exists(this.props.selectedNode) &&\n this.state.viewType !== EXPLORER_VIEW_TYPES.TABLE && (\n
\n \n
\n )}\n\n \n {item =>\n item &&\n (styles => (\n \n Node Previews are disabled in split view.\n
\n ))\n }\n \n\n \n\n {this.state.viewType === EXPLORER_VIEW_TYPES.EXPLORER && (\n
\n \n \n   Show Table\n \n
\n )}\n \n \n )\n }\n\n toggleFilterPanel = () => {\n this.setState(oldState => ({ filterActive: !oldState.filterActive }))\n this.updateDimensions()\n }\n\n renderTable = () => {\n return (\n
\n \n \n\n
\n \n \n \n
\n
\n
\n )\n }\n\n render() {\n if (this.props.isLoading || this.props.queryTypes.isEmpty()) {\n return \n }\n\n const entityTypes = this.getEntityTypes() || List()\n return (\n
\n {this.state.filterActive && (\n \n )}\n\n
\n this.setState({ isDragging: true })}\n onDragEnd={() => this.setState({ isDragging: false })}\n >\n {this.renderGraph()}\n\n {this.state.viewType === EXPLORER_VIEW_TYPES.TABLE &&\n this.renderTable()}\n \n
\n
\n )\n }\n}\n\nExplorer.propTypes = {\n theme: themeShape,\n isLoading: PropTypes.bool,\n sourceNodes: PropTypes.object,\n nodes: PropTypes.object,\n getSourceNode: PropTypes.func,\n getMultiSourceNodes: PropTypes.func,\n history: PropTypes.object,\n clearGraph: PropTypes.func,\n selectNode: PropTypes.func,\n selectedNode: PropTypes.string,\n data: PropTypes.object,\n push: PropTypes.func,\n loadNodes: PropTypes.func,\n queryTypes: ImmutablePropTypes.iterable,\n removeNode: PropTypes.func,\n handleExpand: PropTypes.func,\n expandedNodeTypes: ImmutablePropTypes.iterable,\n hiddenNodes: ImmutablePropTypes.iterable,\n handleHide: PropTypes.func,\n handleShow: PropTypes.func,\n isLoadingNodes: PropTypes.bool,\n handleUpdate: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n sourceNodes: selectSourceNodes,\n isLoading: selectIsLoading,\n nodes: selectNodes,\n selectedNode: selectSelectedNode,\n queryTypes: selectQueryTypes,\n hiddenNodes: selectHiddenNodes,\n expandedNodeTypes: selectExpandedNodeTypes,\n isLoadingNodes: selectIsLoadingNodes,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n setRelations,\n setSourceNodes,\n getSourceNode,\n getMultiSourceNodes,\n selectNode,\n clearGraph,\n removeNode,\n handleExpand,\n handleHide,\n handleShow,\n push,\n loadNodes,\n handleUpdate,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\nconst withReducer = injectReducer({ key: 'explorer', reducer })\nconst withSaga = injectSaga({ key: 'explorer', saga: sagas })\n\nexport default compose(\n withReducer,\n withConnect,\n withSaga,\n themeable,\n Radium\n)(Explorer)\n","import _ from 'lodash'\nimport color from 'color'\n\nimport { getAlertLevelColorHML } from 'utils/widgetUtils'\nimport {\n colorForString as colorForStringLib,\n colorForEntityString,\n exists,\n} from 'utils/sonraiUtils'\nimport { SEVERITY_CATEGORIES } from 'appConstants'\n\nconst ALERT_TYPES = {\n POLICY: 'Policy',\n CRM: 'CRM',\n FRAMEWORK: 'Framework',\n ACCESS: 'Access',\n PROPERTY: 'Property',\n ACTIVITY: 'Activity',\n}\n\nconst formatMap = map => {\n Object.keys(map).forEach(\n key =>\n (!exists(map[key]) || key === 'null' || key === 'undefined') &&\n delete map[key]\n )\n return map\n}\n\nexport const sliceBySeverity = (tickets, options) => {\n const groupingMap = formatMap(\n _.groupBy(tickets, ticket => ticket.severityCategory)\n )\n return _.keys(groupingMap).map(key => {\n const childrenValues = groupingMap[key]\n\n return {\n name: getTitleForSeverity(key),\n hex: getAlertLevelColorHML(key),\n children: groupByTicketType(childrenValues, {\n ...options,\n severity: key,\n }),\n keyName: 'severityCategory',\n keyValue: key,\n value: childrenValues.reduce((sum, ticket) => (sum += ticket.count), 0),\n }\n })\n}\n\nconst groupByTicketType = (tickets, options) => {\n const groupingMap = formatMap(_.groupBy(tickets, ticket => ticket.ticketType))\n\n return _.keys(groupingMap).map(ticketType => {\n const childrenValues = groupingMap[ticketType]\n\n return {\n name: getTitleForAlertType(ticketType),\n hex: getColorForAlertType(ticketType),\n children: groupByTicketKey(childrenValues, options),\n value: childrenValues.reduce((sum, alert) => (sum += alert.count), 0),\n keyName: 'ticketType',\n keyValue: ticketType,\n }\n })\n}\n\nconst groupByTicketKey = (tickets, options) => {\n const groupingMap = formatMap(_.groupBy(tickets, ticket => ticket.ticketKey))\n\n return _.keys(groupingMap).map(ticketKey => {\n const childrenValues = groupingMap[ticketKey]\n const sample = childrenValues[0]\n\n let name = ticketKey\n const { controlPolicies, controlGroups } = options\n if (controlPolicies && controlGroups) {\n name =\n controlGroups.getIn([ticketKey, 'title']) ||\n controlPolicies.getIn([ticketKey, 'title']) ||\n ticketKey\n }\n\n const sliceColor = colorForStringLib(name)\n return {\n name,\n hex: options.colorBySeverity\n ? shiftColorForSeverity(sliceColor, options.severity)\n : sliceColor,\n children: groupByLabel(childrenValues, options),\n value: childrenValues.reduce((sum, alert) => (sum += alert.count), 0),\n keyName:\n sample.ticketType === 'Framework' && sample.ticketKey.startsWith('srn')\n ? 'controlFrameworkId'\n : 'ticketKey',\n keyValue: ticketKey,\n }\n })\n}\n\nconst groupByLabel = (alerts, options) => {\n const groupingMap = formatMap(_.groupBy(alerts, alert => alert.resourceLabel))\n\n return _.keys(groupingMap).map(keyName => {\n const childrenValues = groupingMap[keyName]\n\n return {\n name: keyName,\n hex: colorForEntityString(keyName, options.typeColors),\n children: groupBySwimlane(childrenValues, options),\n value: childrenValues.reduce((sum, alert) => (sum += alert.count), 0),\n keyName: 'resourceLabel',\n keyValue: keyName,\n }\n })\n}\n\nconst groupBySwimlane = (alerts, options) => {\n const groupingMap = formatMap(\n _.groupBy(alerts, alert => {\n return _.first(alert.swimlaneSrns)\n })\n )\n\n return _.keys(groupingMap).map(key => {\n const childrenValues = groupingMap[key]\n return {\n name: options.swimlanes.getIn([key, 'title']),\n hex: colorForStringLib(key),\n keyName: 'swimlaneSrns',\n keyValue: key,\n value: childrenValues.reduce((sum, alert) => (sum += alert.count), 0),\n }\n })\n}\n\nconst shiftColorForSeverity = (originalColor, HMLSeverity) => {\n const baseColor = color(getAlertLevelColorHML(HMLSeverity))\n const baseHue = baseColor.hue()\n\n return color(originalColor).hue(baseHue).hex()\n}\n\nconst getColorForAlertType = type => {\n switch (type) {\n case ALERT_TYPES.POLICY:\n case ALERT_TYPES.FRAMEWORK:\n return '#231E36'\n case ALERT_TYPES.CRM:\n case ALERT_TYPES.ACCESS:\n case ALERT_TYPES.PROPERTY:\n case ALERT_TYPES.ACTIVITY:\n return '#806bd6'\n default:\n return colorForStringLib(type)\n }\n}\n\nconst getTitleForAlertType = type => {\n switch (type) {\n case ALERT_TYPES.POLICY:\n case ALERT_TYPES.FRAMEWORK:\n return 'Control Framework'\n case ALERT_TYPES.CRM:\n case ALERT_TYPES.ACCESS:\n case ALERT_TYPES.PROPERTY:\n case ALERT_TYPES.ACTIVITY:\n return 'Critical Resource Monitor'\n default:\n return type\n }\n}\n\nexport const getTitleForSeverity = severity => {\n switch (severity) {\n case SEVERITY_CATEGORIES.HIGH:\n return 'High Severity'\n case SEVERITY_CATEGORIES.MEDIUM:\n return 'Medium Severity'\n case SEVERITY_CATEGORIES.LOW:\n return 'Low Severity'\n default:\n return severity\n }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ContainerDimensions from 'react-container-dimensions'\nimport EmptyWidgetResults from 'components/EmptyWidgetResults'\nimport ApexChart from 'react-apexcharts'\n\nimport Scrollable from 'components/Scrollable'\nimport BorderlessButton from 'components/BorderlessButton'\nimport ChartLegendEntry from 'components/ChartLegendEntry'\n\nexport class SunburstPieChart extends React.Component {\n styles = {\n container: {\n height: '100%',\n width: '100%',\n },\n title: {\n fontWeight: 400,\n marginBottom: '0.5em',\n },\n }\n\n onHoverLegend = e => {\n let series = this.apexChartInstance.series\n series.toggleSeriesOnHover(e, e.target)\n }\n\n getOptions = width => {\n return {\n width: width,\n height: width,\n grid: {\n padding: {\n top: 0,\n right: -5,\n bottom: -5,\n left: -5,\n },\n },\n chart: {\n offsetY: 0,\n toolbar: {\n show: false,\n },\n animations: {\n enabled: true,\n },\n events: {\n beforeMount: apexChartInstance => {\n this.apexChartInstance = apexChartInstance\n },\n dataPointSelection: (e, chart, options) => {\n if (\n (this.props.onClickPoint &&\n this.props.yLabels[options.dataPointIndex] !== 'null') ||\n this.props.yLabels[options.dataPointIndex] !== '-'\n ) {\n this.props.onClickPoint({\n values: this.props.yValues,\n labels: this.props.yLabels,\n displayLabels: this.props.yValueDisplayLabels,\n index: options.dataPointIndex,\n sectionTitle: this.props.title,\n })\n }\n },\n },\n },\n dataLabels: {\n enabled: false,\n },\n xaxis: {\n categories: this.props.yValueDisplayLabels || this.props.yLabels || [],\n },\n colors: this.props.colors,\n labels: this.props.yValueDisplayLabels || this.props.yLabels || [],\n legend: {\n show: false,\n },\n states: {\n active: {\n filter: 'lighten',\n },\n },\n }\n }\n renderScrollableLegend = height => {\n return (\n \n
{this.props.title}
\n
\n {(this.props.yValueDisplayLabels || this.props.yLabels || []).map(\n (label, index) => (\n {\n this.props.onClickPoint({\n values: this.props.yValues,\n labels: this.props.yLabels,\n displayLabels: this.props.yValueDisplayLabels,\n index: index,\n sectionTitle: this.props.title,\n })\n }}\n >\n \n \n )\n )}\n
\n \n )\n }\n render() {\n //Note: Using height as the width on the pie charts so that their boundries are always square and aligned left\n //This gives more room for the legend\n return (\n
\n \n {({ height }) => (\n \n
\n {this.props.yValues.length === 0 ? (\n \n ) : (\n \n )}\n
\n
\n {this.renderScrollableLegend(height)}\n
\n
\n )}\n \n \n )\n }\n}\n\nSunburstPieChart.propTypes = {\n yLabels: PropTypes.arrayOf(PropTypes.string),\n yValues: PropTypes.arrayOf(PropTypes.number),\n yValueDisplayLabels: PropTypes.arrayOf(PropTypes.string),\n onClickPoint: PropTypes.func,\n colors: PropTypes.array,\n title: PropTypes.node,\n}\n\nexport default SunburstPieChart\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { Set, fromJS } from 'immutable'\n\nimport { getTitleForSeverity } from 'containers/RapSheet/processData.js'\nimport { getAlertLevelColorHML } from 'utils/widgetUtils'\nimport themeable from 'containers/ThemeManager/Themeable'\nimport { colorForString, colorForEntityString } from 'utils/sonraiUtils'\nimport SunburstPieChart from './SunburstPieChart'\nclass SunburstMultiView extends Component {\n //TODO: move this logic to another component in Rapsheet to keep components/SunburstVis more generic\n styles = {\n container: {\n gridArea: 'sunburst',\n paddingRight: '0.5em',\n marginRight: '0.5em',\n height: '100%',\n display: 'grid',\n gridTemplateColumns: '1fr 1fr 1fr',\n gridTemplateRows: '1fr 1fr',\n gridRowGap: '0.5em',\n gridTemplateAreas:\n '\"severitychart typechart swimlanechart\" \"catchart namechart .\"',\n },\n }\n\n dedupeDataBySwimlane = () => {\n const noSwimlane = fromJS(this.props.data).map(alertLog =>\n alertLog.delete('swimlaneSRNs').delete('swimlaneSrn')\n )\n\n return new Set(noSwimlane).toList().toJS()\n }\n\n getAlertCounts = (data, property) => {\n const groupMap = _.groupBy(data, property)\n const keys = _.keys(groupMap)\n const countMap = {}\n keys.forEach(key => {\n countMap[key] = groupMap[key].reduce(\n (sum, alert) => (sum += alert.count),\n 0\n )\n })\n\n return countMap\n }\n\n getSeverityPieChartData = data => {\n const countMap = this.getAlertCounts(data, 'severityCategory')\n const keys = _.keys(countMap)\n\n const sortedKeys = _.orderBy(keys, key => countMap[key], 'desc')\n\n let colors = []\n let slices = []\n let labels = []\n let displayLabels = []\n\n sortedKeys.forEach(key => {\n colors.push(getAlertLevelColorHML(key))\n slices.push(countMap[key])\n labels.push(key)\n displayLabels.push(getTitleForSeverity(key))\n })\n\n return { labels, slices, colors, displayLabels }\n }\n\n getResourceLabelPieChartData = data => {\n const countMap = this.getAlertCounts(data, 'resourceLabel')\n const keys = _.keys(countMap)\n const sortedKeys = _.orderBy(keys, key => countMap[key], 'desc')\n\n let colors = []\n let slices = []\n let labels = []\n\n sortedKeys.forEach(key => {\n colors.push(colorForEntityString(key, this.props.typeColors))\n slices.push(countMap[key])\n labels.push(key)\n })\n\n return { labels, slices, colors }\n }\n\n getTicketTypePieChartData = data => {\n const nameMap = {}\n const groupMap = _.groupBy(data, alert => {\n if (alert.ticketType === 'Policy') {\n const controlFrameworkId = this.props.policies.getIn([\n alert.ticketKey,\n 'containedByControlFramework',\n 'items',\n 0,\n 'srn',\n ])\n\n const controlFrameworkName = this.props.controlFrameworks.getIn([\n controlFrameworkId,\n 'title',\n ])\n if (controlFrameworkName) {\n nameMap[controlFrameworkId] = controlFrameworkName\n return controlFrameworkId\n }\n }\n\n return alert.ticketType\n })\n\n const keys = _.keys(groupMap)\n const countMap = {}\n keys.forEach(key => {\n countMap[key] = groupMap[key].reduce(\n (sum, alert) => (sum += alert.count),\n 0\n )\n })\n\n const sortedKeys = _.orderBy(keys, key => countMap[key], 'desc')\n\n let colors = []\n let slices = []\n let labels = []\n let displayLabels = []\n\n sortedKeys.forEach(key => {\n colors.push(colorForString(key))\n slices.push(countMap[key])\n labels.push(key)\n displayLabels.push(nameMap[key] || key)\n })\n\n return { labels, slices, colors, displayLabels }\n }\n\n getKeyNamePieChartData = data => {\n const nameMap = {}\n\n const countMap = this.getAlertCounts(data, entry => {\n if (entry.ticketType === 'Policy') {\n nameMap[entry.ticketKey] = this.props.policies.getIn(\n [entry.ticketKey, 'title'],\n entry.ticketKey\n )\n }\n\n return entry.ticketKey\n })\n const keys = _.keys(countMap)\n const sortedKeys = _.orderBy(keys, key => countMap[key], 'desc')\n\n let colors = []\n let slices = []\n let labels = []\n let displayLabels = []\n\n sortedKeys.forEach(key => {\n colors.push(colorForString(key))\n slices.push(countMap[key])\n labels.push(key)\n displayLabels.push(nameMap[key] || key)\n })\n\n return { labels, slices, colors, displayLabels }\n }\n\n getSwimlanePieChartData = data => {\n const groupMap = _.groupBy(\n data.flatMap(ticket => {\n return ticket.swimlaneSrns.map(swimlaneSrn => {\n return { ...ticket, swimlaneSrn }\n })\n }),\n alert => alert.swimlaneSrn\n )\n const keys = _.keys(groupMap)\n const countMap = {}\n keys.forEach(key => {\n countMap[key] = groupMap[key].reduce(\n (sum, alert) => (sum += alert.count),\n 0\n )\n })\n\n const sortedKeys = _.orderBy(keys, key => countMap[key], 'desc')\n\n let colors = []\n let slices = []\n let labels = []\n let displayLabels = []\n\n sortedKeys.forEach(key => {\n colors.push(colorForString(key))\n slices.push(countMap[key])\n labels.push(key)\n displayLabels.push(this.props.swimlanes.getIn([key, 'title']) || 'ALL')\n })\n return { labels, slices, colors, displayLabels }\n }\n\n handleClick = (\n { index, labels, values, displayLabels, sectionTitle },\n key\n ) => {\n const label = _.get(labels, index)\n const value = _.get(values, index)\n const displayLabel = _.get(displayLabels, index) || label\n\n this.props.onClickSlice({\n key,\n label,\n displayLabel,\n value,\n index,\n sectionTitle,\n })\n }\n\n render() {\n const swimlanePieChartData = this.getSwimlanePieChartData(this.props.data)\n\n const deduped = this.dedupeDataBySwimlane()\n const severityPieChartData = this.getSeverityPieChartData(deduped)\n const resourceLabelPieChartData = this.getResourceLabelPieChartData(deduped)\n const ticketTypePieChartData = this.getTicketTypePieChartData(deduped)\n const keyNamePieChartData = this.getKeyNamePieChartData(deduped)\n\n return (\n
\n \n \n this.handleClick(params, 'severityCategory')\n }\n yValues={severityPieChartData.slices}\n yLabels={severityPieChartData.labels}\n yValueDisplayLabels={severityPieChartData.displayLabels}\n colors={severityPieChartData.colors}\n title=\"Severity Category\"\n />\n
\n \n this.handleClick(params, 'resourceLabel')}\n yValues={resourceLabelPieChartData.slices}\n yLabels={resourceLabelPieChartData.labels}\n colors={resourceLabelPieChartData.colors}\n title=\"Resource Label\"\n />\n \n \n this.handleClick(params, 'ticketKey')}\n yValues={ticketTypePieChartData.slices}\n yValueDisplayLabels={ticketTypePieChartData.displayLabels}\n yLabels={ticketTypePieChartData.labels}\n colors={ticketTypePieChartData.colors}\n title=\"Ticket Type\"\n />\n \n \n this.handleClick(params, 'ticketKey')}\n yValues={keyNamePieChartData.slices}\n yValueDisplayLabels={keyNamePieChartData.displayLabels}\n yLabels={keyNamePieChartData.labels}\n colors={keyNamePieChartData.colors}\n title=\"Policy or Activity Type\"\n />\n \n \n this.handleClick(params, 'swimlane')}\n yValues={swimlanePieChartData.slices}\n yLabels={swimlanePieChartData.labels}\n yValueDisplayLabels={swimlanePieChartData.displayLabels}\n colors={swimlanePieChartData.colors}\n title=\"Swimlanes\"\n />\n \n \n )\n }\n}\n\nSunburstMultiView.propTypes = {\n data: PropTypes.array.isRequired,\n onClickSlice: PropTypes.func.isRequired,\n typeColors: PropTypes.object,\n swimlanes: ImmutablePropTypes.map.isRequired,\n policies: ImmutablePropTypes.map.isRequired,\n controlFrameworks: ImmutablePropTypes.map.isRequired,\n}\n\nexport default themeable(SunburstMultiView)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\nimport color from 'color'\n\nconst HEIGHT = 30\n\nconst Breadcrumb = styled.div`\n list-style-type: none;\n background-color: ${props =>\n color(props.color)\n .lighten(0.1)\n .hex()};\n display: inline-block;\n line-height: ${HEIGHT}px;\n position: relative;\n height: ${HEIGHT}px;\n vertical-align: middle;\n padding-left: ${HEIGHT}px;\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n color: ${props => (color(props.color).isLight() ? '#000' : '#fff')}\n font-weight: 400;\n cursor: ${props => (props.onClick ? 'pointer' : 'default')}\n transition: background-color 0.3s ease;\n &:first-child {\n padding-left: 0.5em;\n }\n &:hover {\n background-color: ${props => props.color};\n }\n ::after {\n /* arrow */\n content: '';\n display: inline-block;\n width: 0;\n height: 0;\n border-top: ${HEIGHT / 2}px solid transparent;\n border-bottom: ${HEIGHT / 2}px solid transparent;\n border-left: ${HEIGHT / 2}px solid ${props =>\n color(props.color)\n .lighten(0.1)\n .hex()};\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n position: absolute;\n z-index: 1;\n transition: border-left 0.3s ease;\n }\n &:hover:after {\n border-left: ${HEIGHT / 2}px solid ${props => props.color}\n }\n ::before {\n /*small line between arrows */\n content: '';\n width: ${Math.sqrt((HEIGHT * HEIGHT) / 2) + 5}px;\n height: ${Math.sqrt((HEIGHT * HEIGHT) / 2) + 5}px;\n background: transparent;\n position: absolute;\n transform: rotate(45deg);\n transform-origin: top right;\n top: ${HEIGHT / 2}px;\n margin: 0;\n right: -${HEIGHT / 2 + 2}px;\n border-right: #fff solid 3px;\n border-top: #fff solid 3px;\n z-index: 2;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n }\n`\n\nconst SunburstBreadcrumb = ({ children, color, onClick }) => {\n return (\n \n {children}\n
\n \n )\n}\n\nSunburstBreadcrumb.defaultProps = {\n color: '#eee',\n}\n\nSunburstBreadcrumb.propTypes = {\n children: PropTypes.node,\n color: PropTypes.string,\n onClick: PropTypes.func,\n}\n\nexport default SunburstBreadcrumb\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\n\nimport BorderlessButton from 'components/BorderlessButton'\nimport TextLink from 'components/TextLink'\nimport ChartLegendEntry from 'components/ChartLegendEntry'\n\nexport class SunburstLegend extends React.Component {\n onClickLegend = legendEntry => {\n //Switch filters to only allow one at a time for now\n //Because we were getting weird behaviour in the list of alerts on solution center when there were multiple filters selected\n //TODO: Fix using multiple filters, especially on the same property\n let filters = this.props.legendFilters\n if (\n filters.find(\n filter =>\n filter.keyName === legendEntry.keyName &&\n filter.keyValue === legendEntry.keyValue\n )\n ) {\n //Clicked an already-selected filter so we want to remove it from the list\n filters = filters.filter(\n filter =>\n !(\n filter.keyName === legendEntry.keyName &&\n filter.keyValue === legendEntry.keyValue\n )\n )\n } else {\n //Add the filter to the filter list\n filters = [\n {\n keyName: legendEntry.keyName,\n keyValue: legendEntry.keyValue,\n },\n ]\n }\n\n this.props.onClickLegend(filters)\n }\n\n onReset = () => {\n this.props.onClickLegend([])\n }\n\n getLegendItems = () => {\n const getLegend = (node, items, depth) => {\n const key = node.keyName ? `${node.keyName}${node.keyValue}` : node.name\n if (items[key]) {\n items[key].count += node.value\n } else if (node.name) {\n items[key] = {\n title: node.name,\n color: node.hex,\n count: node.value,\n keyName: node.keyName,\n keyValue: node.keyValue,\n depth: depth,\n }\n }\n\n if (node.children) {\n node.children.forEach(child => getLegend(child, items, depth + 1))\n }\n\n return items\n }\n\n const uniqueItems = _.sortBy(\n Object.values(\n getLegend({ children: this.props.formattedData.children }, {}, 0)\n ), //Skip the first root node\n item => item.depth\n )\n\n const legendItems = uniqueItems.map((item, index) => {\n const previousVal = index !== 0 ? uniqueItems[index - 1] : {}\n const hasNewDepth = index !== 0 && previousVal.depth !== item.depth\n const { isSunburstViewMulti } = this.props\n\n const wrapperStyle = {\n display: 'block',\n }\n\n if (hasNewDepth) {\n wrapperStyle.borderTop = '1px solid #ccc'\n wrapperStyle.paddingTop = '10px'\n wrapperStyle.marginTop = '5px'\n }\n\n if (this.props.legendFilters.length > 0) {\n const matchesFilter = this.props.legendFilters.find(\n filter =>\n item.keyName === filter.keyName && item.keyValue === filter.keyValue\n )\n\n if (matchesFilter) {\n wrapperStyle.color = '#222'\n } else {\n wrapperStyle.color = '#aaa'\n }\n }\n\n const key = item.keyName ? `${item.keyName}${item.keyValue}` : item.title\n\n const styledTitle = (\n this.onClickLegend(item)}\n >\n \n \n )\n\n return styledTitle\n })\n\n return legendItems\n }\n\n render() {\n return (\n \n {this.props.legendFilters.length === 0 ? (\n  \n ) : (\n \n Clear Selection\n \n )}\n \n {this.getLegendItems()}\n
\n \n )\n }\n}\nSunburstLegend.propTypes = {\n formattedData: PropTypes.object,\n onClickLegend: PropTypes.func,\n legendFilters: PropTypes.array.isRequired,\n isSunburstViewMulti: PropTypes.bool,\n}\n\nexport default SunburstLegend\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Sunburst, Hint } from 'react-vis'\nimport _ from 'lodash'\nimport color from 'color'\nimport SunburstMultiView from './SunburstMultiView'\nimport Scrollable from 'components/Scrollable'\nimport EmptyWidgetResults from 'components/EmptyWidgetResults'\nimport sizeMe from 'components/SizeMe'\nimport BounceLoadingAnimation from 'components/BounceLoadingAnimation'\nimport ChartTooltip from 'components/ChartTooltip'\nimport BorderlessButton from 'components/BorderlessButton'\nimport SunburstBreadcrumb from './SunburstBreadcrumb'\nimport Pill from 'components/Badge/Pill'\nimport './styles.css'\nimport SunburstLegend from './SunburstLegend'\n\nconst BREADCRUMBS_HEIGHT = 80\nconst LEGEND_WIDTH = 400\nexport class SunburstVis extends React.Component {\n constructor(props) {\n super(props)\n\n const originalData = this.updateData(props.dataFormatter(props.data), false)\n\n this.originalData = originalData\n const preFiltered = this.getPreselectedPath(originalData)\n let selectedSlice =\n preFiltered.length > 0\n ? preFiltered[preFiltered.length - 1]\n : originalData\n\n if (\n preFiltered.length > 1 &&\n (!selectedSlice.children || selectedSlice.children.length === 0)\n ) {\n selectedSlice = { children: [selectedSlice] }\n }\n\n this.state = {\n clickedPath: preFiltered,\n hoverPath: [],\n hoveredNode: null,\n hoveredTooltip: null,\n data: selectedSlice,\n legendFilters: [],\n pieBreadcrumbs: {},\n }\n }\n\n componentDidUpdate(oldProps) {\n if (!_.isEqual(oldProps.data, this.props.data)) {\n this.originalData = this.updateData(\n this.props.dataFormatter(this.props.data),\n false\n )\n\n const preFiltered = this.getPreselectedPath(this.originalData)\n\n let selectedSlice =\n preFiltered.length > 0\n ? preFiltered[preFiltered.length - 1]\n : this.originalData\n\n if (\n preFiltered.length > 1 &&\n (!selectedSlice.children || selectedSlice.children.length === 0)\n ) {\n selectedSlice = { children: [selectedSlice] }\n }\n\n this.setState({\n clickedPath: preFiltered,\n hoverPath: [],\n data: selectedSlice,\n legendFilters: [],\n })\n }\n\n if (oldProps.isSunburstViewMulti !== this.props.isSunburstViewMulti) {\n this.reset()\n }\n }\n\n getFilteredData = data => {\n if (this.state.legendFilters.length === 0) {\n return data\n } else {\n const filteredData = data.filter(\n rollup =>\n !!this.state.legendFilters.find(\n filter => rollup[filter.keyName] === filter.keyValue\n )\n )\n\n return filteredData\n }\n }\n\n updateData = (data, keyPath) => {\n if (!data.id) {\n data.id = `${data.name}${data.keyName}${data.keyValue}`\n }\n\n if (data.children) {\n data.children.map(child => this.updateData(child, keyPath))\n }\n\n data.style = {\n ...data.style,\n fillOpacity: keyPath && !keyPath[data.id] ? 0.2 : 1,\n }\n\n return data\n }\n\n getHoverKeyPath = node => {\n if (!node.parent) {\n return []\n }\n\n return [\n {\n id: (node.data && node.data.id) || node.id,\n name: (node.data && node.data.name) || node.name,\n hex: (node.data && node.data.hex) || node.hex,\n keyName: (node.data && node.data.keyName) || node.keyName,\n keyValue: (node.data && node.data.keyValue) || node.keyValue,\n },\n ].concat(this.getHoverKeyPath(node.parent))\n }\n\n reset = () => {\n this.setState({\n data: this.updateData(this.originalData),\n clickedPath: [],\n hoverPath: [],\n hoveredNode: null,\n })\n\n if (this.props.onClickSlice) {\n const root = { ...this.originalData }\n delete root.children\n\n this.props.onClickSlice({\n path: [root],\n node: root,\n })\n }\n }\n\n handleClick = clickedSlice => {\n const slicePath = this.findSlicePath(clickedSlice.id, [this.originalData])\n\n if (!slicePath) {\n return\n }\n\n if (slicePath && slicePath.length > 1) {\n slicePath.shift() //remove the fake \"all/root\" node from the array\n }\n\n const isOuterRing =\n !clickedSlice.children || clickedSlice.children.length === 0\n\n const visData = isOuterRing\n ? { children: [slicePath[slicePath.length - 1]] }\n : slicePath[slicePath.length - 1]\n\n this.setState({\n clickedPath: slicePath,\n hoverPath: [],\n data: this.updateData(visData, false),\n legendFilters: [], //TODO: make clicking breadcrumbs play nice with legend filtering\n })\n\n if (this.props.onClickSlice) {\n this.props.onClickSlice({\n path: slicePath,\n node: visData,\n })\n }\n }\n\n findSlicePath = (sliceId, items) => {\n for (let i = 0; i < items.length; i++) {\n const slice = items[i]\n if (slice.id === sliceId) {\n return [slice]\n } else if (_.isArray(slice.children)) {\n const found = this.findSlicePath(sliceId, slice.children)\n\n if (found) {\n found.unshift(slice)\n return found\n }\n }\n }\n }\n\n showingOutermostValue = () => {\n return (\n this.state.data.children.length === 1 &&\n !this.state.data.children[0].children\n )\n }\n\n onHover = node => {\n this.setState({\n hoveredNode: node,\n })\n\n if (this.showingOutermostValue()) {\n return\n }\n\n const path = this.getHoverKeyPath(node).reverse()\n const pathAsMap = path.reduce((res, row) => {\n res[row.id] = true\n return res\n }, {})\n\n this.setState(currentState => ({\n hoverPath: path,\n data: this.updateData(currentState.data, pathAsMap),\n hoveredNode: node,\n }))\n }\n\n onHoverLeave = () => {\n this.setState(currentState => ({\n hoverPath: [],\n data: this.updateData(currentState.data, false),\n hoveredNode: null,\n hoveredTooltip: null,\n }))\n }\n\n onTooltipHover = node => {\n this.setState({\n hoveredTooltip: node,\n })\n }\n\n onTooltipEndHover = () => {\n this.setState(currentState => ({\n hoverPath: [],\n data: this.updateData(currentState.data, false),\n hoveredNode: null,\n }))\n }\n\n getPreselectedPath = startingData => {\n if (!this.props.preFilters || this.props.preFilters.isEmpty()) {\n return []\n }\n\n let foundRepeatedValue = false\n let usedKeys = {}\n\n const checkChildren = (data, filters) => {\n if (foundRepeatedValue) return []\n\n let path = []\n if (data.keyName && data.keyValue && filters.get(data.keyName)) {\n if (filters.get(data.keyName) === data.keyValue) {\n if (usedKeys[data.keyName]) {\n foundRepeatedValue = true\n return []\n }\n\n path.push(data)\n usedKeys[data.keyName] = true\n }\n\n if (filters.get(data.keyName) !== data.keyValue) {\n return []\n }\n }\n\n if (data.children) {\n data.children.forEach(child => {\n const childResult = checkChildren(child, filters)\n if (childResult.length > 0) {\n //One of the children have a match!\n if (data.keyName && data.keyValue && filters.get(data.keyName)) {\n //If there is a filter applicable for this particular slice\n //we only want to use the child paths if the current slice matches the filters\n if (filters.get(data.keyName) === data.keyValue) {\n if (path.length === 0) {\n path.push(data)\n }\n\n path = path.concat(childResult)\n }\n } else {\n if (path.length === 0) {\n path.push(data)\n }\n\n path = path.concat(childResult)\n }\n }\n })\n }\n\n return path\n }\n\n const finalPath = checkChildren(startingData, this.props.preFilters)\n\n if (foundRepeatedValue) {\n //In the case that matching filters are found in multiple approaches, do no preselection\n return []\n }\n\n if (finalPath.length > 0 && !finalPath[0].name) {\n //remove the \"root\" node\n finalPath.shift()\n }\n\n return finalPath\n }\n\n buildValue = hoveredCell => {\n const { radius, angle, angle0 } = hoveredCell\n const truedAngle = (angle + angle0) / 2\n\n const defaultLocation = {\n x: radius * Math.cos(truedAngle),\n y: radius * Math.sin(truedAngle),\n }\n\n if (this.state.hoveredTooltip) {\n defaultLocation.x = defaultLocation.x * -1\n defaultLocation.y = defaultLocation.y * -1\n }\n\n return defaultLocation\n }\n\n renderBreadcrumb = slice => {\n return (\n this.handleClick(slice)}\n color={slice.hex}\n >\n {slice.name}\n \n )\n }\n\n renderHoverBreadcrumb = slice => {\n const colorContrastToWhite = color(slice.hex).contrast(color('#fff'))\n return (\n \n >{' '}\n \n {slice.name}\n \n \n )\n }\n\n renderBreadcrumbs = () => {\n return (\n \n {this.props.isSunburstViewMulti\n ? this.renderMultiviewBreadcrumbs()\n : this.renderSunburstBreadcrumbs()}\n \n this.props.toggleSunburstView()}\n >\n {this.props.isSunburstViewMulti\n ? 'See Combined View'\n : 'See Multi View'}\n \n \n \n )\n }\n\n renderSunburstBreadcrumbs = () => {\n return (\n \n \n
\n \n All\n \n {this.state.clickedPath.map(this.renderBreadcrumb)}\n
\n\n
\n {this.state.hoverPath.map(this.renderHoverBreadcrumb)}\n
\n \n
\n )\n }\n\n renderMultiviewBreadcrumbs = () => {\n return (\n \n {_.keys(this.state.pieBreadcrumbs || {}).map(key => (\n {`${_.startCase(\n key\n )}: ${this.state.pieBreadcrumbs[key]}`}\n ))}\n\n {!_.isEmpty(this.state.pieBreadcrumbs) && (\n \n Clear\n \n )}\n \n )\n }\n\n onClickLegend = filters => {\n if (filters.length === 0) {\n this.setState({\n data: this.updateData(this.originalData),\n legendFilters: filters,\n })\n } else {\n const filteredData = this.props.data.filter(rollup => {\n return !!filters.find(\n filter => rollup[filter.keyName] === filter.keyValue\n )\n })\n\n this.setState({\n data: this.updateData(this.props.dataFormatter(filteredData)),\n legendFilters: filters,\n })\n }\n\n if (this.props.onChangeLegendFilter) {\n this.props.onChangeLegendFilter(filters)\n }\n }\n\n resetPie = () => {\n this.props.onClickPie({})\n this.setState({\n pieBreadcrumbs: {},\n })\n }\n\n onClickPieSlice = params => {\n this.props.onClickPie(params)\n\n let { sectionTitle, displayLabel } = params\n\n this.setState(currState => {\n const pieVariables = {\n ...currState.pieBreadcrumbs,\n }\n\n if (pieVariables[sectionTitle] === displayLabel) {\n //If slice was already selected, we're DEselecting it!\n delete pieVariables[sectionTitle]\n } else {\n pieVariables[sectionTitle] = displayLabel\n }\n\n return {\n pieBreadcrumbs: pieVariables,\n }\n })\n }\n\n renderTooltip = () => {\n const centerBasedCoords = this.buildValue(this.state.hoveredNode)\n\n return (\n \n this.onTooltipHover(this.state.hoveredNode)}\n onEndHover={this.onTooltipEndHover}\n color={this.state.hoveredNode.hex}\n title={this.state.hoveredNode.name}\n label=\"Count\"\n value={\n this.state.hoveredNode.value || this.state.hoveredNode.childcount\n }\n />\n \n )\n }\n\n render() {\n if (this.props.loading) {\n return (\n \n \n \n )\n }\n\n const { data } = this.state\n\n const hasNoChildren = !data.children || data.children.length === 0\n const isNotPrefiltered = this.state.clickedPath.length === 0\n\n if (!data || (isNotPrefiltered && hasNoChildren)) {\n return (\n \n \n \n )\n }\n\n return (\n \n {this.renderBreadcrumbs()}\n {!this.props.isSunburstViewMulti ? (\n \n d.value}\n getColor={d => d.hex}\n data={data}\n height={this.props.height - BREADCRUMBS_HEIGHT}\n width={this.props.width - LEGEND_WIDTH}\n >\n {this.state.hoveredNode && this.renderTooltip()}\n \n \n \n ) : (\n \n )}\n \n )\n }\n}\n\nSunburstVis.defaultProps = {\n height: 350,\n width: 300,\n}\n\nSunburstVis.propTypes = {\n data: PropTypes.array,\n dataFormatter: PropTypes.func.isRequired,\n height: PropTypes.number,\n onChangeLegendFilter: PropTypes.func,\n onClickSlice: PropTypes.func,\n onClickPie: PropTypes.func,\n width: PropTypes.number,\n loading: PropTypes.bool,\n preFilters: ImmutablePropTypes.map,\n swimlanes: ImmutablePropTypes.map,\n toggleSunburstView: PropTypes.func,\n isSunburstViewMulti: PropTypes.bool,\n policies: ImmutablePropTypes.map.isRequired,\n controlFrameworks: ImmutablePropTypes.map.isRequired,\n}\n\nexport default sizeMe(SunburstVis)\n","/*\n *\n * RapSheet reducer\n *\n */\n\nimport { fromJS } from 'immutable'\nimport {\n SET_SELECTED_RESOURCE_ALERT_HISTORY,\n SET_RESOURCES_LOADING,\n SET_RESOURCES,\n SET_CATEGORY_ROLLUP_DATA,\n FETCH_FILTERED_ALERTS,\n FETCH_CATEGORY_ROLLUP_DATA,\n TOGGLE_SUNBURST_VIEW,\n UPDATE_RAPSHEET_RESOURCE_MONITOR,\n} from './constants'\nimport { handleActions } from 'redux-actions'\nimport { List } from 'immutable'\n\nconst initialState = fromJS({\n resources: {},\n resourcesLoading: false,\n selectedResourceAlerts: [],\n categoryRollupData: [],\n categoryRollupLoading: false,\n alertListLoading: false,\n isSunburstViewMulti: false,\n})\n\nconst rapSheetReducer = handleActions(\n {\n [FETCH_FILTERED_ALERTS]: state => state.set('alertListLoading', true),\n [FETCH_CATEGORY_ROLLUP_DATA]: state =>\n state.set('categoryRollupLoading', true),\n [SET_CATEGORY_ROLLUP_DATA]: (state, { payload }) =>\n state\n .set('categoryRollupData', fromJS(payload))\n .set('categoryRollupLoading', false),\n [SET_RESOURCES]: (state, { payload }) =>\n state.set('resources', fromJS(payload)).set('resourcesLoading', false),\n [SET_RESOURCES_LOADING]: (state, { payload }) =>\n state.set('resourcesLoading', payload),\n [SET_SELECTED_RESOURCE_ALERT_HISTORY]: (state, { payload }) =>\n state\n .set('selectedResourceAlerts', fromJS(payload))\n .set('expandedAlert', undefined)\n .set('alertListLoading', false),\n [TOGGLE_SUNBURST_VIEW]: state =>\n state.set('isSunburstViewMulti', !state.get('isSunburstViewMulti')),\n [UPDATE_RAPSHEET_RESOURCE_MONITOR]: (state, { payload }) => {\n if (!state.getIn(['resources', payload.srn])) {\n return state\n }\n\n return state.updateIn(['resources', payload.srn], resource => {\n let newResource = resource\n\n if (!newResource.get('sonraiConfig')) {\n newResource = newResource.set('sonraiConfig', List())\n }\n\n if (\n newResource.get('sonraiConfig').includes('MONITORED') &&\n !payload.isMonitored\n ) {\n newResource = newResource.update('sonraiConfig', oldConfig =>\n oldConfig.filter(val => val !== 'MONITORED')\n )\n } else if (\n !newResource.get('sonraiConfig').includes('MONITORED') &&\n payload.isMonitored\n ) {\n newResource = newResource.update('sonraiConfig', oldConfig =>\n oldConfig.push('MONITORED')\n )\n }\n\n return newResource\n })\n },\n },\n initialState\n)\n\nexport default rapSheetReducer\n","import { all, put, takeLatest, select, call } from 'redux-saga/effects'\nimport { getClient } from 'apolloClient'\nimport gql from 'graphql-tag'\nimport { List } from 'immutable'\nimport _ from 'lodash'\n\nimport { mapPoliciesToControlFrameworks } from 'utils/sonraiUtils'\nimport {\n selectPolicies,\n selectControlFrameworksForUser,\n selectControlGroups,\n} from 'containers/ControlFrameworkData/selectors'\nimport { TICKET_STATUS_CHANGE_SUCCESS } from 'containers/TicketDetailsData/constants'\nimport { performTicketFetch } from 'containers/TicketDetailsData/sagas'\nimport { TICKET_STATUS } from 'appConstants'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { getNameFromSrn, getCloudFromSrn } from 'utils/sonraiUtils'\nimport { FETCH_CATEGORY_ROLLUP_DATA, FETCH_FILTERED_ALERTS } from './constants'\nimport { selectStatus } from 'containers/SecurityCenter/selectors'\nimport {\n setSelectedResourceAlertHistory,\n setCategoryRollupData,\n setResources,\n setResourcesLoading,\n} from './actions'\nimport { selectSelectedResourceAlerts } from './selectors'\n\nconst getStatusString = status => {\n const defValue = `status: { op: IN_LIST, values: [\"${TICKET_STATUS.NEW}\", \"${TICKET_STATUS.IN_PROGRESS}\"] }`\n if (!status || status === 'OPEN') {\n return defValue\n }\n return `status: { op: EQ, value: \"${status}\" }`\n}\n\nfunction* fetchCategoryRollupData({ payload }) {\n const { category, swimlaneSrn, visFilters } = payload\n const status = visFilters.get('status')\n const filters = {}\n //category = ticketType (could be Access, Activity, Property, Custom OR a control framework srn in which case we will switch the type to \"Policy\")\n if (category) {\n if (category.startsWith('srn')) {\n if (category.includes('ControlFramework')) {\n const controlFrameworks = yield select(selectControlGroups)\n const policyIds = controlFrameworks\n .getIn([category, 'contains', 'items'], List())\n .toJS()\n .map(pol => pol.srn)\n filters.ticketType = 'Policy'\n filters.ticketKey = policyIds\n }\n } else {\n filters.ticketType = category\n }\n }\n if (swimlaneSrn) {\n filters.swimlaneSrns = swimlaneSrn\n }\n const displayStatus = getStatusString(status)\n try {\n const client = getClient()\n const categoryRollups = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n query getTicketRollUpsForSunburst {\n TicketRollups(\n where: {\n ${\n payload.resourceId\n ? `resourceSRN: { op: EQ value: \"${payload.resourceId}\"}`\n : 'resourceSRN: { value: \"ALL\" }'\n }\n ${\n filters.ticketType\n ? `ticketType: { op: EQ value: \"${filters.ticketType}\" }`\n : `ticketType: { op: IN_LIST values: [\"Policy\", \"Access\", \"Activity\", \"Property\"] }`\n }\n ${\n filters.swimlaneSrns\n ? `swimlaneSrns: { op: IN_LIST values: [\"${filters.swimlaneSrns}\"] }`\n : 'swimlaneSrns: { value: \"ALL\" }'\n }\n ${\n filters.ticketKey\n ? `ticketKey: {op: IN_LIST values: [${filters.ticketKey\n .map(srn => `\"${srn}\"`)\n .join(', ')}]}`\n : `ticketKey: { op: NEQ, value: \"ALL\" } `\n }\n ${displayStatus}\n severityCategory: { op: NEQ, value: \"ALL\" }\n actionClassification: { value: \"ALL\" }\n resourceType: { op: NEQ value: \"ALL\" }\n resourceLabel: { op: NEQ value: \"ALL\" }\n orgName: { value: \"ALL\" }\n account: { value: \"ALL\" }\n }\n ) {\n items(limit: -1) {\n resourceSRN\n ticketType\n ticketKey\n severityCategory\n count\n resourceType\n resourceLabel\n actionClassification\n swimlaneSrns\n status\n riskScore\n riskScoreNumeric\n }\n }\n }\n `,\n variables: {\n ...filters,\n resourceSRN: payload.resourceId,\n },\n })\n if (categoryRollups.data.TicketRollups.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n //COR-1549 Filtering is ignored on ticketType.\n //We do not want both Policy and Framework tickets because that results in redundancy in the sunburst multi view\n //So filter them out here\n const data = categoryRollups.data.TicketRollups.items.filter(\n rollup => rollup.ticketType !== 'Framework'\n )\n const policies = yield select(selectPolicies)\n const controlGroups = yield select(selectControlFrameworksForUser)\n\n // if not filtering by specific key, do not duplicate policies across control frameworks\n const dataWithControlFrameworks = (filters.ticketKey\n ? mapPoliciesToControlFrameworks(data, policies, controlGroups)\n : data\n ).map(ticketRollup => {\n //sunburstVis expects all properties to be a single value\n //We can do this because AlertRollups from this query will be granular and only have one swimlane on them\n return {\n ...ticketRollup,\n swimlaneSrn: _.get(ticketRollup, ['swimlaneSRNs', 0]),\n }\n })\n yield put(setCategoryRollupData(dataWithControlFrameworks))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error loading cateogry rollup data', e)\n }\n}\n\nfunction* fetchResourcesForAlerts(alerts) {\n let highestMatchingSeveritiesBySrn = {}\n let lastAlertDateBySrn = {}\n const uniqueSrns = new Set() //eslint-disable-line no-restricted-globals\n\n alerts.forEach(alert => {\n const srn = alert.resourceSRN\n if (srn) {\n uniqueSrns.add(srn)\n }\n\n if (\n !highestMatchingSeveritiesBySrn[srn] ||\n alert.severityNumeric > highestMatchingSeveritiesBySrn[srn]\n ) {\n highestMatchingSeveritiesBySrn[srn] = alert.severityNumeric\n lastAlertDateBySrn[srn] = alert.createdDate\n }\n })\n\n const client = getClient()\n\n const entities = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n query getEntitiesBySRN($srnList: [String]) {\n Entities(where: { srn: { op: IN_LIST, values: $srnList } }) {\n items {\n srn\n tagSet\n ... on Resource {\n account\n active\n createdDate\n cloudType\n country\n friendlyName\n name\n region\n resourceId\n importance\n label\n swimlaneSRNs\n }\n }\n }\n }\n `,\n variables: {\n srnList: Array.from(uniqueSrns),\n },\n })\n\n if (entities.data.Entities.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const visResources = {}\n entities.data.Entities.items.forEach(entity => {\n entity.lastAlertDate = lastAlertDateBySrn[entity.srn]\n entity.highestAlertSeverity = highestMatchingSeveritiesBySrn[entity.srn]\n\n if (!entity.name) {\n entity.name = getNameFromSrn(entity.srn)\n }\n\n if (!entity.cloudType) {\n entity.cloudType = getCloudFromSrn(entity.srn)\n }\n\n if (!entity.label) {\n entity.label = getTypeFromSrn(entity.srn)\n }\n\n if (entity.active === undefined || entity.active === null) {\n entity.active = true\n }\n\n visResources[entity.srn] = entity\n })\n return visResources\n}\n\nconst getStatus = status => {\n const defValue = {\n op: 'IN_LIST',\n values: [TICKET_STATUS.NEW, TICKET_STATUS.IN_PROGRESS],\n }\n if (!status || status === 'OPEN') {\n return defValue\n }\n\n return { op: 'EQ', value: `${status}` }\n}\n\nfunction* fetchFilteredAlerts({ payload }) {\n if (payload.fetchResources) {\n yield put(setResourcesLoading(true))\n }\n\n const filters = payload\n\n /*==== Prepare the variables === */\n\n let variables = {}\n\n //Make sure we always include the category selected from the heatmap, if we haven't gone down into something more specific\n if (filters.category && !filters.ticketKey) {\n if (filters.category.startsWith('srn')) {\n if (filters.category.includes('ControlFramework')) {\n filters.ticketType = 'Framework'\n filters.ticketKey = filters.category\n }\n } else {\n filters.ticketType = filters.category\n }\n }\n\n if (filters.ticketType && filters.ticketType !== 'ALL') {\n if (filters.ticketType === 'Framework') {\n variables.ticketType = 'Policy'\n } else {\n variables.ticketType = filters.ticketType\n }\n }\n\n if (filters.ticketKey) {\n if (\n filters.ticketKey.startsWith('srn') &&\n filters.ticketKey.includes('ControlFramework')\n ) {\n //Fetching for a control framework.\n //Tickets don't have the ControlFramework on them,\n //so we instead have to get the list of policiesIds in the CF\n const controlFrameworks = yield select(selectControlGroups)\n\n const policyIds = controlFrameworks\n .getIn([filters.ticketKey, 'contains', 'items'], List())\n .toJS()\n .map(pol => pol.srn)\n\n if (policyIds.length > 0) {\n variables.ticketType = 'Policy'\n variables.ticketKey = policyIds\n } else {\n //Framework has no policies so it can't possibly have results.\n console.warn('Selected framework does not have any configured policies') //eslint-disable-line no-console\n yield put(setSelectedResourceAlertHistory([]))\n yield put(setResourcesLoading(false))\n yield put(setResources({}))\n return\n }\n } else {\n variables.ticketKey = filters.ticketKey\n }\n }\n\n if (filters.subKeyName) {\n variables.actionClassification = filters.subKeyName\n }\n\n if (filters.severityCategory && filters.severityCategory !== 'ALL') {\n variables.severityCategory = filters.severityCategory\n }\n\n if (filters.resourceLabel) {\n variables.resourceLabel = filters.resourceLabel\n }\n\n if (filters.resourceSrn) {\n variables.resourceSRN = filters.resourceSrn\n }\n\n if (filters.swimlaneSrn || filters.swimlane) {\n variables.swimlaneSrn = filters.swimlaneSrn\n }\n\n if (filters.status) {\n variables.status = filters.status\n }\n\n const ticketFilter = {}\n if (variables.swimlaneSrn) {\n ticketFilter.swimlaneSrns = { value: variables.swimlaneSrn }\n }\n\n if (variables.actionClassification) {\n ticketFilter.actionClassification = {\n value: variables.actionClassification,\n }\n }\n\n if (variables.resourceSRN) {\n ticketFilter.resourceSRN = { value: variables.resourceSRN }\n }\n\n if (variables.resourceLabel) {\n ticketFilter.resourceLabel = { value: variables.resourceLabel }\n }\n\n if (variables.severityCategory) {\n ticketFilter.severityCategory = { value: variables.severityCategory }\n }\n\n if (variables.ticketType) {\n ticketFilter.ticketType = { value: variables.ticketType }\n }\n\n if (variables.status !== 'ALL') {\n ticketFilter.status = getStatus(variables.status)\n }\n\n if (variables.ticketKey) {\n if (Array.isArray(variables.ticketKey)) {\n ticketFilter.ticketKey = {\n values: variables.ticketKey,\n op: 'IN_LIST',\n }\n } else {\n ticketFilter.ticketKey = { value: variables.ticketKey }\n }\n }\n\n /**\n * TODO need to support AND for this\n * // if (variables.maxSeverity ) {\n * // severityNumeric: {}\n * // }\n * // ${\n * // exists(variables.maxSeverity) && exists(variables.minSeverity)\n * // ? 'severity: {and: [{op: GTE, value: $minSeverity}, {op: LTE, value: $maxSeverity}]}'\n * // : ''\n * // }\n */\n\n const selection = `\n items(\n limit: 100,\n orderBy: [ { severityNumeric: { order: DESC } } ]\n ) {\n srn\n resourceId\n createdDate\n createdBy\n orgName\n assignedTo\n transitionedBy\n transitionDate\n isSnoozed\n snoozedUntil\n ticketType\n ticketKey\n description\n title\n status\n account\n firstSeen\n lastSeen\n flag\n evidence {\n conditions\n path\n count\n fieldType\n boolValue\n intValue\n longValue\n value\n prevBoolValue\n prevIntValue\n prevLongValue\n prevValue\n resourceSet\n conditions\n path\n regionSet\n userAgentSet\n }\n resourceSRN\n severityNumeric\n severityCategory\n swimlaneSRNs\n actionClassification\n resourceLabel\n resourceType\n }\n `\n try {\n const client = getClient()\n const result = yield client.query({\n forceFetch: true,\n fetchPolicy: 'network-only',\n query: gql`\n query getRapSheetTickets($ticketFilter: TicketsFilter) {\n Tickets(where: $ticketFilter) {\n ${selection}\n }\n }\n `,\n variables: { ticketFilter },\n })\n if (result.data.Tickets.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const tickets = result.data.Tickets.items\n const visResources = yield call(fetchResourcesForAlerts, tickets)\n tickets.forEach(ticket => {\n const { resourceSRN } = ticket\n const resource = visResources[resourceSRN]\n if (resource) {\n ticket.resource = resource\n } else {\n ticket.resource = {}\n }\n })\n\n if (payload.ticketSrn != null) {\n const ticket = tickets.find(ticket => ticket.srn === payload.ticketSrn)\n if (undefined == ticket) {\n tickets.push(yield performTicketFetch({ srn: payload.ticketSrn }))\n }\n }\n\n yield put(setSelectedResourceAlertHistory(tickets))\n if (payload.fetchResources) {\n yield put(setResources(visResources))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error loading CRM alerts data', e)\n }\n}\n\nfunction* handleTicketStatusChanged({ payload }) {\n const { srn, newStatus } = payload\n const statusFilter = yield select(selectStatus)\n\n const tickets = yield select(selectSelectedResourceAlerts)\n\n const wasClosed =\n newStatus === TICKET_STATUS.CLOSED ||\n newStatus === TICKET_STATUS.SNOOZED ||\n newStatus === TICKET_STATUS.RISK_ACCEPTED\n\n const showOpen =\n statusFilter === 'OPEN' || statusFilter === 'NEW' || !statusFilter\n\n if (\n (showOpen && wasClosed) ||\n (statusFilter === 'CLOSED' && newStatus === TICKET_STATUS.NEW)\n ) {\n //Remove this ticket from the visible list of tickets\n yield put(\n setSelectedResourceAlertHistory(\n tickets.filterNot(t => t.get('srn') === srn).toJS()\n )\n )\n }\n}\n\nfunction* rapsheetSaga() {\n yield all([\n takeLatest(FETCH_CATEGORY_ROLLUP_DATA, fetchCategoryRollupData),\n takeLatest(FETCH_FILTERED_ALERTS, fetchFilteredAlerts),\n takeLatest(TICKET_STATUS_CHANGE_SUCCESS, handleTicketStatusChanged),\n ])\n}\n\nexport default rapsheetSaga\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose } from 'redux'\nimport sizeMe from 'components/SizeMe'\nimport TicketTable from 'components/TicketTable'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nexport class RapSheetAlerts extends React.Component {\n componentDidMount() {\n this.setAlertsCount()\n }\n\n componentDidUpdate(prevProps) {\n this.setAlertsCount(prevProps)\n }\n\n /**\n * if the parent wishes to be notified when the number of items in this table\n * changes, they can pass this setAlertCounts function\n */\n setAlertsCount(prevProps) {\n if (!prevProps || prevProps.data.length != this.props.data.length) {\n if (this.props.setAlertCounts) {\n this.props.setAlertCounts(this.props.data.length)\n }\n }\n }\n\n getHeightForPage = (data, pageSize) => {\n return data.length > 0 ? pageSize * 50 + 160 : 250\n }\n\n render() {\n const { data } = this.props\n\n let maxHeight = this.props.pageSize\n ? this.getHeightForPage(data, this.props.pageSize)\n : this.props.height\n\n if (this.props.pageSize && data.length <= this.props.pageSize) {\n maxHeight = this.getHeightForPage(data, data.length)\n }\n\n return (\n \n \n \n )\n }\n}\n\nRapSheetAlerts.propTypes = {\n data: PropTypes.array,\n height: PropTypes.number,\n pageSize: PropTypes.number,\n refreshData: PropTypes.func,\n setAlertCounts: PropTypes.func,\n objectives: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default compose(sizeMe)(RapSheetAlerts)\n","/**\n *\n * RapSheet\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport injectSaga from 'utils/injectSaga'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Map, fromJS } from 'immutable'\nimport moment from 'moment'\nimport Scrollable from 'components/Scrollable'\nimport SunburstVis from 'components/SunburstVis'\nimport themeable from 'containers/ThemeManager/Themeable'\nimport {\n selectPolicies,\n selectControlGroups,\n} from 'containers/ControlFrameworkData/selectors'\nimport {\n selectLoadedControlGroups,\n selectLoadedPolicies,\n} from 'containers/ControlFrameworkData/selectors'\n\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport injectReducer from 'utils/injectReducer'\nimport CenterContent from 'components/CenterContent'\nimport {\n selectSwimlanes,\n selectSwimlanesBySrn,\n selectObjectives,\n selectObjectivesLoading,\n} from 'containers/SonraiData/selectors'\nimport { fetchObjectives } from 'containers/SonraiData/actions'\nimport { BlockShimmer } from 'components/ShimmerLoader'\nimport _ from 'lodash'\nimport {\n selectSelectedResourceAlerts,\n selectCategoryRollupData,\n selectCategoryRollupLoading,\n selectIsSunburstViewMulti,\n selectResources,\n selectAlertListLoading,\n selectQueryStringTicketSrn,\n} from './selectors'\nimport reducer from './reducer'\nimport rsSaga from './sagas'\nimport { sliceBySeverity } from './processData'\nimport {\n fetchCategoryRollupData,\n fetchFilteredAlerts,\n toggleSunburstView,\n} from './actions'\nimport RapSheetAlerts from './RapSheetAlerts'\nexport class RapSheet extends React.Component {\n styles = {\n wrapper: {\n height: '100%',\n },\n vis: {\n display: 'grid',\n height: '50%',\n gridTemplateRows: '1fr',\n overflow: 'hidden',\n },\n }\n\n constructor(props) {\n super(props)\n\n if (props.objectives.isEmpty()) {\n props.fetchObjectives()\n }\n\n this.state = {\n sunburstlegendFilters: [],\n pieVariables: {},\n ticketSrn: props.ticketSrn,\n }\n\n this.updateAllData(props.preFilters)\n }\n\n componentDidUpdate(oldProps) {\n const frameworksLoaded =\n this.props.loadedControlPolicies && this.props.loadedControlGroups\n\n const datesChanged =\n this.props.preFilters.get('fromDate') !==\n oldProps.preFilters.get('fromDate') ||\n this.props.preFilters.get('toDate') !== oldProps.preFilters.get('toDate')\n\n if (\n frameworksLoaded &&\n (!oldProps.loadedControlGroups ||\n !oldProps.loadedControlPolicies ||\n datesChanged)\n ) {\n this.updateAllData(this.props.preFilters)\n }\n }\n\n updateAllData = (overrideValues = Map()) => {\n this.props.fetchCategoryRollupData({\n resourceId: this.props.resourceId,\n swimlaneSrn: this.props.swimlanes.getIn([\n this.props.selectedSwimlaneName,\n 'srn',\n ]),\n category: this.props.selectedCategory,\n visFilters: overrideValues,\n })\n\n this.updateAlerts(overrideValues)\n }\n\n updateAlerts = (overrideValues = Map()) => {\n this.props.fetchFilteredAlerts({\n category: this.props.selectedCategory,\n swimlaneSrn: this.props.swimlanes\n ? this.props.swimlanes.getIn([this.props.selectedSwimlaneName, 'srn'])\n : undefined,\n fetchResources: !this.props.resourceId || this.props.resources.isEmpty(),\n ticketSrn: this.state.ticketSrn,\n status: this.props.preFilters.get('status'),\n ...overrideValues.toJS(),\n resourceSrn: overrideValues.get('resourceSrn') || this.props.resourceId,\n })\n }\n\n onClickPie = clickedSliceFilters => {\n if (_.isEmpty(clickedSliceFilters)) {\n //we cleared all the filters and should just reset\n this.setState({\n pieVariables: {},\n })\n\n if (!this.props.resourceId && this.props.onFilterChange) {\n this.props.onFilterChange({})\n }\n\n this.updateAlerts(fromJS({ fetchResources: true }))\n\n return\n }\n\n let { key, label, value } = clickedSliceFilters\n\n //PieChart works with the swimlane title to show the friendly name in the breadcrumbs\n //So if we're filtering by swimlane we need to convert the name to the srn\n if (key === 'swimlane') {\n key = 'swimlaneSrn'\n }\n\n this.setState(currState => {\n const pieVariables = {\n ...currState.pieVariables,\n }\n\n if (pieVariables[key] === value) {\n //If slice was already selected, we're DEselecting it!\n delete pieVariables[key]\n } else {\n pieVariables[key] = label\n }\n\n let filterVariables = {\n resourceSrn: this.props.resourceId,\n ...pieVariables,\n }\n\n if (!this.props.resourceId && this.props.onFilterChange) {\n this.props.onFilterChange(filterVariables)\n }\n\n this.updateAlerts(fromJS(filterVariables))\n\n return {\n pieVariables: pieVariables,\n }\n })\n }\n\n onClickSunburst = ({ path }) => {\n let filterVariables = path.reduce((variables, slice) => {\n if (!slice.keyName) {\n return variables\n }\n\n variables[slice.keyName] = slice.keyValue\n return variables\n }, {})\n\n filterVariables.resourceSrn = this.props.resourceId\n\n this.setState({\n variables: filterVariables,\n })\n\n if (filterVariables.controlFrameworkId) {\n if (!filterVariables.ticketKey) {\n filterVariables.ticketKey = filterVariables.controlFrameworkId\n filterVariables.ticketType = 'Framework'\n } else {\n filterVariables.ticketType = 'Policy'\n }\n }\n\n if (!this.props.resourceId && this.props.onFilterChange) {\n this.props.onFilterChange({ ...filterVariables })\n }\n\n this.updateAlerts(fromJS({ ...filterVariables }))\n }\n\n onChangeLegendFilter = filters => {\n const filterVariables = filters.reduce((variables, filter) => {\n variables[filter.keyName] = filter.keyValue\n return variables\n }, this.state.variables || {})\n\n filterVariables.resourceSrn = this.props.resourceId\n\n if (filterVariables.controlFrameworkId) {\n if (!filterVariables.keyName) {\n filterVariables.keyName = filterVariables.controlFrameworkId\n filterVariables.keyType = 'Framework'\n } else {\n filterVariables.keyType = 'Policy'\n }\n }\n\n if (!this.props.resourceId && this.props.onFilterChange) {\n this.props.onFilterChange(filterVariables)\n }\n\n this.updateAlerts(\n fromJS({\n ...filterVariables,\n fetchResources: true,\n })\n )\n }\n\n formatSunburstData = data => {\n let formatted = sliceBySeverity(data, {\n colorBySeverity: false,\n typeColors: this.props.typeColors,\n includeLabel: !this.props.resourceId,\n swimlanes: this.props.swimlanesBySrn,\n controlGroups: this.props.controlGroups,\n controlPolicies: this.props.policies,\n })\n\n return { children: formatted }\n }\n\n renderVis = () => {\n return (\n
\n \n
\n )\n }\n\n renderAlerts = () => {\n if (this.props.alertListLoading) {\n return (\n
\n \n
\n )\n }\n\n return (\n \n \n \n )\n }\n\n render() {\n if (\n !this.props.loadedControlPolicies ||\n !this.props.loadedControlGroups ||\n this.props.objectivesLoading\n ) {\n return (\n \n \n \n )\n }\n\n return (\n \n {this.renderVis()}\n {this.renderAlerts()}\n \n )\n }\n}\n\nRapSheet.defaultProps = {\n preFilters: Map({\n fromDate: moment().subtract(7, 'days').toISOString(),\n toDate: moment().toISOString(),\n }),\n}\n\nRapSheet.propTypes = {\n alerts: ImmutablePropTypes.list.isRequired,\n alertListLoading: PropTypes.bool,\n categoryRollupData: ImmutablePropTypes.iterable.isRequired,\n categoryRollupLoading: PropTypes.bool,\n controlGroups: ImmutablePropTypes.map.isRequired,\n policies: ImmutablePropTypes.iterable.isRequired,\n fetchCategoryRollupData: PropTypes.func.isRequired,\n fetchFilteredAlerts: PropTypes.func.isRequired,\n loadedControlGroups: PropTypes.bool,\n loadedControlPolicies: PropTypes.bool,\n onFilterChange: PropTypes.func.isRequired,\n preFilters: ImmutablePropTypes.map.isRequired,\n resourceId: PropTypes.string,\n resources: ImmutablePropTypes.map.isRequired,\n selectedSwimlaneName: PropTypes.string,\n selectedCategory: PropTypes.string,\n setAlertCounts: PropTypes.func,\n swimlanes: ImmutablePropTypes.map.isRequired,\n swimlanesBySrn: ImmutablePropTypes.map.isRequired,\n typeColors: PropTypes.object,\n isSunburstViewMulti: PropTypes.bool,\n toggleSunburstView: PropTypes.func,\n ticketSrn: PropTypes.string.isRequired,\n objectives: ImmutablePropTypes.iterable,\n objectivesLoading: PropTypes.bool,\n fetchObjectives: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n alerts: selectSelectedResourceAlerts,\n alertListLoading: selectAlertListLoading,\n categoryRollupData: selectCategoryRollupData,\n categoryRollupLoading: selectCategoryRollupLoading,\n controlGroups: selectControlGroups,\n policies: selectPolicies,\n loadedControlPolicies: selectLoadedPolicies,\n loadedControlGroups: selectLoadedControlGroups,\n resources: selectResources,\n swimlanes: selectSwimlanes,\n swimlanesBySrn: selectSwimlanesBySrn,\n isSunburstViewMulti: selectIsSunburstViewMulti,\n ticketSrn: selectQueryStringTicketSrn,\n objectives: selectObjectives,\n objectivesLoading: selectObjectivesLoading,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n fetchCategoryRollupData,\n fetchFilteredAlerts,\n toggleSunburstView,\n fetchObjectives,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\nconst withReducer = injectReducer({ key: 'rapSheet', reducer })\nconst withSaga = injectSaga({ key: 'rs', saga: rsSaga })\n\nexport default compose(withReducer, withSaga, withConnect, themeable)(RapSheet)\n","import { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\nimport {\n SET_TICKET_LIST_FILTER_PANEL,\n CLEAR_TICKET_LIST_FILTER,\n} from './constants'\nimport _ from 'lodash'\n\nconst initialState = fromJS({\n ticketListFilters: {},\n})\n\nconst ticketListFilterPanelReducer = handleActions(\n {\n [SET_TICKET_LIST_FILTER_PANEL]: (state, { payload }) => {\n const newState = _.keys(payload).reduce((nextState, type) => {\n const currentState = nextState.get('ticketListFilters')\n const value = payload[type]\n const updatedState =\n _.isEmpty(value) && currentState.get(type)\n ? currentState.delete(type)\n : currentState.set(type, fromJS(value))\n return nextState.set('ticketListFilters', updatedState)\n }, state)\n return newState\n },\n\n [CLEAR_TICKET_LIST_FILTER]: () => initialState,\n },\n initialState\n)\n\nexport default ticketListFilterPanelReducer\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { injectIntl } from 'react-intl'\nimport injectReducer from 'utils/injectReducer'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { Input } from 'reactstrap'\n\nimport Icon from 'components/Icon'\nimport { List, isImmutable, Map } from 'immutable'\nimport Select from 'components/SelectBar'\nimport SelectBar from 'components/SelectBar'\nimport Button from 'components/Button'\nimport Popover, { PopoverBody, PopoverAnchor } from 'components/Popover'\nimport TextLink from 'components/TextLink'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport { selectSwimlanesBySrn } from 'containers/SonraiData/selectors'\nimport { selectPolicies } from 'containers/ControlFrameworkData/selectors'\nimport { selectChangeDetectionOptions } from 'containers/Tickets/selectors'\n\nimport reducer from './reducer'\nimport { selectTicketListFilterPanel } from './selectors'\nimport { setTicketListFilterPanel, clearTicketListFilter } from './actions'\n\nexport class TicketListFilterPanel extends React.Component {\n state = {}\n\n styles = {\n filterList: {\n gridArea: 'filterList',\n paddingTop: '0.75em',\n paddingLeft: '1em',\n fontFamily: 'Roboto-Italic',\n fontSize: '14px',\n color: '#777777',\n },\n sort: {\n marginRight: '0.5em',\n },\n filter: {\n marginLeft: '0.5em',\n },\n filterTitle: {\n marginBottom: '0.5em',\n display: 'block',\n },\n filterHeader: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0.25rem 0.5rem 0.25rem 0.5rem',\n },\n filterPanelFooter: {\n width: '100%',\n margin: '1rem 0rem 0rem 0rem',\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n }\n\n handleSeverityChange = severityCategory => this.setState({ severityCategory })\n\n handleTicketTypeChange = ticketType => this.setState({ ticketType })\n\n handleTicketKeyChange = selectedOptions => {\n this.setState({\n ticketKey:\n selectedOptions && !_.isEmpty(selectedOptions)\n ? selectedOptions.map(opt => opt.value)\n : [],\n })\n }\n\n handleSwimlaneSrnsChange = selectedOptions => {\n this.setState({\n swimlaneSrns:\n selectedOptions && !_.isEmpty(selectedOptions)\n ? selectedOptions.map(opt => opt.value)\n : [],\n })\n }\n\n handleResourceSrnChange = e => this.setState({ resourceSRN: e.target.value })\n\n getTicketKeyOptions = () => {\n const policyOptions = this.props.policies\n .sortBy(policy => policy.get('title'))\n .toList()\n .toJS()\n .map(pol => ({ label: pol.title, value: pol.srn }))\n\n const propertyOptions = this.props.changeDetectionOptions\n .get('data')\n .toJS()\n .filter(option => option.keyType === 'PROPERTY')\n .map(option => ({\n label: `Property Changed: ${_.snakeCase(option.keyName)\n .replace(/_/g, ' ')\n .split(' ')\n .map(_.capitalize)\n .join(' ')}`,\n value: option.keyName,\n }))\n\n const activityOptions = this.props.changeDetectionOptions\n .get('data')\n .toJS()\n .filter(option => option.keyType !== 'PROPERTY')\n .filter(\n option => !['actionableBy', 'hasPermissionTo'].includes(option.keyName)\n )\n .map(option => ({\n label: `Activity: ${_.snakeCase(option.keyName)\n .replace(/_/g, ' ')\n .split(' ')\n .map(_.capitalize)\n .join(' ')}`,\n value: option.keyName,\n }))\n\n const accessOptions = [\n { label: 'Actionable By', value: 'actionableBy' },\n { label: 'Has Permission To', value: 'hasPermissionto' },\n ]\n\n switch ((this.state.ticketType ?? {}).value) {\n case 'Activity':\n return activityOptions\n case 'Access':\n return accessOptions\n case 'Property':\n return propertyOptions\n case 'Policy':\n return policyOptions\n default:\n return [\n ...accessOptions,\n ...activityOptions,\n ...propertyOptions,\n ...policyOptions,\n ]\n }\n }\n\n getValue = type => {\n const singleValSelects = ['severityCategory', 'ticketType']\n let value\n if (\n this.state[type] === null &&\n this.props.ticketListFilters.get(type) &&\n singleValSelects.includes(type)\n ) {\n value = null\n } else {\n value = this.state[type]\n ? this.state[type]\n : this.props.ticketListFilters.get(type)\n }\n\n return isImmutable(value) ? value.toJS() : value\n }\n\n applyFilters = () => {\n const {\n severityCategory,\n ticketType,\n ticketKey,\n swimlaneSrns,\n resourceSRN,\n } = this.state\n const filters = {}\n if (\n severityCategory ||\n (severityCategory === null &&\n this.props.ticketListFilters.has('severityCategory'))\n ) {\n filters.severityCategory = severityCategory ? severityCategory.value : {}\n }\n\n if (\n ticketType ||\n (ticketType === null && this.props.ticketListFilters.has('ticketType'))\n ) {\n filters.ticketType = ticketType ? ticketType.value : {}\n }\n\n if (ticketKey) {\n filters.ticketKey = ticketKey\n }\n if (swimlaneSrns) {\n filters.swimlaneSrns = swimlaneSrns\n }\n\n if (resourceSRN) {\n filters.resourceSRN = resourceSRN\n }\n\n if (!_.isEmpty(filters)) {\n this.props.setTicketListFilterPanel(filters)\n } else {\n this.props.clearTicketListFilter()\n }\n\n this.setState({})\n this.togglePanel()\n }\n\n togglePanel = () => {\n this.setState(prevState => ({\n isOpen: !prevState.isOpen,\n }))\n }\n\n handleClear = () => {\n this.props.clearTicketListFilter()\n this.setState({})\n this.togglePanel()\n }\n\n getSwimlaneLabel = srn => {\n const swimlane = this.props.swimlanes.get(srn) || Map()\n return swimlane.get('title') || srn\n }\n\n getTicketKeyLabel = ticketKey => {\n if (ticketKey.startsWith('srn')) {\n const policy = this.props.policies.get(ticketKey) || Map()\n return policy.get('title') || ticketKey\n }\n return ticketKey\n }\n\n render() {\n return (\n \n \n \n {this.props.ticketListFilters.isEmpty() ? (\n \n ) : (\n \n )}\n \n \n
\n
\n \n Filters\n
\n \n Clear All Filters\n \n
\n\n
\n \n
\n
\n \n
\n
\n ({\n label: this.getTicketKeyLabel(value),\n value,\n }))\n : []\n }\n isClearable\n isMulti\n options={this.getTicketKeyOptions()}\n />\n
\n
\n ({\n label: this.getSwimlaneLabel(value),\n value,\n }))\n : []\n }\n isClearable\n isMulti\n options={(this.props.swimlanes.toList() || List())\n .toJS()\n .map(item => ({ label: item.title, value: item.srn }))}\n />\n
\n
\n \n
\n \n
\n \n Cancel\n \n \n
\n
\n
\n \n )\n }\n}\n\nTicketListFilterPanel.propTypes = {\n ticketListFilters: ImmutablePropTypes.iterable.isRequired,\n changeDetectionOptions: ImmutablePropTypes.iterable.isRequired,\n swimlanes: ImmutablePropTypes.map.isRequired,\n policies: ImmutablePropTypes.map.isRequired,\n theme: themeShape,\n setTicketListFilterPanel: PropTypes.func.isRequired,\n clearTicketListFilter: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n changeDetectionOptions: selectChangeDetectionOptions,\n ticketListFilters: selectTicketListFilterPanel,\n policies: selectPolicies,\n swimlanes: selectSwimlanesBySrn,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n setTicketListFilterPanel,\n clearTicketListFilter,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'ticketListFilterPanel', reducer })\n\nexport default compose(\n withConnect,\n injectIntl,\n withReducer\n)(themeable(TicketListFilterPanel))\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport styled from 'styled-components'\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport BorderedCard from 'components/BorderedCard'\nimport TicketTable from 'components/TicketTable'\nimport messages from '../messages'\nimport TicketListFilterPanel from 'containers/TicketListFilterPanel'\n// TODO test error message looks OK\nconst ErrorMessageContainer = styled.div``\n\nconst style = {\n secondaryContainer: {\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n}\n\n/**\n * main body of Ticket List, has error and loading state\n */\nfunction TicketListBody(props) {\n if (props.ticketList.get('loading') || props.objectivesLoading) {\n return (\n
\n \n
\n )\n }\n\n if (props.ticketList.get('error')) {\n return (\n
\n \n \n \n
\n )\n }\n return (\n }\n noModal={props.noModal}\n overlayNoRowsTemplate={props.overlayNoRowsTemplate}\n refreshData={props.refreshData}\n objectives={props.objectives}\n />\n )\n}\n\nTicketListBody.propTypes = {\n refreshData: PropTypes.func,\n ticketList: ImmutablePropTypes.contains({\n data: PropTypes.any,\n error: PropTypes.bool,\n loading: PropTypes.bool,\n }),\n noModal: PropTypes.bool,\n overlayNoRowsTemplate: PropTypes.node,\n objectives: ImmutablePropTypes.iterable.isRequired,\n objectivesLoading: PropTypes.bool.isRequired,\n}\n\nexport default function TicketList(props) {\n return (\n \n \n \n )\n}\n","module.exports = __webpack_public_path__ + \"dd0601169e35aa5ec92b9157893280f5.png\";","module.exports = __webpack_public_path__ + \"1c3b417c2ab8c8a3ac89770ba7d86ff1.png\";","module.exports = __webpack_public_path__ + \"687a4a6588ba6141dd92ba94ccc45e20.png\";","module.exports = __webpack_public_path__ + \"ca6a8d5e860709afbbf890f3b394c79e.png\";","module.exports = __webpack_public_path__ + \"8bd1bd71cb0f994865c72bcef4951c23.png\";","module.exports = __webpack_public_path__ + \"4470e4b565cdd30af95e7c42843f0425.png\";","module.exports = __webpack_public_path__ + \"66e3bcd7ed63a8a8a7ea9cd10478fa30.png\";","module.exports = __webpack_public_path__ + \"b43d1a7750099afb5967091113298d83.png\";","module.exports = __webpack_public_path__ + \"f140776f8b47549e2cde3687cff5b96f.png\";","/**\n *\n * Icon\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport Radium from 'radium'\nimport {\n faAngleRight,\n faAngleLeft,\n faBell,\n faCheckCircle as faCheckCircleSolid,\n faCircle as faCircleSolid,\n faExclamationCircle as faExclamationCircleSolid,\n faExclamationTriangle as faExclamationTriangleSolid,\n faFilter as faFilterSolid,\n faLock,\n faLockOpen,\n faLongArrowAltDown,\n faLongArrowAltUp,\n faQuestion,\n faSync,\n faUser,\n faLevelUpAlt,\n} from '@fortawesome/free-solid-svg-icons'\nimport {\n faAddressBook,\n faAngleDoubleRight,\n faArchive,\n faArrowDown,\n faArrowLeft,\n faArrowRight,\n faArrows,\n faArrowUp,\n faArrowToTop,\n faArrowToBottom,\n faBan,\n faBars,\n faBell as faBellLight,\n faBinoculars,\n faBracketsCurly,\n faBroadcastTower,\n faBox,\n faBrowser,\n faBug,\n faBuilding,\n faBullseye,\n faCalendarTimes,\n faCameraRetro,\n faCity,\n faChartBar,\n faChartLine,\n faChartNetwork,\n faChartPie,\n faCheck,\n faCheckCircle,\n faChevronLeft,\n faChevronRight,\n faCircle,\n faClipboard,\n faClipboardList,\n faClipboardListCheck,\n faClock,\n faClone,\n faCloud,\n faCloudUpload,\n faCode,\n faCodeMerge,\n faCog,\n faCogs,\n faColumns,\n faCompress,\n faCompressWide,\n faContainerStorage,\n faCopy,\n faCube,\n faCubes,\n faDatabase,\n faDharmachakra,\n faDiamond,\n faDivide,\n faDoorOpen,\n faEllipsisV,\n faExchange,\n faExclamationCircle,\n faExclamationSquare,\n faExclamationTriangle,\n faExpand,\n faExpandArrowsAlt,\n faExpandWide,\n faExternalLinkAlt,\n faLink,\n faEye,\n faEyeSlash,\n faFile,\n faFileAlt,\n faFileCertificate,\n faFileInvoice,\n faFileSignature,\n faFilter,\n faFolder,\n faFolders,\n faFrown,\n faGlasses,\n faGlobe,\n faGlobeAmericas,\n faGripHorizontal,\n faHashtag,\n faHdd,\n faHeartRate,\n faHeartbeat,\n faIdBadge,\n faIdCard,\n faInfoCircle,\n faKey,\n faLayerGroup,\n faLightbulb,\n faList,\n faListAlt,\n faListOl,\n faLocationArrow,\n faLock as hollowLock,\n faLockAlt,\n faMapMarker,\n faMapMarkerAlt,\n faMapSigns,\n faMask,\n faMicrochip,\n faMinus,\n faMinusCircle,\n faMousePointer,\n faNetworkWired,\n faObjectGroup,\n faObjectUngroup,\n faPencilAlt,\n faPlay,\n faPlug,\n faPlus,\n faPlusCircle,\n faPowerOff,\n faQrcode,\n faQuestionCircle,\n faReply,\n faRocket,\n faSave,\n faSearch,\n faSearchMinus,\n faSearchPlus,\n faServer,\n faShield,\n faSignIn,\n faSitemap,\n faSpinner,\n faSquare,\n faStamp,\n faStar,\n faStepBackward,\n faSyncAlt,\n faTable,\n faTachometer,\n faTag,\n faTerminal,\n faThumbsUp,\n faThumbtack,\n faTimes,\n faTimesCircle,\n faTools,\n faTrashAlt,\n faUndo,\n faUniversity,\n faRobot,\n faUpload,\n faUser as faUserLight,\n faUserCircle,\n faUserHeadset,\n faUsers,\n faUsersCog,\n faUserSecret,\n faDigging,\n faUserTag,\n faTags,\n faShieldCheck,\n faSortAmountDown,\n faWarehouseAlt,\n faWindowClose,\n faFileContract,\n faCommentsAlt,\n faCommentAltPlus,\n faChartPieAlt,\n faCompactDisc,\n faScroll,\n faLaptopCode,\n faTasks,\n} from '@fortawesome/pro-light-svg-icons'\nimport {\n faThumbtack as faThumbtackSolid,\n faCaretDown,\n faExclamation,\n faCaretLeft,\n faCaretRight,\n faCaretUp,\n faInfo,\n faCog as faCogSolid,\n} from '@fortawesome/pro-solid-svg-icons'\nimport {\n faAws,\n faWindows,\n faGoogle,\n faSearchengin,\n faSlack,\n} from '@fortawesome/free-brands-svg-icons'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport 'assets/pixeden-stroke-7-icons/pe-icon-7-stroke/css/pe-icon-7-stroke.css'\nimport 'assets/pixeden-stroke-7-icons/pe-icon-7-stroke/css/helper.css'\nimport sonrailogo from 'assets/sonrailogo.png'\nimport gcplogo from 'assets/gcplogo.png'\nimport gcplogowhite from 'assets/gcpwhite.png'\nimport hashicorpvaultlogo from 'assets/hashicorpvaultlogo.png'\nimport hashicorplogo from 'assets/hashicorplogo.png'\nimport kuberneteslogo from 'assets/kuberneteslogo.png'\nimport servicenowlogo from 'assets/servicenowsmall.png'\nimport slacklogo from 'assets/slackicon.png'\nimport jiralogo from 'assets/jiraicon.png'\n\nclass Icon extends React.PureComponent {\n styles = {\n icon: {\n fontSize: '28px',\n },\n }\n\n getIconClassName = () => {\n switch (this.props.name) {\n case 'explorer':\n return 'pe-7s-helm'\n case 'pieChart':\n return 'pe-7s-graph'\n case 'search':\n return 'pe-7s-search'\n case 'report':\n return 'pe-7s-news-paper'\n case 'alert':\n return 'pe-7s-attention'\n case 'config':\n return 'pe-7s-config'\n case 'notification':\n return 'pe-7s-bell'\n case 'explore':\n return 'pe-7s-helm'\n case 'logout':\n return 'pe-7s-power'\n case 'securityCenterLink':\n return 'pe-7s-gleam'\n case 'users':\n return 'pe-7s-users'\n case 'opsCenter':\n return 'pe-7s-global'\n case 'roleManagement':\n return 'pe-7s-key'\n case 'bot':\n return 'pe-7s-disk'\n case 'cloud':\n return 'pe-7s-cloud'\n case 'server':\n return 'pe-7s-server'\n case 'settings':\n return 'pe-7s-settings'\n case 'cog-solid':\n return 'pe-7s-cog-solid'\n case 'columns':\n return 'pe-7s-columns'\n case 'monitoredResources':\n return 'pe-7s-help2'\n case 'escalation':\n return 'pe-7s-levelUpAlt'\n }\n }\n\n buildClassName = () => {\n if (this.props.fixed) {\n return `${this.getIconClassName()} ${this.props.className} pe-fw`\n } else {\n return `${this.getIconClassName()} ${this.props.className}`\n }\n }\n\n getFaIconClass = name => {\n if (name.includes('crm')) {\n switch (name) {\n case 'accessed-crm':\n case 'accessedBy-crm':\n return faDoorOpen\n case 'activeFrom-crm':\n case 'activeUsing-crm':\n return faMapMarker\n case 'actionableBy-crm':\n case 'hasPermissionTo-crm':\n return faKey\n case 'accessedFrom-crm':\n case 'countryAccessedFrom-crm':\n case 'regionsInteractedWith-crm':\n case 'region-crm':\n return faGlobeAmericas\n case 'active-crm':\n return faHeartRate\n case 'isConsoleEnabled-crm':\n return faTerminal\n case 'mfaEnabled-crm':\n case 'encryptionEnabled-crm':\n return faKey\n case 'userAgentList-crm':\n case 'accessedUsing-crm':\n return faUserSecret\n case 'auditEnabled-crm':\n return faClipboardListCheck\n case 'versioningEnabled-crm':\n case 'dataStoreVersion-crm':\n return faLayerGroup\n case 'writeOnceEnabled-crm':\n return faFolder\n case 'publicRead-crm':\n return faUsers\n case 'publicWrite-crm':\n return faPencilAlt\n case 'isPublic-crm':\n return faGlobe\n default:\n return null\n }\n }\n switch (name) {\n case 'address-book':\n return faAddressBook\n case 'angle-double-right':\n return faAngleDoubleRight\n case 'angle-right':\n return faAngleRight\n case 'angle-left':\n return faAngleLeft\n case 'arrow-to-top':\n return faArrowToTop\n case 'arrow-to-bottom':\n return faArrowToBottom\n case 'binoculars':\n return faBinoculars\n case 'brackets-curly':\n return faBracketsCurly\n case 'browser':\n return faBrowser\n case 'building':\n return faBuilding\n case 'bug':\n return faBug\n case 'bullseye':\n return faBullseye\n case 'broadcast-tower':\n return faBroadcastTower\n case 'camera-retro':\n return faCameraRetro\n case 'city':\n return faCity\n case 'run':\n return faPlay\n case 'arrow-right':\n return faArrowRight\n case 'help':\n return faQuestionCircle\n case 'heartbeat':\n return faHeartbeat\n case 'bot':\n return faRobot\n case 'escalation':\n return faLevelUpAlt\n case 'server':\n return faServer\n case 'star':\n return faStar\n case 'archive':\n return faArchive\n case 'arrows':\n return faArrows\n case 'ban':\n return faBan\n case 'box':\n return faBox\n case 'clock':\n return faClock\n case 'upload':\n return faUpload\n case 'terminal':\n return faTerminal\n case 'notification':\n return faBell\n case 'search':\n return faSearch\n case 'sign-in':\n return faSignIn\n case 'identity':\n return faUser\n case 'infrastucture':\n return faInfo\n case 'data':\n case 'cube':\n return faCube\n case 'cubes':\n return faCubes\n case 'hdd':\n return faHdd\n case 'shield':\n return faShield\n case 'digging':\n return faDigging\n case 'network':\n return faNetworkWired\n case 'securityCenterLink':\n return faShieldCheck\n case 'compress':\n return faCompressWide\n case 'expand':\n return faExpandWide\n case 'expand-explorer':\n return faExpand\n case 'pie-alt':\n return faChartPieAlt\n case 'sunburst':\n return faCompactDisc\n case 'caret-down':\n return faCaretDown\n case 'cog-solid':\n return faCogSolid\n case 'database':\n return faDatabase\n case 'exchange':\n return faExchange\n case 'folders':\n return faFolders\n case 'caret-left':\n return faCaretLeft\n case 'caret-right':\n return faCaretRight\n case 'advancedSearch':\n return faSearchengin\n case 'slack':\n return faSlack\n case 'caret-up':\n return faCaretUp\n case 'back':\n return faStepBackward\n case 'id-badge':\n return faIdBadge\n case 'explorer':\n return faDharmachakra\n case 'chart-pie':\n return faChartPie\n case 'chart-bar':\n return faChartBar\n case 'chart-network':\n return faChartNetwork\n case 'clipboard':\n return faClipboard\n case 'clipboard-list':\n return faClipboardList\n case 'clipboard-list-check':\n return faClipboardListCheck\n case 'cloud':\n return faCloud\n case 'idCard':\n return faIdCard\n case 'alert':\n return faExclamationTriangle\n case 'spark':\n return faChartLine\n case 'calendar':\n return faCalendarTimes\n case 'compliance':\n return faClipboardListCheck\n case 'cloud-upload':\n return faCloudUpload\n case 'code':\n return faCode\n case 'arrow-down':\n case 'expandy-down':\n return faArrowDown\n case 'arrow-left':\n return faArrowLeft\n case 'exclamation-triangle-solid':\n return faExclamationTriangleSolid\n case 'collapsy':\n case 'arrow-up':\n return faArrowUp\n case 'sort':\n return faSortAmountDown\n case 'collapse':\n return faCompress\n case 'circle':\n return faCircle\n case 'tasks':\n return faTasks\n case 'close':\n return faWindowClose\n case 'divide':\n return faDivide\n case 'expandy':\n return faExpandArrowsAlt\n case 'circle-solid':\n return faCircleSolid\n case 'code-merge':\n return faCodeMerge\n case 'cogs':\n return faCogs\n case 'container-storage':\n return faContainerStorage\n case 'copy':\n return faCopy\n case 'object-group':\n return faObjectGroup\n case 'object-ungroup':\n return faObjectUngroup\n case 'times':\n return faTimes\n case 'times-circle':\n return faTimesCircle\n case 'diamond':\n return faDiamond\n case 'ellipsis-v':\n return faEllipsisV\n case 'exclamation-square':\n return faExclamationSquare\n case 'frown':\n return faFrown\n case 'globe':\n return faGlobe\n case 'globe-americas':\n return faGlobeAmericas\n case 'grip-horizontal':\n return faGripHorizontal\n case 'hashtag':\n return faHashtag\n case 'lightbulb':\n return faLightbulb\n case 'exclamation':\n return faExclamation\n case 'map-signs':\n return faMapSigns\n case 'map-marker-alt':\n return faMapMarkerAlt\n case 'mask':\n return faMask\n case 'minus':\n return faMinus\n case 'minus-circle':\n return faMinusCircle\n case 'microchip':\n return faMicrochip\n case 'mouse-pointer':\n return faMousePointer\n case 'eye':\n return faEye\n case 'eye-slash':\n return faEyeSlash\n case 'file-alt':\n return faFileAlt\n case 'filter':\n return faFilter\n case 'file':\n return faFile\n case 'file-invoice':\n return faFileInvoice\n case 'file-signature':\n return faFileSignature\n case 'file-certificate':\n return faFileCertificate\n case 'filter-solid':\n return faFilterSolid\n case 'key':\n return faKey\n case 'active':\n return faPlug\n case 'list-ol':\n return faListOl\n case 'list':\n return faList\n case 'list-alt':\n return faListAlt\n case 'location-arrow':\n return faLocationArrow\n case 'lock':\n return faLock\n case 'lock-alt':\n return faLockAlt\n case 'hollowLock':\n return hollowLock\n case 'lock-open':\n return faLockOpen\n case 'plus':\n return faPlus\n case 'pencil-alt':\n return faPencilAlt\n case 'power-off':\n return faPowerOff\n case 'question-solid':\n return faQuestion\n case 'qrcode':\n return faQrcode\n case 'search-minus':\n return faSearchMinus\n case 'search-plus':\n return faSearchPlus\n case 'reply':\n return faReply\n case 'rocket':\n return faRocket\n case 'scroll':\n return faScroll\n case 'save':\n return faSave\n case 'sitemap':\n return faSitemap\n case 'square':\n return faSquare\n case 'tachometer':\n return faTachometer\n case 'table':\n return faTable\n case 'copy-icon':\n return faClone\n case 'thumbs-up':\n return faThumbsUp\n case 'thumbtack-solid':\n return faThumbtackSolid\n case 'trash-alt':\n return faTrashAlt\n case 'tools':\n return faTools\n case 'check':\n return faCheck\n case 'check-circle':\n return faCheckCircle\n case 'check-circle-solid':\n return faCheckCircleSolid\n case 'user':\n return faUserLight\n case 'role':\n return faUserTag\n case 'users':\n return faUsers\n case 'users-cog':\n return faUsersCog\n case 'user-circle':\n return faUserCircle\n case 'user-headset':\n return faUserHeadset\n case 'windows':\n case 'azure':\n return faWindows\n case 'google':\n return faGoogle\n case 'amazon':\n case 'aws':\n return faAws\n case 'exclamation-circle':\n return faExclamationCircleSolid\n case 'exclamation-circle-light':\n return faExclamationCircle\n case 'info-circle':\n return faInfoCircle\n case 'trash':\n return faTrashAlt\n case 'config':\n return faCog\n case 'newWindow':\n return faExternalLinkAlt\n case 'pin':\n return faThumbtack\n case 'refresh':\n return faSyncAlt\n case 'sync':\n return faSyncAlt\n case 'reset':\n return faSync\n case 'spinner':\n return faSpinner\n case 'bell':\n return faBellLight\n case 'groupBy':\n return faSitemap\n case 'circlePlus':\n return faPlusCircle\n case 'undo':\n return faUndo\n case 'university':\n return faUniversity\n case 'column':\n return faColumns\n case 'link':\n return faLink\n case 'menu':\n return faBars\n case 'arrowRight':\n return faChevronRight\n case 'arrowLeft':\n return faChevronLeft\n case 'active-crm':\n return faHeartRate\n case 'console-access':\n return faTerminal\n case 'versioning-enabled':\n return faLayerGroup\n case 'public-read':\n return faGlasses\n case 'stamp':\n return faStamp\n case 'tag':\n return faTag\n case 'tags':\n return faTags\n case 'laptop-code':\n return faLaptopCode\n case 'long-arrow-alt-up':\n return faLongArrowAltUp\n case 'long-arrow-alt-down':\n return faLongArrowAltDown\n case 'warehouse-alt':\n return faWarehouseAlt\n case 'license':\n return faFileContract\n case 'add-comment':\n return faCommentAltPlus\n case 'comments':\n return faCommentsAlt\n default:\n return null\n }\n }\n\n getIconPng = type => {\n switch (type) {\n case 'sonrailogo':\n return sonrailogo\n case 'gcplogo':\n return gcplogo\n case 'gcplogowhite':\n return gcplogowhite\n case 'hashicorpvaultlogo':\n return hashicorpvaultlogo\n case 'hashicorplogo':\n return hashicorplogo\n case 'kuberneteslogo':\n return kuberneteslogo\n case 'servicenowlogo':\n return servicenowlogo\n case 'slacklogo':\n return slacklogo\n case 'jiralogo':\n return jiralogo\n }\n }\n\n getFAIcon() {\n return (\n \n )\n }\n\n render() {\n if (this.props.png) {\n return (\n \n )\n }\n if (this.props.fa) {\n return this.getFAIcon()\n } else {\n return (\n \n )\n }\n }\n}\n\nIcon.defaultProps = {\n size: 'lg',\n style: {},\n}\n\nIcon.propTypes = {\n png: PropTypes.bool,\n type: PropTypes.string,\n className: PropTypes.string,\n color: PropTypes.string,\n fa: PropTypes.bool,\n fixed: PropTypes.bool,\n name: PropTypes.string,\n size: PropTypes.string,\n style: PropTypes.object,\n transform: PropTypes.string,\n spin: PropTypes.bool,\n pulse: PropTypes.bool,\n}\n\nIcon = Radium(Icon) // eslint-disable-line\n\nexport default Icon\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\n/**\n * Direct selector to the Access Activity state domain\n */\nconst selectAccessActivityDomain = state => state.get('accessActivity')\n\n/**\n * Other specific selectors\n */\n\n/**\n * Default selector used by Access Activity\n */\n\nexport const selectAccessActivity = createSelector(\n selectAccessActivityDomain,\n state => state || Map()\n)\n\nexport const selectCriticalResourceMonitorDate = createSelector(\n selectAccessActivity,\n state => state.get('date')\n)\n\nexport const selectPropertyWidget = createSelector(\n selectAccessActivity,\n state => state.get('propertyWidget') || Map()\n)\n\nexport const selectDidAccessData = createSelector(\n selectAccessActivity,\n state => state.get('didAccess') || Map()\n)\nexport const selectCanAccessData = createSelector(\n selectAccessActivity,\n state => state.get('canAccess') || Map()\n)\nexport const selectAccessedUsingData = createSelector(\n selectAccessActivity,\n state => state.get('accessedUsing') || Map()\n)\nexport const selectActivityWidget = createSelector(\n selectAccessActivity,\n state => state.get('activityWidget') || Map()\n)\n\nexport const selectSelectedRowActions = createSelector(\n selectAccessActivity,\n state => {\n return state.get('selectedRowActions') || List()\n }\n)\n\nexport const selectActionsModal = createSelector(\n selectAccessActivity,\n state => {\n return state.get('actionsModal')\n }\n)\n\nexport const selectSelectedRowActionsLoading = createSelector(\n selectAccessActivity,\n state => {\n return state.get('selectedRowActionsLoading')\n }\n)\n\nexport const selectAccessPaths = createSelector(\n selectCanAccessData,\n canAccessData => {\n return canAccessData.get('data') || List()\n }\n)\n\nexport const selectCanAccessPaths = createSelector(\n selectAccessActivity,\n state => {\n return state.get('canAccessPaths')\n }\n)\n\nexport const selectCanAccessPathsLoading = createSelector(\n selectAccessActivity,\n state => {\n return state.get('canAccessPathLoading')\n }\n)\n\nexport const selectCanAccessPathsError = createSelector(\n selectAccessActivity,\n state => {\n return state.get('canAccessPathError')\n }\n)\n\nexport const selectLastCanAccessJobTimestamp = createSelector(\n selectAccessActivity,\n state => {\n return state.get('lastCanAccessJobTimestamp')\n }\n)\n\nexport default selectAccessActivity\nexport { selectAccessActivityDomain }\n","/*\n *\n * SwimlaneDetails constants\n *\n */\n\nexport const GET_PREVIEW_RESULTS = 'app/SwimlaneDetails/GET_PREVIEW_RESULTS'\nexport const SET_PREVIEW_RESULTS = 'app/SwimlaneDetails/SET_PREVIEW_RESULTS'\nexport const CREATE_SWIMLANE = 'app/SwimlaneDetails/CREATE_SWIMLANE'\nexport const CREATE_SWIMLANE_SUCCESS =\n 'app/SwimlaneDetails/CREATE_SWIMLANE_SUCCESS'\nexport const DELETE_SWIMLANE = 'app/SwimlaneDetails/DELETE_SWIMLANE'\nexport const DELETE_SWIMLANE_SUCCESS =\n 'app/SwimlaneDetails/DELETE_SWIMLANE_SUCCESS'\nexport const SET_EDITING_SWIMLANE_SRN =\n 'app/SwimlaneDetails/SET_EDITING_SWIMLANE_SRN'\nexport const UPDATE_SWIMLANE = 'app/SwimlaneDetails/UPDATE_SWIMLANE'\nexport const UPDATE_SWIMLANE_SUCCESS =\n 'app/SwimlaneDetails/UPDATE_SWIMLANE_SUCCESS'\nexport const SET_UPDATE_SWIMLANE_ERROR =\n 'app/SwimlaneDetails/SET_UPDATE_SWIMLANE_ERROR'\n\nexport const GET_TAG_VALUES = 'app/SwimlaneDetails/GET_TAG_VALUES'\nexport const SET_TAG_VALUES = 'app/SwimlaneDetails/SET_TAG_VALUES'\nexport const GET_CONTROL_FRAMEWORKS_FOR_SWIMLANE =\n 'app/SwimlaneDetails/GET_CONTROL_FRAMEWORKS_FOR_SWIMLANE'\nexport const SET_CONTROL_FRAMEWORKS_FOR_SWIMLANE =\n 'app/SwimlaneDetails/SET_CONTROL_FRAMEWORKS_FOR_SWIMLANE'\nexport const UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK =\n 'app/SwimlaneDetails/UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK'\nexport const UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK_SUCCESS =\n 'app/SwimlaneDetails/UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK_SUCCESS'\n\nexport const GET_BOT_VALUES = 'app/SwimlaneDetails/GET_BOT_VALUES'\nexport const SET_BOT_VALUES = 'app/SwimlaneDetails/SET_BOT_VALUES'\n\nexport const UPDATE_USER_IN_SWIMLANE =\n 'app/SwimlaneDetails/UPDATE_USER_IN_SWIMLANE'\nexport const UPDATE_USER_IN_SWIMLANE_SUCCESS =\n 'app/SwimlaneDetails/UPDATE_USER_IN_SWIMLANE_SUCCESS'\nexport const SET_SWIMLANE_BOT_ERROR =\n 'app/SwimlaneDetails/SET_SWIMLANE_BOT_ERROR'\n","module.exports = __webpack_public_path__ + \"54b4a51e69d58d964531ecb6397ee17e.png\";","module.exports = __webpack_public_path__ + \"31b83a2563f2d250c677a4b1f793ef08.webm\";","module.exports = __webpack_public_path__ + \"d34dec7797d217ea7f996c55271b50ca.png\";","module.exports = __webpack_public_path__ + \"fab4793a9256f96b3ac27ac4775890af.png\";","// src/react-auth0-wrapper.js\nimport React, { useState, useEffect, useContext } from 'react'\nimport _ from 'lodash'\nimport jwt from 'jsonwebtoken'\nimport PropTypes from 'prop-types'\nimport createAuth0Client from '@auth0/auth0-spa-js'\nimport AuthDB, { TokenFetchType, LogoutEventType } from 'auth/auth-db'\n\nconst DEFAULT_REDIRECT_CALLBACK = () =>\n window.history.replaceState({}, document.title, window.location.pathname)\n\nlet auth0ClientExport\nexport const getAuth0Client = () => {\n return auth0ClientExport\n}\n\n/**\n * here is our DB to keep track of session telemetry .. aids in debugging\n * session problems\n */\nconst WINDOW_AUTHDB_KEY = '$$_AUTHDB'\n\nexport const getAuthDB = () => {\n return window[WINDOW_AUTHDB_KEY]\n}\nconst setAuthDB = authDB => {\n window[WINDOW_AUTHDB_KEY] = authDB\n}\n\n// things can wait on the initial authorization call to auth0 using this promise\nlet resolveTokenIsSet\nlet rejectTokenIsSet\nconst initialTokenLoad = new Promise((resolve, reject) => {\n resolveTokenIsSet = resolve\n rejectTokenIsSet = reject\n})\n\n/**\n * There are some functions in this module that interact with one another to\n * manage the user's session. The basic goal of managing the session is that the\n * user should be logged out of the app if they are idle in all tabs for the\n * some duration (30mins).\n *\n * During the time the session is active, the user should have a valid jwt\n * token, which we store on the window object as window.aat.\n *\n * Technically the session idle duration is the lifespan where the jwt token\n * remains valid. 30mins is what we have it configured to at this time.\n *\n * When a user interacts with the system by clicking or pressing a key, we run\n * some code to decide if we should get a new token. There are two cases:\n *\n * ~~ Case 1 ~~\n * If the token's tll is partially over, we will fetch a new token\n * immediately. We don't wait for the token's ttl to be fully over because\n * once that happens the session would also be expired and we couldn't get a\n * new token.\n *\n * The percentage of the token's TTL we wait before we refetch is set by the\n * variable TOKEN_GOODFOR_LIFE_PCT\n *\n * So for example, if the token TTL was 30 mins, and the user interacted with\n * the app 10 minutes after the token's iat, we would get a new token.\n *\n * ~~ Case 2 ~~\n * If the token's ttl has not passed this threshold, we don't refetch the token\n * but we do set an interval to refetch the token in a little bit.\n *\n * This handles the case where, say for example, a user interacted with the app\n * after 8 mins, but didn't interact with the app again until after the 30 min\n * mark, their token would be expired.\n *\n * We fetch the token either at the minimum time we would in case 1, but if\n * that time is too far in the future, we do it after some max aount of\n * time. That amount of time is set by MAX_REFETCH_AFTER_INTERACTION\n *\n * The reason we wait some max time is, say we didn't and the user interacted\n * with the app 1 minute afer their tokenw as expired. We would refetch at 10\n * minute mark, and then if they never interafed with the app again, we would\n * log them out 30 mins after that, but really they have been idle for 39\n * minutes.\n *\n * If the user is active in a different tab, we also need to fetch a token to\n * use on this tab. To do that, we keep track of the last page interaction\n * across all tabs in localStorage. There is a function that runs on an\n * interval which checks if an interaction has recently ocurrred, and it if has\n * the function will get a new token (checkLastPageInteraction).\n */\nconst TOKEN_GOODFOR_LIFE_PCT = 0.33\nconst MAX_REFETCH_AFTER_INTERACTION = 60 * 1000\n\n/**\n * Force fetch a new token, even if the current token isn't expired\n */\nconst forceFetchNewToken = async () => {\n const auth0Client = await getAuth0Client()\n clearTokenCache(auth0Client)\n return await auth0Client.getTokenSilently({\n audience: window.config.idpGraphQLAudience,\n scope: 'openid profile read:data read:platform read:token',\n })\n}\n\n/**\n * When we get a new token, we set a timeout function to run when the token\n * expires to logout the user immediately. This is to handle the case where\n * a user might sit down at the computer, their token might already be expired\n * but they haven't been kicked out of the app yet (say by the code that\n * handles 401 from API). They could sit there for a few mins before getting\n * kicked out, so we log them out immediately\n */\nlet logoutTimeout\nconst setLogoutTimeout = token => {\n // make sure we log out right when the token expiress\n const { exp, iat } = jwt.decode(token)\n const tokenTTL = (exp - iat) * 1000\n logoutTimeout = setTimeout(async () => {\n getAuthDB().logoutEvent(LogoutEventType.EXPIRE_TIMEOUT)\n logout(await getAuth0Client())\n }, tokenTTL)\n}\n\n/**\n * Get a new token and set it as window.aat\n */\nconst setNewTokenOnWindow = async () => {\n try {\n window.aat = await forceFetchNewToken()\n if (logoutTimeout) {\n clearTimeout(logoutTimeout)\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('error happen refetching token', e)\n }\n setLogoutTimeout(window.aat)\n getAuthDB().tokenFetchEvent(window.aat, TokenFetchType.REFETCH)\n}\n\n/**\n * This is a bit of a hack, auth0Client isn't supposed to let you force it to manually\n * refresh the token, but it stores the curent token in this cache object, so if you\n * delete everything out of it, it will refetch\n */\nconst clearTokenCache = auth0Client => {\n const cache = auth0Client.cache.cache\n const keys = Object.keys(cache)\n for (let key of keys) {\n delete cache[key]\n }\n}\n\n/**\n * We keep track of the last time the user interacted with a page of the\n * application in any open tab using local storage - this will be returned\n * in *epoch seconds*\n */\nexport const LAST_PAGE_INTERACTION_LS_KEY =\n '__sonrai__LAST_PAGE_INTERACTION_LS_KEY'\n\nexport const getLastPageInteraction = () => {\n const rawValue = localStorage.getItem(LAST_PAGE_INTERACTION_LS_KEY)\n const asNumber = Number(rawValue)\n let asEpochSeconds = null\n if (!asNumber) {\n // eslint-disable-next-line no-console\n console.warn(\n `invalid local storage value ${LAST_PAGE_INTERACTION_LS_KEY}:${rawValue}`\n )\n asEpochSeconds = Math.floor(new Date().getTime() / 1000)\n } else {\n asEpochSeconds = asNumber\n }\n return asEpochSeconds\n}\n\nexport const setLastPageInteraction = (\n epochSecondsNow = new Date().getTime() / 1000\n) => {\n if (typeof epochSecondsNow !== 'number') {\n throw new Error(\n 'IllegalArgumentError: must be number, received: ' +\n typeof epochSecondsNow\n )\n }\n localStorage.setItem(LAST_PAGE_INTERACTION_LS_KEY, epochSecondsNow)\n}\n\nexport const UIEXP_CLAIM = 'https://sonraisecurity.com/uiexp'\nexport const getEffectiveTokenExpiration = decodedToken => {\n // if the caller didn't pass decoded token, recall with decoded\n if (typeof token === 'string') {\n // token is encoded - decode and call\n return getEffectiveTokenExpiration(jwt.decode(decodedToken))\n }\n const { exp, [UIEXP_CLAIM]: uiexp } = decodedToken\n if (uiexp && exp) {\n return Math.min(uiexp, exp)\n }\n if (exp) {\n return exp\n }\n if (uiexp) {\n return uiexp\n }\n}\n\n/**\n * when user interacts with page, we check if they need a new token\n * and possibly go get one - see big comment above explains what is\n * happening in this function.\n */\nlet fetchTokenInFutureTimeout\nconst handlePageInteraction = () => {\n const token = window.aat\n const decodedToken = jwt.decode(token)\n if (!decodedToken) {\n return\n }\n\n const { iat } = decodedToken\n const exp = getEffectiveTokenExpiration(decodedToken)\n\n // calcualte the time in the future we should fetch new token\n const tokenLife = exp - iat\n const fetchAfter = iat + tokenLife * TOKEN_GOODFOR_LIFE_PCT\n\n // clear the futue token refetch due to new page interaction\n if (fetchTokenInFutureTimeout) {\n clearTimeout(fetchTokenInFutureTimeout)\n }\n\n // if it's passed the time we should have got the new token, get it now\n const now = new Date().getTime() / 1000\n if (fetchAfter < now) {\n return setNewTokenOnWindow()\n }\n\n // otherwise get the new token a short time in the future\n const millisUntilGetNewToken = Math.min(\n (fetchAfter - now) * 1000,\n MAX_REFETCH_AFTER_INTERACTION\n )\n fetchTokenInFutureTimeout = setTimeout(\n () => setNewTokenOnWindow(),\n millisUntilGetNewToken\n )\n}\n\n// we don't run this method every time user does something\nconst throttledHandlePageInteraction = _.throttle(\n () => {\n setLastPageInteraction() // defaults to now\n handlePageInteraction()\n },\n 5000, // only run it every 5 secs\n {\n leading: true,\n trailing: false,\n }\n)\ndocument.addEventListener('click', throttledHandlePageInteraction)\ndocument.addEventListener('keydown', throttledHandlePageInteraction)\n\n/**\n * If the user is active in a different tab, we want to make sure their token\n * doesn't expire due to idleness on this tab, so use the local stored value\n *\n * it's OK if the tab the user last ineracted with is the current tab\n */\nconst otherTabInteractionCheckInterval = 15 // seconds\nconst checkLastPageInteraction = () => {\n const lastPageInteraction = getLastPageInteraction()\n const nowEpochSeconds = new Date().getTime() / 1000\n\n const intervalSinceLastInteraction = nowEpochSeconds - lastPageInteraction\n if (intervalSinceLastInteraction < otherTabInteractionCheckInterval) {\n handlePageInteraction()\n }\n}\nsetInterval(checkLastPageInteraction, otherTabInteractionCheckInterval * 1000)\n\n/**\n * either get the cucrent token, or if it is expired, check if the user\n * has recently interacted with the page. If they have, refresh the token\n * otherise, return the expired token\n */\nexport const getCurrentToken = async () => {\n return window.aat\n}\n\n/**\n * helper function to make sure we logout with a callback to the right path\n */\nexport const logout = (auth0Client, ...p) => {\n auth0Client.logout({ returnTo: `${window.location.origin}/Login`, ...p })\n}\n\nexport const Auth0Context = React.createContext()\nexport const useAuth0 = () => useContext(Auth0Context)\nexport const Auth0Provider = ({\n children,\n onRedirectCallback = DEFAULT_REDIRECT_CALLBACK,\n ...initOptions\n}) => {\n const [isAuthenticated, setIsAuthenticated] = useState()\n const [user, setUser] = useState()\n const [auth0Client, setAuth0] = useState()\n const [loading, setLoading] = useState(true)\n const [popupOpen, setPopupOpen] = useState(false)\n\n useEffect(() => {\n const initAuth0 = async () => {\n const auth0FromHook = await createAuth0Client(initOptions)\n setAuth0(auth0FromHook)\n auth0ClientExport = auth0FromHook\n\n if (\n window.location.search.includes('code=') &&\n !window.location.search.includes('code=success') &&\n window.location.pathname != '/App/DoSlackAuth'\n ) {\n try {\n const { appState } = await auth0FromHook.handleRedirectCallback()\n onRedirectCallback(appState)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('error handling redirct callback', e)\n if (\n e.message ===\n \"The code was generated for a user who doesn't exist anymore.\"\n ) {\n auth0FromHook.loginWithRedirect({\n audience: window.config.idpGraphQLAudience,\n scope: 'openid profile read:data read:platform read:token',\n })\n }\n }\n }\n\n const isAuthenticated = await auth0FromHook.isAuthenticated()\n\n setIsAuthenticated(isAuthenticated)\n\n if (isAuthenticated) {\n const user = await auth0FromHook.getUser()\n\n auth0FromHook\n .getTokenSilently({\n audience: window.config.idpGraphQLAudience,\n scope: 'openid profile read:data read:platform read:token',\n })\n .then(token => {\n window.aat = token\n setIsAuthenticated(isAuthenticated)\n setUser(user)\n setAuthDB(new AuthDB(user))\n getAuthDB().tokenFetchEvent(token, TokenFetchType.INITIAL)\n setLogoutTimeout(window.aat)\n resolveTokenIsSet(token)\n })\n .catch(e => {\n rejectTokenIsSet(e)\n auth0FromHook\n .loginWithRedirect({\n audience: window.config.idpGraphQLAudience,\n scope: 'openid profile read:data read:platform read:token',\n })\n .then(token => {\n window.aat = token\n setLogoutTimeout(window.aat)\n })\n })\n }\n\n setLoading(false)\n }\n initAuth0()\n }, [])\n\n const loginWithPopup = async (params = {}) => {\n setPopupOpen(true)\n if (auth0Client) {\n try {\n await auth0Client.loginWithPopup(params)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error)\n } finally {\n setPopupOpen(false)\n }\n const user = await auth0Client.getUser()\n setUser(user)\n setIsAuthenticated(true)\n }\n }\n\n const handleRedirectCallback = async () => {\n setLoading(true)\n await auth0Client.handleRedirectCallback()\n const user = await auth0Client.getUser()\n setLoading(false)\n setIsAuthenticated(true)\n setUser(user)\n }\n return (\n auth0Client.getIdTokenClaims(...p),\n loginWithRedirect: (...p) => auth0Client.loginWithRedirect(...p),\n getTokenSilently: (...p) => auth0Client.getTokenSilently(...p),\n getTokenWithPopup: (...p) => auth0Client.getTokenWithPopup(...p),\n logout: (...p) => logout(auth0Client, ...p),\n }}\n >\n {children}\n \n )\n}\n\nAuth0Provider.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n onRedirectCallback: PropTypes.func,\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Modal, ModalBody, ModalHeader, ModalFooter, Input } from 'reactstrap'\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\n\nimport messages from './messages'\n\nclass AddDecryptionKeyModal extends Component {\n constructor(props) {\n super(props)\n this.state = {\n privateKey: '',\n }\n }\n\n onKeyValueChange = event => {\n this.setState({ privateKey: event.target.value })\n }\n\n onSave = () => {\n if (this.state.privateKey) {\n this.props.setPrivateKey({ key: this.state.privateKey })\n this.props.close()\n }\n }\n\n render() {\n return (\n \n \n \n \n \n \n \n {' '}\n {' '}\n \n \n {' '}\n \n
\n \n
\n
\n \n \n \n \n \n \n \n \n
\n )\n }\n}\n\nAddDecryptionKeyModal.propTypes = {\n open: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n setPrivateKey: PropTypes.func.isRequired,\n}\n\nexport default AddDecryptionKeyModal\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport JSEncrypt from 'jsencrypt'\n\nimport DataTable from 'components/DataTable'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SectionHeader from 'components/SectionHeader'\nimport TextLink from 'components/TextLink'\nimport AddDecryptionKeyModal from './AddDecryptionKeyModal'\n\nimport { isBase64Encoded, isClassificationSupported } from './utils'\nimport messages from './messages'\n\nclass ClassificationDataView extends Component {\n constructor(props) {\n super(props)\n this.state = {\n addPrivateKeyModalOpen: false,\n decrypter: null,\n }\n }\n\n componentDidMount() {\n if (this.state.decrypter == null && this.props.privateKey) {\n const decrypter = new JSEncrypt()\n decrypter.setPrivateKey(this.props.privateKey)\n this.setState({ decrypter })\n }\n }\n\n componentDidUpdate(prevProps) {\n // if we got a new private key, create a new instance of decrypter\n if (\n this.props.privateKey &&\n this.props.privateKey !== prevProps.privateKey\n ) {\n const decrypter = new JSEncrypt()\n decrypter.setPrivateKey(this.props.privateKey)\n this.setState({ decrypter })\n }\n }\n\n openAddPrivateKeyModal = () => {\n this.setState({ addPrivateKeyModalOpen: true })\n }\n\n closeAddPrivateKeyModal = () => {\n this.setState({ addPrivateKeyModalOpen: false })\n }\n\n /**\n * Classifications look like:\n * .=\n * eg: EMAIL.sample=chafferty@eprime.com\n */\n desconstructSample = classifcation => {\n const segments = classifcation.split('=')\n const [classifier, sampleType] = segments.shift().split('.')\n const sample = segments.join('=')\n return { classifier, sampleType, sample }\n }\n\n getTableRows = () => {\n return this.getSamples()\n .filter(({ sampleType }) => 'sample' === sampleType)\n .map(value => _.pick(value, ['classifier', 'sample']))\n }\n\n getTableRowsForDataContainer = () => {\n return this.getSamplesForDataContainer()\n .filter(({ sampleType }) => 'sample' === sampleType)\n .toJS()\n }\n\n getSamples = () => {\n const { classificationSet } = this.props.nodeData\n if (!classificationSet) {\n // shouldn't happen, but good to be safe in case proptypes ignored\n return []\n }\n\n return classificationSet.map(this.desconstructSample)\n }\n\n isSampleEncoded = sample => {\n // 100 is abritrary, but we know our base64 strings are more than 100 and\n // most names or other samples are < 100 chars\n if (sample && sample.length > 100) {\n if (isBase64Encoded(sample)) {\n return true\n }\n }\n return false\n }\n\n /**\n * TODO - sometime down the line we SHOULD push for some identifier to be\n * added to data classificaton samples that show if they are encoded or not\n * so the method isSampleEncoded can be reimplemeneed\n *\n * also this method is O(n) for the rows in the table which is annoying\n * that we have to just scan it. What if there were a lot of rows of samples\n * with really long email addresses, we'd regex match them all and it would\n * take all month for this method to run.\n */\n isSamplesBase64Encoded = tableRows => {\n const base64 = tableRows.find(({ sample }) => this.isSampleEncoded(sample))\n if (base64) {\n return true\n }\n return false\n }\n\n decryptSample = sample => {\n if (!this.isSampleEncoded(sample)) {\n return sample\n }\n try {\n const decryptedSample = this.state.decrypter.decrypt(sample)\n const deConstructedSample = this.desconstructSample(decryptedSample)\n if (deConstructedSample.sample) {\n return deConstructedSample.sample\n }\n // for some unknown reason the deconstructed value isn't in the right\n // format so just return whatever was encrypted\n return decryptedSample\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('There was an error decrypting sample ' + sample, e)\n return 'Unable to decrypt sample.'\n }\n }\n\n decryptSamples = tableRows => {\n return tableRows.map(row => ({\n ...row,\n sample: this.decryptSample(row.sample),\n }))\n }\n\n shouldRenderCountsOnlyView = () => {\n const allSamples = this.getSamples()\n\n if (allSamples.length === 0) {\n return false\n }\n\n const nonSampleSample = allSamples.find(\n ({ sampleType }) => 'sample' === sampleType\n )\n\n return nonSampleSample === undefined\n }\n\n renderSamplesTable = (tableRows, samplesAreEncrypted) => {\n return (\n \n {\n if (params.value) {\n if (!messages[`dataTableClassifierName_${params.value}`]) {\n return params.value\n }\n return (\n \n )\n } else {\n return \n }\n },\n },\n }}\n />\n \n )\n }\n\n renderCountsOnlyView = () => {\n const countSamples = this.getSamples().filter(\n ({ sampleType }) => 'count' === sampleType\n )\n\n const lis = countSamples.map(({ sample, classifier }) => {\n return (\n
  • \n \n \n \n - {sample}\n
  • \n )\n })\n\n return (\n
    \n
      {lis}
    \n
    \n )\n }\n\n render() {\n let tableRows = null\n let samplesAreEncrypted = false\n let renderCountsOnlyView = this.shouldRenderCountsOnlyView()\n\n // if the user has samples, init data for table\n if (!renderCountsOnlyView) {\n tableRows = this.getTableRows()\n samplesAreEncrypted = this.isSamplesBase64Encoded(tableRows)\n if (samplesAreEncrypted && this.props.privateKey) {\n tableRows = this.decryptSamples(tableRows)\n }\n }\n\n return (\n
    \n \n
    \n \n \n \n \n \n
    \n
    \n \n {isClassificationSupported(this.props.nodeData) && (\n \n \n \n )}\n
    \n {!renderCountsOnlyView && samplesAreEncrypted && (\n \n \n \n \n
    \n )}\n \n \n {!renderCountsOnlyView &&\n this.renderSamplesTable(tableRows, samplesAreEncrypted)}\n {renderCountsOnlyView && this.renderCountsOnlyView()}\n \n )\n }\n}\n\nClassificationDataView.propTypes = {\n dataContainerContent: ImmutablePropTypes.contains({\n contains: ImmutablePropTypes.contains({\n srn: PropTypes.string,\n items: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n classificationSet: ImmutablePropTypes.listOf(PropTypes.string),\n })\n ),\n }),\n }),\n nodeData: PropTypes.shape({\n classificationSet: PropTypes.arrayOf(PropTypes.string).isRequired,\n label: PropTypes.string.isRequired,\n __typename: PropTypes.string.isRequired,\n }).isRequired,\n openFormView: PropTypes.func.isRequired,\n privateKey: PropTypes.string,\n setPrivateKey: PropTypes.func.isRequired,\n}\n\nexport default ClassificationDataView\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\n\nimport messages from './messages'\n\nclass NoClassificationsView extends Component {\n render() {\n return (\n \n \n \n \n
    \n {this.props.canSubmitJob && (\n \n \n \n )}\n \n )\n }\n}\n\nNoClassificationsView.propTypes = {\n canSubmitJob: PropTypes.func.isRequired,\n openFormView: PropTypes.func.isRequired,\n}\n\nexport default NoClassificationsView\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nimport FormLabel from 'components/FormLabel'\n\nexport const RequiredSpan = () => *\n\nexport function DefaultFieldControlContainer(props) {\n return (\n
    \n {/* eslint-disable-next-line react/prop-types */}\n {props.children}\n
    \n )\n}\n\nexport default class SubmitFormBaseComponent extends Component {\n constructor(props) {\n super(props)\n this.RequiredSpan = RequiredSpan // allow access to children if they dont wanna import\n\n this.DefaultFieldControlContainer = DefaultFieldControlContainer\n\n this.styles = {\n fieldHelpContent: {\n marginTop: '6px',\n marginBottom: '6px',\n fontSize: '13px',\n fontWeight: 300,\n overflow: 'hidden',\n },\n fieldHelpContentClosed: {\n maxHeight: '0px',\n transition: 'max-height 0.2s ease-out',\n },\n fieldHelpContentOpen: {\n maxHeight: '500px',\n transition: 'max-height 0.5s',\n },\n formHeadingErrors: {\n color: 'red',\n },\n }\n\n /**\n * Here are three methods that you must subclass this class and implement\n *\n * if you implement the subclass like this ...\n * renderHelpContent() { }\n *\n * ... not using an arrow function make sure you bind the method in the\n * constructor\n */\n this.renderTitleText = () => {\n throw new Error(\n `${this.displayName} (${\n this.props.fieldKey\n }) must impement method renderTitleText`\n )\n }\n this.renderHelpContent = () => {\n throw new Error(\n `${this.displayName} (${\n this.props.fieldKey\n }) must impement method renderHelpContent`\n )\n }\n this.renderFieldControls = () => {\n throw new Error(\n `${this.displayName} (${\n this.props.fieldKey\n }) must impement method renderFieldControls`\n )\n }\n }\n\n render() {\n return (\n
    \n
    \n \n {this.renderTitleText()}\n \n
    \n \n {this.renderHelpContent()}\n
    \n {this.renderFieldControls()}\n \n )\n }\n}\n\nSubmitFormBaseComponent.propTypes = {\n fieldKey: PropTypes.string.isRequired,\n formErrors: PropTypes.object.isRequired,\n required: PropTypes.bool,\n\n // some props aren't used by the base class, but children can expect them to be passed:\n authenticationType: PropTypes.string, // eslint-disable-line react/no-unused-prop-types\n formValues: PropTypes.object.isRequired, // eslint-disable-line react/no-unused-prop-types\n setFormFields: PropTypes.func.isRequired, // eslint-disable-line react/no-unused-prop-types\n}\n\nexport const RadioInstructionMessage = styled.span`\n font-size: 12px;\n`\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { Input } from 'reactstrap'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport messages from '../messages'\nimport SubmitFormBaseComponent, {\n RequiredSpan,\n DefaultFieldControlContainer,\n} from './SubmitFormBaseComponent'\nimport {\n AUTH_MODE_USERNAME_KV,\n AUTH_MODE_USERNAME_SECRETMGR,\n} from '../constants'\n\nconst FormFieldsContainer = styled.div`\n display: grid;\n grid-row-gap: 8px;\n grid-template-columns: 200px auto;\n`\n\nconst Label = styled.label`\n padding-top: 8px;\n padding-right: 8px;\n`\n\nconst authModeMessages = {\n [AUTH_MODE_USERNAME_KV]: {\n name: messages.submitFormAuthenticationKVName,\n path: messages.submitFormAuthenticationKVPath,\n nameInstructions: messages.submitFormAuthenticationKVNameInstructions,\n pathInstructions: messages.submitFormAuthenticationKVPathInstructions,\n },\n [AUTH_MODE_USERNAME_SECRETMGR]: {\n name: messages.submitFormAuthenticationSecretName,\n path: messages.submitFormAuthenticationSecretPath,\n nameInstructions:\n messages.submitFormAuthenticationSecretsManagerArnInstructions,\n pathInstructions:\n messages.submitFormAuthenticationSecretsManagerPathInstructions,\n },\n}\n\nexport default class SubmitFormAuthenticationSection extends SubmitFormBaseComponent {\n renderTitleText = () => {\n return (\n \n )\n }\n\n renderHelpContent = () => {\n return (\n
    \n \n \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n \n
    \n )\n }\n\n changeUsername = event => {\n const { value } = event.target\n this.props.setFormFields({\n [this.props.fieldKey]: {\n ...this.props.formValues[this.props.fieldKey],\n username: value,\n },\n })\n }\n\n changeKVName = event => {\n const { value } = event.target\n this.props.setFormFields({\n [this.props.fieldKey]: {\n ...this.props.formValues[this.props.fieldKey],\n kvName: value,\n },\n })\n }\n\n changeKVPath = event => {\n const { value } = event.target\n this.props.setFormFields({\n [this.props.fieldKey]: {\n ...this.props.formValues[this.props.fieldKey],\n kvPath: value,\n },\n })\n }\n\n validateUsername = ({ target: { value } }) => {\n if (!value) {\n this.props.setFormErrors({\n [this.props.fieldKey]: 'username is required',\n })\n }\n }\n\n validateKVName = ({ target: { value } }) => {\n if (!value) {\n this.props.setFormErrors({\n [this.props.fieldKey]: 'name is required',\n })\n }\n }\n\n validateKVPath = ({ target: { value } }) => {\n if (!value) {\n this.props.setFormErrors({\n [this.props.fieldKey]: 'path is required',\n })\n }\n }\n\n renderFieldControls = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n }\n}\n","import React, { Fragment } from 'react'\nimport { Set } from 'immutable'\n\nimport Select from 'react-select'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SubmitFormBaseComponent, {\n DefaultFieldControlContainer,\n RequiredSpan,\n} from './SubmitFormBaseComponent'\n\nimport { TitleShimmer } from 'components/ShimmerLoader'\nimport TextLink from 'components/TextLink'\n\nimport messages from '../messages'\n\nclass SubmitFormClassifiersSection extends SubmitFormBaseComponent {\n constructor(props) {\n super(props)\n this.state = {\n phoneNumberSelected: false,\n customSelected: false,\n }\n this.styles = {\n ...this.styles,\n phoneNumberControl: {\n paddingTop: '8px',\n },\n phoneNumberControlShow: {\n maxHeight: '20em',\n overflow: 'hidden',\n transition: 'max-height 0.5s',\n },\n phoneNumberControlHide: {\n maxHeight: '0px',\n overflow: 'hidden',\n transition: 'max-height 0.5s',\n },\n customControlShow: {\n maxHeight: '20em',\n transition: 'max-height 0.5s',\n },\n customControlHide: {\n maxHeight: '0px',\n overflow: 'hidden',\n transition: 'max-height 0.5s',\n },\n }\n }\n\n renderTitleText = () => {\n return \n }\n\n renderHelpContent = () => {\n return (\n \n \n \n )\n }\n\n getAllClassifierOptions = () => {\n return [\n { label: 'Addresses', value: 'ADDRESS' },\n { label: 'AWS Access Key', value: 'AWSACCESSKEY' },\n { label: 'AWS Secret Key', value: 'AWSSECRETKEY' },\n { label: 'Azure Storage Account Key', value: 'AZURESTORAGEACCOUNTKEY' },\n { label: 'Azure Client Secret', value: 'AZURECLIENTSECRET' },\n { label: 'Azure Access Signature', value: 'AZURESAS' },\n { label: 'Bank Account Number', value: 'BANKACCOUNTNUMBER' },\n { label: 'Credit Card Numbers', value: 'CREDITCARD' },\n { label: 'Custom Classifier', value: 'CUSTOM' },\n { label: 'Date of Births', value: 'DOB' },\n { label: 'Drivers License', value: 'DRIVERSLICENSE' },\n { label: 'Emails', value: 'EMAIL' },\n { label: 'Encryption Key', value: 'ENCRYPTIONKEY' },\n { label: 'Full Names', value: 'FULLNAME' },\n { label: 'GCP API Key', value: 'GCPAPIKEY' },\n { label: 'GCP Service Account Key', value: 'GCPSERVICEACCOUNTKEY' },\n { label: 'Passport Number', value: 'PASSPORTNUMBER' },\n { label: 'Phone Numbers', value: 'PHONENUMBER' },\n { label: 'Postal Codes', value: 'POSTCODE' },\n { label: 'Tax Number', value: 'TAXNUMBER' },\n { label: 'Zip Codes', value: 'ZIPCODE' },\n { label: 'Social Insurance Numbers', value: 'SIN' },\n { label: 'Social Security Numbers', value: 'SSN' },\n ]\n }\n\n setClassifiers = values => {\n const allValue = (values || []).find(({ value }) => 'All' === value)\n if (allValue) {\n values = this.getAllClassifierOptions()\n }\n\n const valuesWithoutPhoneNumber = (values || []).find(\n ({ value }) => 'PHONENUMBER' === value\n )\n const customValue = (values || []).find(({ value }) => 'CUSTOM' === value)\n // eslint-disable-next-line react/no-access-state-in-setstate\n this.props.setFormFields({ [this.props.fieldKey]: new Set(values) })\n this.setState({\n phoneNumberSelected: undefined != valuesWithoutPhoneNumber,\n })\n this.setState({\n customSelected: undefined != customValue,\n })\n\n if (!customValue) {\n this.props.setFormFields({ customClassifiers: new Set() })\n }\n }\n\n setCustomClassifiers = values => {\n this.props.setFormFields({ customClassifiers: new Set(values) })\n }\n\n buildCustomOptions = () => {\n if (\n this.props.customClassifiers &&\n !this.props.customClassifiers.isEmpty()\n ) {\n return this.props.customClassifiers\n .map(cc => ({\n value: cc.get('srn'),\n label: cc.get('atomName'),\n }))\n .toJS()\n } else {\n return []\n }\n }\n\n setPhoneNumberClassifiers = event => {\n const { value } = event.target\n const currentState = this.props.formValues.phoneNumbers\n // const formErrors = _.omit(this.state.formErrors, 'classifiers')\n if (currentState.includes(value)) {\n this.props.setFormFields({ phoneNumbers: currentState.remove(value) })\n } else {\n this.props.setFormFields({ phoneNumbers: currentState.add(value) })\n }\n }\n\n renderFieldControls = () => {\n return (\n \n \n \n \n \n \n \n \n \n
    \n {this.props.loadingCustomClassifiers ? (\n \n ) : (\n \n \n \n \n \n \n )}\n
    \n \n \n \n \n \n \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n )\n }\n}\n\nexport default SubmitFormClassifiersSection\n","import React, { Fragment } from 'react'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SubmitFormBaseComponent, {\n DefaultFieldControlContainer,\n RadioInstructionMessage,\n} from './SubmitFormBaseComponent'\nimport messages from '../messages'\n\nexport default class ScanModeSection extends SubmitFormBaseComponent {\n renderTitleText = () => {\n return (\n \n )\n }\n\n renderHelpContent = () => {\n return (\n \n \n \n \n \n )\n }\n\n setScanMode = event => {\n this.props.setFormFields({ scanMode: event.target.value })\n }\n\n renderFieldControls = () => {\n return (\n \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n )\n }\n}\n","import React from 'react'\n\nimport { Input } from 'reactstrap'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SubmitFormBaseComponent, {\n DefaultFieldControlContainer,\n} from './SubmitFormBaseComponent'\n\nimport messages from '../messages'\nimport { doIfValidInt } from '../utils'\n\nconst MIN_VALUE = 300\nconst MAX_VALUE = 3000\n\nexport default class SubmitFormColumnSamplesSize extends SubmitFormBaseComponent {\n renderTitleText = () => {\n return (\n \n )\n }\n\n renderHelpContent = () => {\n return (\n \n )\n }\n\n setValue = event => {\n doIfValidInt(event, asNumber => {\n this.props.setFormFields({ [this.props.fieldKey]: asNumber })\n })\n }\n\n validateValue = ({ target: { value } }) => {\n if (!value || value > MAX_VALUE || value < MIN_VALUE) {\n const error = `Must be a 1umber between ${MIN_VALUE} and ${MAX_VALUE}`\n this.props.setFormErrors({ [this.props.fieldKey]: error })\n }\n }\n\n renderFieldControls = () => {\n return (\n \n
    \n \n
    \n
    \n )\n }\n}\n","import React from 'react'\n\nimport { Input } from 'reactstrap'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SubmitFormBaseComponent, {\n DefaultFieldControlContainer,\n} from './SubmitFormBaseComponent'\n\nimport messages from '../messages'\nimport { doIfValidInt } from '../utils'\n\nconst MIN_VALUE = 1\nconst MAX_VALUE = 1000\n\nexport default class SubmitFormOutputLimitSection extends SubmitFormBaseComponent {\n renderTitleText = () => {\n return \n }\n\n renderHelpContent = () => {\n return (\n \n )\n }\n\n setValue = event => {\n doIfValidInt(event, asNumber => {\n this.props.setFormFields({ [this.props.fieldKey]: asNumber })\n })\n }\n\n validateValue = ({ target: { value } }) => {\n if (!value || value > MAX_VALUE || value < MIN_VALUE) {\n const error = `Must be a 1umber between ${MIN_VALUE} and ${MAX_VALUE}`\n this.props.setFormErrors({ [this.props.fieldKey]: error })\n }\n }\n\n renderFieldControls = () => {\n return (\n \n
    \n \n
    \n
    \n )\n }\n}\n","import React from 'react'\n\nimport { Input } from 'reactstrap'\nimport SubmitFormBaseComponent, {\n DefaultFieldControlContainer,\n} from './SubmitFormBaseComponent'\nimport DynamicFormttedMessage from 'components/DynamicFormattedMessage'\n\nimport messages from '../messages'\nimport { doIfValidInt } from '../utils'\n\nconst MIN_VALUE = 1\nconst MAX_VALUE = 100\n\nexport default class SubmitFormMaxSamplesPerClassifierSection extends SubmitFormBaseComponent {\n renderTitleText = () => {\n return (\n \n )\n }\n\n renderHelpContent = () => {\n return (\n \n )\n }\n\n setValue = () => {\n doIfValidInt(event, asNumber => {\n this.props.setFormFields({ [this.props.fieldKey]: asNumber })\n })\n }\n\n validateValue = ({ target: { value } }) => {\n if (!value || value > MAX_VALUE || value < MIN_VALUE) {\n const error = `Must be a 1umber between ${MIN_VALUE} and ${MAX_VALUE}`\n this.props.setFormErrors({ [this.props.fieldKey]: error })\n }\n }\n\n renderFieldControls = () => {\n return (\n \n
    \n \n
    \n
    \n )\n }\n}\n","import React, { Fragment } from 'react'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SubmitFormBaseComponent, {\n DefaultFieldControlContainer,\n RadioInstructionMessage,\n} from './SubmitFormBaseComponent'\n\nimport messages from '../messages'\n\nexport default class SubmitFormOutputMode extends SubmitFormBaseComponent {\n renderTitleText = () => {\n return \n }\n\n renderHelpContent = () => {\n return (\n \n \n \n \n \n )\n }\n\n setOutputMode = event => {\n this.props.setFormFields({ outputMode: event.target.value })\n }\n\n renderFieldControls = () => {\n return (\n \n
    \n \n
    \n
    \n \n
    \n
    \n )\n }\n}\n","import React from 'react'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SubmitFormBaseComponent, {\n DefaultFieldControlContainer,\n} from './SubmitFormBaseComponent'\nimport { PlainCheckbox } from 'components/Checkbox'\nimport messages from '../messages'\n\nexport default class SubmitFormIncludeSamplesSection extends SubmitFormBaseComponent {\n renderTitleText = () => {\n return (\n \n )\n }\n\n renderHelpContent = () => {\n return (\n \n )\n }\n\n setIncludeSamples = newVal => {\n this.props.setFormFields({ includeSamples: newVal })\n }\n\n renderFieldControls = () => {\n return (\n \n
    \n \n Samples\n
    \n
    \n )\n }\n}\n","import React from 'react'\n\nimport { Input } from 'reactstrap'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport { PlainCheckbox } from 'components/Checkbox'\n\nimport SubmitFormBaseComponent, {\n DefaultFieldControlContainer,\n} from './SubmitFormBaseComponent'\n\nimport messages from '../messages'\nimport { isValidPEM } from '../utils'\n\nexport default class SubmitFormEncryptionSection extends SubmitFormBaseComponent {\n constructor(props) {\n super(props)\n this.styles = {\n ...this.styles,\n publicKeyInputHide: {\n maxHeight: '0px',\n overflow: 'hidden',\n transition: 'max-height 0.5s',\n },\n publicKeyInputShow: {\n maxHeight: '800px',\n transition: 'max-height 0.5s',\n },\n }\n }\n\n renderTitleText = () => {\n return (\n \n )\n }\n\n renderHelpContent = () => {\n return (\n \n \n \n )\n }\n\n setEncryptionEnabled = newVal => {\n this.props.setFormFields({ encryptionEnabled: newVal })\n }\n\n setPublicKey = event => {\n this.props.setFormFields({ publicKey: (event.target.value || '').trim() })\n }\n\n validatePublicKey = ({ target: { value } }) => {\n if (this.props.formValues.encryptionEnabled) {\n if (!this.props.formValues.publicKey) {\n this.props.setFormErrors({\n encryptionEnabled:\n 'Public key must be present if encyrption is enabeld',\n })\n } else if (!isValidPEM(value)) {\n this.props.setFormErrors({\n encryptionEnabled: 'Public key is invalid format must be pem format',\n publicKey: 'Public key is invalid format must be pem format',\n })\n }\n }\n }\n\n renderFieldControls = () => {\n return (\n \n
    \n \n {' '}\n
    \n \n \n \n \n
    \n \n
    \n \n
    \n )\n }\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Set } from 'immutable'\nimport _ from 'lodash'\nimport { ModalFooter } from 'reactstrap'\n\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport TextLink from 'components/TextLink'\n\nimport AuthenticationSection from './Form/SubmitFormAuthenticationSection'\nimport ClassifiersSection from './Form/SubmitFormClassifiersSection'\nimport ScanModeSection from './Form/SubmitFormScanModeSection'\nimport ColumnSampleSize from './Form/SubmitFormColumnSamplesSizeSection'\nimport OutputLimitSection from './Form/SubmitFormOutputLimitSection'\nimport MaxSamplesPerClassifier from './Form/SubmitFormMaxSamplesPerClassifierSection'\nimport OutputModeSection from './Form/SubmitFormOutputModeSection'\nimport IncludeSamplesSection from './Form/SubmitFormIncludeSamplesSection'\nimport EncryptionSection from './Form/SubmitFormEncryptionSection'\n\nimport messages from './messages'\nimport { isValidPEM } from './utils'\n\n/**\n * Form to submit a new classification\n */\nclass SubmitForm extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n classifiers: new Set(),\n customClassifiers: new Set(),\n authentication: {\n username: '',\n kvName: '',\n kvPath: '',\n },\n scanMode: 'QUICK_SCAN',\n outputMode: 'FINGERPRINT',\n outputLimit: 1000,\n columnSampleSize: 1000,\n encryptionEnabled: false,\n maxSamplesPerClassifier: 10,\n includeSamples: true,\n phoneNumbers: new Set(),\n publicKey: null,\n formErrors: {},\n }\n }\n\n setEncryptionEnabled = event => {\n // eslint-disable-next-line react/no-access-state-in-setstate\n const formErrors = _.omit(this.state.formErrors, 'encryptionEnabled')\n this.setState({ formErrors, encryptionEnabled: event.target.checked })\n }\n\n setPublicKey = event => {\n // eslint-disable-next-line react/no-access-state-in-setstate\n const formErrors = _.omit(this.state.formErrors, [\n 'encryptionEnabled',\n 'publicKey',\n ])\n this.setState({ formErrors, publicKey: (event.target.value || '').trim() })\n }\n\n validateFormValues = () => {\n const errors = {}\n if (this.state.classifiers.size === 0) {\n errors.classifiers = 'At least one classifier must be selected'\n }\n\n const phoneNumberClassifier = this.state.classifiers.find(classifier => {\n return 'PHONENUMBER' === classifier.value\n })\n if (phoneNumberClassifier && this.state.phoneNumbers.size === 0) {\n errors.classifiers =\n 'At least one selection must be made of phone numbers'\n }\n\n const customClassifier = this.state.classifiers.find(classifier => {\n return 'CUSTOM' === classifier.value\n })\n if (customClassifier && this.state.customClassifiers.size === 0) {\n errors.classifiers =\n 'At least one selection must be made of custom classifiers'\n }\n\n if (this.state.scanMode == null) {\n errors.scanMode = 'A scan mode must be selected'\n }\n\n if (this.state.outputMode == null) {\n errors.outputMode = 'An output mode must be selected'\n }\n\n if (this.props.isForDatabase) {\n if (\n !this.state.outputLimit ||\n this.state.outputLimit > 1000 ||\n this.state.outputLimit < 1\n ) {\n errors.outputLimit = 'Must be a number between 1 and 1000'\n }\n\n if (\n !this.state.columnSampleSize ||\n this.state.columnSampleSize > 3000 ||\n this.state.columnSampleSize < 300\n ) {\n errors.outputLimit = 'Must be a number between 300 and 3000'\n }\n\n if (\n !this.state.maxSamplesPerClassifier ||\n this.state.maxSamplesPerClassifier > 100 ||\n this.state.maxSamplesPerClassifier < 1\n ) {\n errors.maxSamplesPerClassifier = 'Must be a number between 1 and 100'\n }\n }\n\n if (this.state.encryptionEnabled) {\n if (!this.state.publicKey) {\n errors.encryptionEnabled =\n 'Public key must be present if encyrption is enabeld'\n } else if (!isValidPEM(this.state.publicKey)) {\n errors.encryptionEnabled =\n 'Public key is invalid format must be pem format'\n errors.publicKey = 'Public key is invalid format must be pem format'\n }\n }\n\n if (this.props.authenticationMode) {\n const invalid =\n !this.state.authentication.username ||\n !this.state.authentication.kvName ||\n !this.state.authentication.kvPath\n if (invalid) {\n errors.authentication = 'authentication details must be supplied'\n }\n }\n\n return errors\n }\n\n onSubmit = () => {\n const formErrors = this.validateFormValues()\n if (Object.keys(formErrors).length === 0) {\n const fields = this.props.isForDatabase\n ? [\n 'encryptionEnabled',\n 'outputLimit',\n 'includeSamples',\n 'columnSampleSize',\n 'maxSamplesPerClassifier',\n ]\n : ['encryptionEnabled', 'scanMode', 'outputMode', 'includeSamples']\n\n let formValues = _.pick(this.state, fields)\n\n // only send private key if user actually has enabled encryption\n if (this.state.encryptionEnabled) {\n formValues.publicKey = this.state.publicKey\n }\n\n if (this.props.authenticationMode) {\n formValues.dbUserName = this.state.authentication.username\n formValues.keyvaultName = this.state.authentication.kvName\n formValues.keyvaultPath = this.state.authentication.kvPath\n }\n\n formValues.classifiers = this.state.classifiers\n .toJS()\n .map(({ value }) => value)\n\n formValues.customClassifierSrns = this.state.customClassifiers\n .toJS()\n .map(({ value }) => value)\n\n // if the user only selects phone numbers from one country, don't want to\n // submit the 'PHONENUMBER' classifier, only want to submit for the\n // country the user wants\n if (this.state.classifiers.find(cl => cl.value === 'PHONENUMBER')) {\n if (!this.state.phoneNumbers.includes('PHONENUMBER')) {\n _.pull(formValues.classifiers, 'PHONENUMBER')\n this.state.phoneNumbers.forEach(countryPhoneNumbers => {\n formValues.classifiers.push(countryPhoneNumbers)\n })\n }\n }\n\n formValues.classifiers = formValues.classifiers.filter(\n cl => cl !== 'CUSTOM'\n )\n\n this.props.onSubmit(formValues)\n } else {\n this.setState({ formErrors })\n }\n }\n\n setFormFields = values => {\n const errorResetFields = Object.keys(values)\n if (errorResetFields.includes('phoneNumbers')) {\n errorResetFields.push('classifiers') // phone number is classifier\n }\n\n if (errorResetFields.includes('publicKey')) {\n errorResetFields.push('encryptionEnabled') // publicKey same part as encryptionEnabled\n }\n\n // eslint-disable-next-line react/no-access-state-in-setstate\n const formErrors = _.omit(this.state.formErrors, errorResetFields)\n this.setState({ formErrors, ...values })\n }\n\n /**\n * call to set there is an error on the form\n *\n * @param errors {Object} Errors will be an object with form like:\n * { [fieldName]: 'error message', ... }\n */\n setFormErrors = errors => {\n const formErrors = this.state.formErrors\n this.setState({ formErrors: Object.assign({}, formErrors, errors) })\n }\n\n render() {\n const sectionProps = {\n authenticationMode: this.props.authenticationMode,\n formErrors: this.state.formErrors,\n formValues: _.pick(this.state, [\n 'authentication',\n 'classifiers',\n 'customClassifiers',\n 'phoneNumbers',\n 'scanMode',\n 'outputMode',\n 'includeSamples',\n 'publicKey',\n 'encryptionEnabled',\n 'outputLimit',\n 'maxSamplesPerClassifier',\n 'columnSampleSize',\n ]),\n setFormFields: this.setFormFields,\n setFormErrors: this.setFormErrors,\n }\n\n return (\n
    \n \n {this.props.isForDatabase ? (\n \n ) : (\n \n )}\n\n {this.props.isForDatabase ? (\n \n ) : (\n \n )}\n\n {this.props.isForDatabase && (\n \n )}\n \n \n {this.props.authenticationMode && (\n \n )}\n\n {this.props.submitStatus.get('error') && (\n \n There was a problem submitting the job\n
    \n )}\n\n \n \n \n \n\n 0 ||\n this.props.submitStatus.get('loading')\n }\n >\n \n \n {' '}\n {this.props.submitStatus.get('loading') && (\n \n )}\n \n \n \n \n )\n }\n}\n\nSubmitForm.defaultProps = {\n isForDatabase: false,\n}\n\nSubmitForm.propTypes = {\n authenticationMode: PropTypes.string,\n isForDatabase: PropTypes.bool,\n onSubmit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n submitStatus: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n }).isRequired,\n customClassifiers: ImmutablePropTypes.list,\n loadingCustomClassifiers: PropTypes.bool,\n}\n\nexport default SubmitForm\n","import { createAction } from 'redux-actions'\nimport {\n RESET_JOB_REQUEST_SUCCESS,\n SET_PLATFORM_ACCOUNT,\n SET_PRIVATE_KEY,\n SUBMIT_JOB,\n SUBMIT_JOB_SUCCESS,\n SUBMIT_JOB_ERROR,\n} from './constants'\n\nexport const resetJobRequestSuccess = createAction(RESET_JOB_REQUEST_SUCCESS)\n\nexport const setPlatformAccount = createAction(SET_PLATFORM_ACCOUNT)\n\nexport const setPrivateKey = createAction(SET_PRIVATE_KEY)\n\nexport const submitJob = createAction(SUBMIT_JOB)\nexport const submitJobSuccess = createAction(SUBMIT_JOB_SUCCESS)\nexport const submitJobError = createAction(SUBMIT_JOB_ERROR)\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectDataClassificationDomain = state =>\n state.get('dataClassification') || Map()\n\nexport const selectPrivateKey = createSelector(\n selectDataClassificationDomain,\n dcDomain => dcDomain.get('privateKey')\n)\n\nexport const selectSubmitJob = createSelector(\n selectDataClassificationDomain,\n dcDomain => dcDomain.get('submitJob')\n)\n\nexport const selectPlatformAccounts = createSelector(\n selectDataClassificationDomain,\n dcDomain => dcDomain.get('platformAccounts')\n)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\n\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap'\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SubmitForm from './SubmitForm'\n\nimport { submitJob, resetJobRequestSuccess } from './actions'\n\nimport { selectSubmitJob } from './selectors'\n\nimport messages from './messages'\nimport { isDB, getAuthMode } from './utils'\n\nexport class DataClassificationModal extends Component {\n onSubmit = formValues => {\n this.props.submitJob({\n targetSrn: this.props.nodeData.srn,\n resourceAccount: this.props.nodeData.account,\n jobInfo: formValues,\n })\n }\n\n closeAndClear = () => {\n this.props.close()\n setTimeout(() => {\n // settimeout cause close is animated and we don't want the content to\n // flicker during the animation\n this.props.resetJobRequestSuccess()\n }, 500)\n }\n\n render() {\n return (\n \n \n \n \n \n {this.props.submitStatus.get('success') && (\n
    \n
    Job submitted Successfully
    \n
    \n \n
    \n
    \n )}\n {!this.props.submitStatus.get('success') && (\n \n )}\n
    \n
    \n )\n }\n}\n\nDataClassificationModal.propTypes = {\n open: PropTypes.bool,\n close: PropTypes.func.isRequired,\n nodeData: PropTypes.shape({\n srn: PropTypes.string.isRequired,\n account: PropTypes.string.isRequired,\n cloudType: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n serviceType: PropTypes.string,\n type: PropTypes.string.isRequired,\n __typename: PropTypes.string.isRequired,\n }).isRequired,\n resetJobRequestSuccess: PropTypes.func.isRequired,\n submitJob: PropTypes.func.isRequired,\n submitStatus: ImmutablePropTypes.map.isRequired,\n customClassifiers: ImmutablePropTypes.list,\n loadingCustomClassifiers: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n submitStatus: selectSubmitJob,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators({ submitJob, resetJobRequestSuccess }, dispatch)\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(DataClassificationModal)\n","import { handleActions } from 'redux-actions'\nimport { fromJS } from 'immutable'\nimport {\n RESET_JOB_REQUEST_SUCCESS,\n SET_PLATFORM_ACCOUNT,\n SET_PRIVATE_KEY,\n SUBMIT_JOB,\n SUBMIT_JOB_SUCCESS,\n SUBMIT_JOB_ERROR,\n} from './constants'\n\nconst initialState = fromJS({\n platformAccounts: {},\n privateKey: null,\n submitJob: {\n loading: false,\n success: false,\n error: false,\n },\n})\n\nconst dataClassificationReducer = handleActions(\n {\n [SET_PLATFORM_ACCOUNT]: (state, { payload }) =>\n state.setIn(\n ['platformAccounts', payload.accountId],\n payload.platformAccount\n ),\n [SET_PRIVATE_KEY]: (state, { payload }) =>\n state.set('privateKey', payload.key),\n\n [RESET_JOB_REQUEST_SUCCESS]: state =>\n state\n .setIn(['submitJob', 'loading'], false)\n .setIn(['submitJob', 'error'], false)\n .setIn(['submitJob', 'success'], false),\n [SUBMIT_JOB]: state =>\n state\n .setIn(['submitJob', 'loading'], true)\n .setIn(['submitJob', 'error'], false)\n .setIn(['submitJob', 'success'], false),\n [SUBMIT_JOB_SUCCESS]: state =>\n state\n .setIn(['submitJob', 'loading'], false)\n .setIn(['submitJob', 'error'], false)\n .setIn(['submitJob', 'success'], true),\n [SUBMIT_JOB_ERROR]: state =>\n state\n .setIn(['submitJob', 'loading'], false)\n .setIn(['submitJob', 'error'], true)\n .setIn(['submitJob', 'success'], false),\n },\n initialState\n)\n\nexport default dataClassificationReducer\n","import { all, put, takeLatest } from 'redux-saga/effects'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport { getClient } from 'apolloClient'\n\nimport { submitJobSuccess, submitJobError } from './actions'\nimport { SUBMIT_JOB } from './constants'\n\nfunction* submitJob(action) {\n const client = yield getClient()\n try {\n yield new Promise(resolve => {\n setTimeout(() => resolve(), 1000)\n })\n\n const result = yield client.mutate({\n variables: {\n ..._.pick(action.payload, ['jobInfo', 'targetSrn']),\n },\n mutation: gql`\n mutation createDataClassificationJob(\n $targetSrn: String!\n $jobInfo: DataClassificationJobInfo!\n ) {\n CreateDataClassificationConfig(\n input: { targetSrn: $targetSrn, enabled: true, jobInfo: $jobInfo }\n ) {\n id\n }\n }\n `,\n })\n\n const path = ['data', 'CreateDataClassificationConfig', 'id']\n const id = _.get(result, path)\n if (!id) {\n throw 'The result did not return an id at ' + path.join('/')\n }\n yield put(submitJobSuccess())\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log('An error happened submitting job classification: ', e)\n yield put(submitJobError())\n }\n}\n\nfunction* dataClassificationSaga() {\n yield all([takeLatest(SUBMIT_JOB, submitJob)])\n}\n\nexport default dataClassificationSaga\n","import React, { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport _ from 'lodash'\n\nimport BorderedCard from 'components/BorderedCard'\n\nimport ClassificationDataView from './ClassificationDataView'\nimport NoClassificationsView from './NoClassificationsView'\nimport SubmitFormModal from './SubmitFormModal'\n\nimport { fetchCustomClassifiers } from 'containers/DataClassifierData/actions'\nimport { setPrivateKey, submitJob } from './actions'\n\nimport { selectPrivateKey, selectSubmitJob } from './selectors'\nimport {\n selectCustomClassifiers,\n selectFetchingClassifiers,\n} from 'containers/DataClassifierData/selectors'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { DAEMON } from 'utils/constants'\nimport reducer from './reducers'\nimport sagas from './sagas'\n\nimport permissionChecker from 'containers/PermissionChecker'\n\nimport { isClassificationSupported } from './utils'\n\nconst VIEW_NONE = 'VIEW_NONE'\nconst VIEW_DATA = 'VIEW_DATA'\n\nclass DataClassification extends Component {\n constructor(props) {\n super(props)\n\n // choose which view to show based on whether there is already\n // classification data\n let view = VIEW_NONE\n if (\n ['dataobject', 'datacontainer', 'datastore'].includes(\n this.props.nodeData.__typename.toLowerCase()\n )\n ) {\n if (props.nodeData && _.isArray(props.nodeData.classificationSet)) {\n view = VIEW_DATA\n }\n }\n\n if (\n !props.customClassifiers ||\n (props.customClassifiers.isEmpty() && !props.loadingCustomClassifiers)\n ) {\n props.fetchCustomClassifiers()\n }\n\n this.state = {\n view,\n submitModalOpen: false,\n }\n\n this.styles = {\n container: {\n padding: '8px',\n },\n }\n }\n\n closeFormView = () => {\n this.setState({ submitModalOpen: false })\n }\n\n openFormView = () => {\n this.setState({ submitModalOpen: true })\n }\n\n renderCardContents = () => {\n const classificationSupported = isClassificationSupported(\n this.props.nodeData\n )\n const hasPermission = this.props.userHasPermission({\n permissionName: 'edit.dataclassificationconfig',\n swimlanes: [...this.props.nodeData.swimlaneSRNs],\n })\n switch (this.state.view) {\n case VIEW_DATA:\n return (\n \n )\n case VIEW_NONE:\n return (\n \n )\n }\n }\n\n render() {\n return (\n
    \n \n {this.renderCardContents()}\n
    \n )\n }\n}\n\nDataClassification.propTypes = {\n // ~ passed props ~\n dataContainerContent: ImmutablePropTypes.contains({\n contains: ImmutablePropTypes.contains({\n items: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n classificationSet: ImmutablePropTypes.listOf(PropTypes.string),\n })\n ),\n }),\n }),\n nodeData: PropTypes.shape({\n srn: PropTypes.string.isRequired,\n label: PropTypes.string,\n account: PropTypes.string.isRequired,\n classificationSet: PropTypes.arrayOf(PropTypes.string),\n swimlaneSRNs: PropTypes.arrayOf(PropTypes.string).isRequired,\n __typename: PropTypes.string.isRequired,\n }).isRequired,\n\n // ~ props from redux ~\n privateKey: PropTypes.string,\n\n // ~ bound action creators ~\n setPrivateKey: PropTypes.func.isRequired,\n\n // HOC misc.\n userHasPermission: PropTypes.func.isRequired,\n // custom classifiers stuff\n fetchCustomClassifiers: PropTypes.func.isRequired,\n customClassifiers: ImmutablePropTypes.list,\n loadingCustomClassifiers: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n privateKey: selectPrivateKey,\n submitJobStatus: selectSubmitJob,\n customClassifiers: selectCustomClassifiers,\n loadingCustomClassifiers: selectFetchingClassifiers,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n setPrivateKey,\n submitJob,\n fetchCustomClassifiers,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'dataClassification', reducer })\n\nconst withSaga = injectSaga({\n key: 'dataClassification',\n saga: sagas,\n mode: DAEMON,\n})\n\nexport default compose(\n permissionChecker,\n withReducer,\n withSaga,\n withConnect\n)(DataClassification)\n\n// connect a modal version of this page too\nimport DisconnectedModal from './SubmitFormModal'\nexport const Modal = compose(withReducer, withSaga)(DisconnectedModal)\n","/*\n * NotFoundPage Messages\n *\n * This contains all the text for the NotFoundPage component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n NotFound: {\n id: 'app.components.NotFoundPage.NotFound',\n defaultMessage: 'Oops! You missed the mark on that one',\n },\n})\n","/**\n * NotFoundPage\n *\n * This is the page we show when the user visits a url that doesn't have a route\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport React from 'react'\nimport { FormattedMessage } from 'react-intl'\nimport img from 'assets/iamghost.png'\nimport messages from './messages'\n\nexport default class NotFound extends React.PureComponent {\n // eslint-disable-line react/prefer-stateless-function\n render() {\n return (\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n )\n }\n}\n","/*\n *\n * RapSheet constants\n *\n */\n\nexport const SET_SELECTED_RESOURCE_ALERT_HISTORY =\n 'app/RapSheet/SET_SELECTED_RESOURCE_ALERT_HISTORY'\nexport const SET_DEDUPED_ALERTS = 'app/RapSheet/SET_DEDUPED_ALERTS'\n\nexport const GET_ACTIVE_ALERT_ACTIONS = 'app/RapSheet/GET_ACTIVE_ALERT_ACTIONS'\nexport const SET_ACTIVE_ALERT_ACTIONS = 'app/RapSheet/SET_ACTIVE_ALERT_ACTIONS'\nexport const SET_FILTER = 'app/RapSheet/SET_FILTER'\nexport const REMOVE_FILTER = 'app/RapSheet/REMOVE_FILTER'\nexport const RESET_RESOURCE = 'app/RapSheet/RESET_RESOURCE'\nexport const FETCH_CATEGORY_ROLLUP_DATA =\n 'app/RapSheet/FETCH_CATEGORY_ROLLUP_DATA'\nexport const SET_CATEGORY_ROLLUP_DATA = 'app/RapSheet/SET_CATEGORY_ROLLUP_DATA'\nexport const FETCH_FILTERED_ALERTS = 'app/RapSheet/FETCH_FILTERED_ALERTS'\nexport const TOGGLE_SUNBURST_VIEW = 'app/RapSheet/TOGGLE_SUNBURST_VIEW'\nexport const SET_RESOURCES = 'app/RapSheet/SET_RESOURCES'\nexport const SET_RESOURCES_LOADING = 'app/RapSheet/SET_RESOURCES_LOADING'\nexport const UPDATE_RAPSHEET_RESOURCE_MONITOR =\n 'app/RapSheet/UPDATE_RAPSHEET_RESOURCE_MONITOR'\n","/**\n *\n * Select\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport Select from 'react-select'\nimport _ from 'lodash'\nimport { isImmutable } from 'immutable'\n\nclass SelectBar extends React.Component {\n getValue = originalValue => {\n //The Select component from react-select requires `value` to be:\n // - one of the objects from `options` (an object like {label, value})\n // - A list of objects from `options`, if multiselect\n // - null or undefined\n //In order to make this component a bit easier to use, we will automatically convert a plain `value` prop to the {label, value} format.\n let rawValue = originalValue\n if (isImmutable(originalValue)) {\n rawValue = originalValue.toJS()\n }\n\n if (this.props.isMulti && Array.isArray(rawValue)) {\n return rawValue.map(this.getValue)\n }\n\n if (rawValue && typeof rawValue === 'object') {\n //`null` is considered an object so we need to also make sure rawValue is truthy\n\n //Check if we've just been passed in an object with {label, value}:\n if (rawValue.label !== undefined && rawValue.value !== undefined) {\n //If we have a `value` of {label, value} we can just pass it straight through to react-select!\n return rawValue\n }\n }\n\n //To create option groups, you can nest options inside other options. So we should flatten these first\n //(Note: assumes only one level of nesting)\n const orginialOptions = isImmutable(this.props.options)\n ? this.props.options.toJS()\n : this.props.options\n const options = []\n orginialOptions.forEach(option => {\n if (!option.options && option.value !== undefined) {\n options.push(option)\n } else if (option.options) {\n const { options: childOpts, ...currentOpt } = option\n options.push(currentOpt)\n options.push.apply(options, childOpts)\n }\n })\n\n //At this point, we've probably only been given the `value` part of some option.\n //So search though the options and find one with a matching value\n //If none, fall back to using the `rawValue`, which could be null or undefined\n return options.find(opt => _.isEqual(opt.value, rawValue)) || rawValue\n }\n\n render() {\n const options = isImmutable(this.props.options)\n ? this.props.options.toJS()\n : this.props.options\n const finalValue = this.getValue(this.props.value)\n const orderedOptions = this.props.autoSort\n ? _.sortBy(options, opt =>\n opt.label && typeof opt.label === 'string'\n ? opt.label.toLowerCase()\n : opt\n )\n : options\n return (\n \n )\n }\n}\n\nSelectBar.defaultProps = {\n options: [],\n autoSort: true,\n}\n\nSelectBar.propTypes = {\n disabled: PropTypes.bool,\n isMulti: PropTypes.bool,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.any,\n label: PropTypes.node,\n })\n ),\n autoSort: PropTypes.bool,\n onChange: PropTypes.func,\n //Value can either be a plain value (number, string, etc), or it can be an object like {label: \"One\", value: 1}.\n //If isMulti is true, it can also be an array of these\n value: PropTypes.any,\n}\n\nexport default SelectBar\n","export const SET_CHANGE_DETECTION_DATA =\n 'app/ChangeDetectionManager/SET_CHANGE_DETECTION_DATA'\n\nexport const ADD_CHANGE_DETECTION_PROPERTIES =\n 'app/ChangeDetectionManager/ADD_CHANGE_DETECTION_PROPERTY'\n\nexport const ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS =\n 'app/ChangeDetectionManager/ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS'\n\nexport const REMOVE_CHANGE_DETECTION_PROPERTIES =\n 'app/ChangeDetectionManager/REMOVE_CHANGE_DETECTION_PROPERTIES'\n\nexport const REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS =\n 'app/ChangeDetectionManager/REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS'\n\nexport const UPDATE_CHANGE_DETECTION_PROPERTY =\n 'app/ChangeDetectionManager/UPDATE_CHANGE_DETECTION_PROPERTY'\n\nexport const UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS =\n 'app/ChangeDetectionManager/UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS'\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport ReactTooltip from 'react-tooltip'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport uuid from 'uuid/v4'\nimport {\n selectAccountsBySrn,\n selectAccountsByAccountId,\n} from 'containers/SonraiData/selectors'\nimport CloudBadge from 'components/CloudBadge'\nimport {\n getAccountIdFromAccountSrn,\n getNodeViewPushParams,\n getAccountFromSrn,\n} from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport TextLink from 'components/TextLink'\nimport Hoverable from 'components/Hoverable'\n\nclass CloudAccount extends React.PureComponent {\n constructor(props) {\n super(props)\n this.uuid = uuid()\n\n this.styles = {\n textStyle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n clipboardButton: {\n marginBottom: '5px',\n width: '32px',\n height: '32px',\n },\n }\n }\n\n getCloudType = () => {\n const { accountSrn, accountId, accountsByAccountId } = this.props\n\n let srn = accountSrn\n\n if (!srn) {\n srn = accountId ? accountsByAccountId.getIn([accountId, 'srn']) : ''\n }\n\n if (srn && srn.includes(':')) {\n return srn.split(':')[1]\n }\n\n return ''\n }\n\n getDisplayName = () => {\n const {\n accountSrn,\n accountId,\n accountsByAccountId,\n accountsBySrn,\n hasAccountNumber,\n } = this.props\n const account = accountSrn\n ? accountsBySrn.get(accountSrn)\n : accountsByAccountId.get(accountId)\n\n if (account) {\n const friendlyName = account.get('friendlyName')\n const name = account.get('name')\n const id = getAccountIdFromAccountSrn(accountSrn)\n const display = friendlyName || name || id || this.props.accountId\n if (hasAccountNumber && display !== id) {\n return `${display} (${id})`\n }\n return display\n }\n\n return this.props.accountId || '-'\n }\n\n getContent = () => {\n return (\n \n \n {this.getDisplayName()}\n \n )\n }\n\n getAccountTooltip = () => {\n if (this.props.hasTooltip) {\n const { accountSrn, accountId, accountsByAccountId } = this.props\n const nodeId = accountSrn || accountsByAccountId.getIn([accountId, 'srn'])\n return (\n \n {getAccountFromSrn(nodeId)}\n \n )\n }\n }\n\n render() {\n const { accountSrn, accountId, accountsByAccountId } = this.props\n const nodeId = accountSrn || accountsByAccountId.getIn([accountId, 'srn'])\n\n if (this.props.hasLink && nodeId) {\n return (\n
    \n (\n
    \n \n {this.getContent()}\n \n {this.props.hasCopy &&\n (hovered ? (\n
    \n \n
    \n ) : (\n
    \n ))}\n
    \n )}\n />\n {this.getAccountTooltip()}\n
    \n )\n }\n\n if (this.props.static) {\n return this.getContent()\n }\n\n return (\n
    \n (\n
    \n {this.getContent()}\n {this.props.hasCopy &&\n (hovered ? (\n
    \n \n
    \n ) : (\n
    \n ))}\n
    \n )}\n />\n {this.getAccountTooltip()}\n
    \n )\n }\n}\n\nCloudAccount.defaultProps = {\n static: true,\n}\n\nCloudAccount.propTypes = {\n accountSrn: PropTypes.string,\n static: PropTypes.bool,\n hasLink: PropTypes.bool,\n accountsBySrn: ImmutablePropTypes.map.isRequired,\n accountsByAccountId: ImmutablePropTypes.map.isRequired,\n style: PropTypes.object,\n accountId: PropTypes.string,\n hasCopy: PropTypes.bool,\n hasTooltip: PropTypes.bool,\n hasAccountNumber: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n accountsBySrn: selectAccountsBySrn,\n accountsByAccountId: selectAccountsByAccountId,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default withConnect(CloudAccount)\n","export const SET_RELATIONS = 'app/SonraiData/SET_RELATIONS'\nexport const SET_TYPES = 'app/SonraiData/SET_TYPES'\nexport const RUN_INSPECTION_QUERY = 'app/SonraiData/RUN_INSPECTION_QUERY'\nexport const FETCH_SAVED_SEARCHES = 'app/SonraiData/FETCH_SAVED_SEARCHES'\nexport const FETCH_SAVED_SEARCHES_DETAILS =\n 'app/SonraiData/FETCH_SAVED_SEARCHES_DETAILS,'\nexport const SET_SAVED_SEARCHES = 'app/SonraiData/SET_SAVED_SEARCHES'\nexport const SET_ALLOWED_ROOT_QUERIES =\n 'app/SonraiData/SET_ALLOWED_ROOT_QUERIES'\nexport const SET_SAVED_SEARCH = 'all/SonraiData/SET_SAVED_SEARCH'\nexport const FETCH_SONRAI_SEARCHES = 'app/SonraiData/FETCH_SONRAI_SEARCHES'\nexport const SET_SONRAI_SEARCHES = 'app/SonraiData/SET_SONRAI_SEARCHES'\nexport const FETCH_ACCOUNTS = 'app/SonraiData/FETCH_ACCOUNTS'\nexport const FETCH_ACCOUNTS_SUCCESS = 'app/SonraiData/FETCH_ACCOUNTS_SUCCESS'\nexport const FETCH_SUBSCRIPTIONS = 'app/SonraiData/FETCH_SUBSCRIPTIONS'\nexport const FETCH_SUBSCRIPTIONS_SUCCESS =\n 'app/SonraiData/FETCH_SUBSCRIPTIONS_SUCCESS'\nexport const FETCH_TAGS = 'app/SonraiData/FETCH_TAGS'\nexport const FETCH_TAGS_SUCCESS = 'app/SonraiData/FETCH_TAGS_SUCCESS'\nexport const LOAD_TAG = 'app/SonraiData/LOAD_TAG'\nexport const SET_PIVOT = 'app/SolutionCenter/SET_PIVOT'\nexport const FETCH_DATA_CONTAINERS = 'app/SonraiData/FETCH_DATA_CONTAINERS'\nexport const FETCH_DATA_CONTAINERS_SUCCESS =\n 'app/SonraiData/FETCH_DATA_CONTAINERS_SUCCESS'\nexport const START_UPDATE_DATA_POLL = 'app/SonraiData/START_UPDATE_DATA_POLL'\nexport const STOP_UPDATE_DATA_POLL = 'app/SonraiData/STOP_UPDATE_DATA_POLL'\nexport const SET_QUERY_NAMES = 'app/SonraiData/SET_QUERY_NAMES'\nexport const SET_GRAPHQL_SCHEMA = 'app/SonraiData/SET_GRAPHQL_SCHEMA'\nexport const FETCH_GRAPHQL_SCHEMA = 'app/SonraiData/FETCH_GRAPHQL_SCHEMA'\nexport const REMOVE_SAVED_SEARCH = 'app/SonraiData/REMOVE_SAVED_SEARCH'\nexport const CHECK_IF_HAS_COLLECTORS = 'app/SonraiData/CHECK_IF_HAS_COLLECTORS'\nexport const SET_HAS_COLLECTORS = 'app/SonraiData/SET_HAS_COLLECTORS'\nexport const GET_MONITORED_RESOURCES_COUNT =\n 'app/SonraiData/GET_MONITORED_RESOURCES_COUNT'\nexport const SET_MONITORED_RESOURCES_COUNT =\n 'app/SonraiData/SET_MONITORED_RESOURCES_COUNT'\nexport const FETCH_SWIMLANES = 'app/SonraiData/FETCH_SWIMLANES'\nexport const FETCH_SWIMLANES_SUCCESS = 'app/SonraiData/FETCH_SWIMLANES_SUCCESS'\nexport const ADD_SWIMLANE = 'app/SonraiData/ADD_SWIMLANE'\nexport const REMOVE_SWIMLANE = 'app/SonraiData/REMOVE_SWIMLANE'\nexport const REMOVE_SWIMLANE_SUCCESS = 'app/SonraiData/REMOVE_SWIMLANE_SUCCESS'\nexport const UPDATE_SWIMLANE = 'app/SonraiData/UPDATE_SWIMLANE'\nexport const SET_GLOBAL_ERROR = 'app/SonraiData/SET_GLOBAL_ERROR'\nexport const FETCH_SONRAI_USERS = 'app/SonraiData/FETCH_SONRAI_USERS'\nexport const FETCH_SONRAI_USERS_SUCCESS =\n 'app/SonraiData/FETCH_SONRAI_USERS_SUCCESS'\nexport const UPDATE_SONRAI_USER = 'app/SonraiData/UPDATE_SONRAI_USER'\nexport const UPDATE_SONRAI_USER_SUCCESS =\n 'app/SonraiData/UPDATE_SONRAI_USER_SUCCESS'\nexport const GET_ALL_ROLES = 'app/SonraiData/GET_ALL_ROLES'\nexport const SET_ALL_ROLES = 'app/SonraiData/SET_ALL_ROLES'\nexport const ERR_ALL_ROLES = 'app/SonraiData/ERR_ALL_ROLES'\nexport const UPDATE_USER_ROLES = 'app/SonraiData/UPDATE_USER_ROLES'\nexport const UPDATE_USER_ROLES_SUCCESS =\n 'app/SonraiData/UPDATE_USER_ROLES_SUCCESS'\n\nexport const GET_BOTS = 'app/BotManagement/GET_BOTS'\nexport const SET_BOTS = 'app/BotManagement/SET_BOTS'\nexport const CREATE_BOT = 'app/BotManagement/CREATE_BOT'\nexport const CREATE_BOT_SUCCESS = 'app/BotManagement/CREATE_BOT_SUCCESS'\nexport const UPDATE_BOT_ASSIGNMENT = 'app/BotManagement/UPDATE_BOT_ASSIGNMENT'\nexport const UPDATE_BOT_ASSIGNMENT_SUCCESS =\n 'app/BotManagement/UPDATE_BOT_ASSIGNMENT_SUCCESS'\n\nexport const GET_EXEMPTED_IDENTITIES =\n 'app/BotManagement/GET_EXEMPTED_IDENTITIES'\nexport const SET_EXEMPTED_IDENTITIES =\n 'app/BotManagement/SET_EXEMPTED_IDENTITIES'\nexport const SET_EXEMPTED_IDENTITIES_ERROR =\n 'app/BotManagement/SET_EXEMPTED_IDENTITIES_ERROR'\n\nexport const ADD_EXEMPTED_IDENTITIES =\n 'app/BotManagement/ADD_EXEMPTED_IDENTITIES'\nexport const ADD_EXEMPTED_IDENTITIES_SUCCESS =\n 'app/BotManagement/ADD_EXEMPTED_IDENTITIES_SUCCESS'\n\nexport const DELETE_EXEMPTED_IDENTITIES =\n 'app/BotManagement/DELETE_EXEMPTED_IDENTITIES'\nexport const DELETE_EXEMPTED_IDENTITIES_SUCCESS =\n 'app/BotManagement/DELETE_EXEMPTED_IDENTITIES_SUCCESS'\n\nexport const VALIDATE_SOURCE_URL = 'app/BotManagement/VALIDATE_SOURCE_URL'\nexport const VALIDATE_SOURCE_URL_SUCCESS =\n 'app/BotManagement/VALIDATE_SOURCE_URL_SUCCESS'\nexport const CLEAR_SOURCE_URL_VALIDATION =\n 'app/BotManagement/CLEAR_SOURCE_URL_VALIDATION'\n\nexport const HANDLE_DELETE_BOTS = 'app/BotManagement/HANDLE_DELETE_BOTS'\nexport const HANDLE_DELETE_BOTS_SUCCESS =\n 'app/BotManagement/HANDLE_DELETE_BOTS_SUCCESS'\n\nexport const FETCH_OBJECTIVES = 'app/SonraiData/FETCH_OBJECTIVES'\nexport const FETCH_OBJECTIVES_ERROR = 'app/SonraiData/FETCH_OBJECTIVES_ERROR'\nexport const SET_OBJECTIVES = 'app/SonraiData/SET_OBJECTIVES'\n\nexport const ENABLE_OBJECTIVE = 'app/SonraiData/ENABLE_OBJECTIVE'\nexport const ENABLE_OBJECTIVE_SUCCESS =\n 'app/SonraiData/ENABLE_OBJECTIVE_SUCCESS'\nexport const ENABLE_OBJECTIVE_ERROR = 'app/SonraiData/ENABLE_OBJECTIVE_ERROR'\n\nexport const ENABLE_ALL_OBJECTIVES = 'app/SonraiData/ENABLE_ALL_OBJECTIVES'\nexport const ENABLE_ALL_OBJECTIVES_SUCCESS =\n 'app/SonraiData/ENABLE_ALL_OBJECTIVES_SUCCESS'\nexport const ENABLE_ALL_OBJECTIVES_ERROR =\n 'app/SonraiData/ENABLE_ALL_OBJECTIVES_ERROR'\n\nexport const ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE =\n 'app/SonraiData/ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE'\nexport const ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_SUCCESS =\n 'app/SonraiData/ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_SUCCESS'\nexport const ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_ERROR =\n 'app/SonraiData/ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_ERROR'\n\nexport const FETCH_SONRAI_CONFIG = 'app/SonraiData/FETCH_SONRAI_CONFIG'\nexport const SET_SONRAI_CONFIG = 'app/SonraiData/SET_SONRAI_CONFIG'\n","import {\n GET_ESCALATIONS,\n SET_ESCALATIONS,\n SET_ESCALATIONS_ERROR,\n CREATE_ESCALATION,\n CREATE_ESCALATION_SUCCESS,\n CREATE_ESCALATION_ERROR,\n DELETE_ESCALATION,\n DELETE_ESCALATION_SUCCESS,\n DELETE_ESCALATION_ERROR,\n FETCH_ESCALATION_FILTER_OPTIONS,\n FETCH_ESCALATION_FILTER_OPTIONS_SUCCESS,\n FETCH_ESCALATION_FILTER_OPTIONS_ERROR,\n UPDATE_ESCALATION,\n UPDATE_ESCALATION_SUCCESS,\n UPDATE_ESCALATION_ERROR,\n UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR,\n CLEAR_UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getEscalations = createAction(GET_ESCALATIONS)\nexport const setEscalations = createAction(SET_ESCALATIONS)\nexport const setEscalationsError = createAction(SET_ESCALATIONS_ERROR)\n\nexport const createEscalation = createAction(CREATE_ESCALATION)\nexport const createEscalationSuccess = createAction(CREATE_ESCALATION_SUCCESS)\nexport const createEscalationError = createAction(CREATE_ESCALATION_ERROR)\n\nexport const deleteEscalation = createAction(DELETE_ESCALATION)\nexport const deleteEscalationSuccess = createAction(DELETE_ESCALATION_SUCCESS)\nexport const deleteEscalationError = createAction(DELETE_ESCALATION_ERROR)\n\nexport const fetchEscalationOptions = createAction(\n FETCH_ESCALATION_FILTER_OPTIONS\n)\nexport const fetchEscalationOptionsSuccess = createAction(\n FETCH_ESCALATION_FILTER_OPTIONS_SUCCESS\n)\nexport const fetchEscalationOptionsError = createAction(\n FETCH_ESCALATION_FILTER_OPTIONS_ERROR\n)\n\nexport const updateEscalation = createAction(UPDATE_ESCALATION)\nexport const updateEscalationSuccess = createAction(UPDATE_ESCALATION_SUCCESS)\nexport const updateEscalationError = createAction(UPDATE_ESCALATION_ERROR)\nexport const updateEscalationSwimlaneCustomTicketError = createAction(\n UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR\n)\nexport const clearUpdateEscalationSwimlaneEditCustomTicketError = createAction(\n CLEAR_UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR\n)\n","/*\n *\n * RapSheet actions\n *\n */\n\nimport {\n SET_SELECTED_RESOURCE_ALERT_HISTORY,\n FETCH_CATEGORY_ROLLUP_DATA,\n SET_CATEGORY_ROLLUP_DATA,\n SET_RESOURCES,\n SET_RESOURCES_LOADING,\n FETCH_FILTERED_ALERTS,\n TOGGLE_SUNBURST_VIEW,\n UPDATE_RAPSHEET_RESOURCE_MONITOR,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const setSelectedResourceAlertHistory = createAction(\n SET_SELECTED_RESOURCE_ALERT_HISTORY\n)\n\nexport const fetchCategoryRollupData = createAction(FETCH_CATEGORY_ROLLUP_DATA)\nexport const setCategoryRollupData = createAction(SET_CATEGORY_ROLLUP_DATA)\nexport const fetchFilteredAlerts = createAction(FETCH_FILTERED_ALERTS)\nexport const toggleSunburstView = createAction(TOGGLE_SUNBURST_VIEW)\nexport const setResources = createAction(SET_RESOURCES)\nexport const setResourcesLoading = createAction(SET_RESOURCES_LOADING)\nexport const updateRapsheetResourceMonitor = createAction(\n UPDATE_RAPSHEET_RESOURCE_MONITOR\n)\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\nimport { Map } from 'immutable'\nimport SonraiBadge from 'components/SonraiBadge'\nimport { SONRAI_ORG_NAME } from 'appConstants'\nimport {\n selectSonraiUsers,\n selectSonraiUsersLoading,\n} from 'containers/SonraiData/selectors'\nimport ProfileIcon from 'components/ProfileIcon'\nimport TextLink from 'components/TextLink'\nimport qs from 'query-string'\nimport { TextLineShimmer } from 'components/ShimmerLoader'\nimport { stripTags } from 'utils/sonraiUtils'\n\nclass UserWidget extends React.Component {\n styles = {\n container: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n alignItems: 'center',\n },\n }\n\n getPushLink = srn => {\n return {\n pathname: `/App/UserManagement/User`,\n search: qs.stringify({\n srn: srn,\n }),\n }\n }\n\n render() {\n if (this.props.loading) {\n return (\n
    \n \n
    \n \n
    \n
    \n )\n }\n\n if (!this.props.srn || typeof this.props.srn !== 'string') {\n return '-'\n }\n\n if (\n this.props.srn.includes('SonraiComponent') ||\n !this.props.srn.startsWith('srn:') ||\n this.props.srn.includes(SONRAI_ORG_NAME)\n ) {\n return \n }\n\n const user = this.props.users.get(this.props.srn) || Map()\n\n if (user.isEmpty()) {\n return (\n {`Unavailable - ${this.props.srn}`}\n )\n }\n\n return (\n
    \n \n
    \n {this.props.noLink ? (\n stripTags(user.get('name'))\n ) : (\n \n {stripTags(user.get('name'))}\n \n )}\n
    \n
    \n )\n }\n}\n\nUserWidget.propTypes = {\n users: ImmutablePropTypes.map,\n loading: PropTypes.bool,\n srn: PropTypes.string,\n table: PropTypes.bool,\n noLink: PropTypes.bool,\n}\nconst mapStateToProps = createStructuredSelector({\n users: selectSonraiUsers,\n loading: selectSonraiUsersLoading,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default compose(withConnect)(UserWidget)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Color from 'color'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass Checkbox extends React.PureComponent {\n renderCheckbox = () => {\n const styles = {\n svg: {\n width: '22px',\n height: '22px',\n position: 'relative',\n },\n }\n if (this.props.checked && this.props.semiChecked) {\n return (\n \n \n \n \n )\n }\n\n if (this.props.checked) {\n return (\n \n \n \n \n )\n }\n\n return (\n \n \n \n )\n }\n\n render() {\n const styles = {\n base: {\n overflow: 'visible',\n display: 'inline-block',\n },\n }\n\n return (\n
    \n
    this.props.onChange(!this.props.checked)}>\n \n {this.renderCheckbox()}\n
    \n
    \n )\n }\n}\n\nCheckbox.propTypes = {\n agGridTheme: PropTypes.bool,\n checked: PropTypes.bool,\n onChange: PropTypes.func,\n theme: themeShape,\n semiChecked: PropTypes.bool,\n}\n\nexport default themeable(Checkbox)\n","/**\n *\n * Checkbox\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nimport Hoverable from 'components/Hoverable'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport './checkbox.css'\nclass Checkbox extends React.PureComponent {\n render() {\n const styles = {\n base: {\n height: '22px',\n width: '22px',\n overflow: 'visible',\n },\n wrapper: {\n cursor: 'pointer',\n position: 'relative',\n top: '-13px',\n left: '-13px',\n width: '48px',\n height: '48px',\n borderRadius: '50%',\n transition: 'background 0.2s ease',\n },\n circle: {\n background: 'rgba(34, 50, 84, 0.03)',\n },\n svg: {\n width: '22px',\n height: '22px',\n position: 'relative',\n top: '12px',\n left: '12px',\n fill: 'none',\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n stroke: this.props.checked\n ? this.props.theme.primary\n : this.props.theme.secondary,\n strokeWidth: 1.5,\n },\n }\n\n return (\n
    \n \n
    this.props.onChange(this.props.value)}>\n {}}\n />\n \n
    \n
    \n
    \n )\n }\n}\n\nCheckbox.defaultProps = {\n scale: 1,\n}\n\nCheckbox.propTypes = {\n checked: PropTypes.bool,\n onChange: PropTypes.func,\n theme: themeShape,\n value: PropTypes.bool,\n}\n\nexport default themeable(Checkbox)\nexport { default as PlainCheckbox } from './PlainCheckbox'\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ContentLoader from 'react-content-loader'\n\nconst TextLineShimmer = ({\n baseLength = 175,\n containerWidth = 300,\n randomize = false,\n ...props\n}) => {\n const random = Math.random() * (1 - 0.7) + 0.7\n\n return (\n \n \n \n \n \n )\n}\n\nTextLineShimmer.propTypes = {\n baseLength: PropTypes.number,\n containerWidth: PropTypes.number,\n randomize: PropTypes.bool,\n}\n\nexport default TextLineShimmer\n","import React from 'react'\nimport ContentLoader from 'react-content-loader'\n\nconst SquareShimmer = ({ size = 50, ...props }) => {\n return (\n \n \n \n \n \n )\n}\n\nexport default SquareShimmer\n","import React from 'react'\n\nimport SquareShimmer from './SquareShimmer'\n\nconst IconShimmer = props => {\n return \n}\n\nexport default IconShimmer\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ContentLoader from 'react-content-loader'\n\nconst TitleShimmer = ({ width = 80, ...props }) => {\n return (\n \n \n \n \n \n )\n}\n\nTitleShimmer.propTypes = {\n width: PropTypes.number,\n}\n\nexport default TitleShimmer\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ContentLoader from 'react-content-loader'\nimport sizeMe from 'components/SizeMe'\n\nconst BlockShimmer = ({ width = 50, height = 30 }) => {\n return (\n \n \n \n \n \n )\n}\n\nBlockShimmer.propTypes = {\n width: PropTypes.number,\n height: PropTypes.number,\n}\n\nexport default sizeMe(BlockShimmer)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ContentLoader from 'react-content-loader'\n\nconst RectangleShimmer = ({ width = 50, height = 30, ...props }) => {\n return (\n \n \n \n \n \n )\n}\n\nRectangleShimmer.propTypes = {\n width: PropTypes.number,\n height: PropTypes.number,\n}\n\nexport default RectangleShimmer\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n loading: {\n id: 'app.components.LoadingAnim.loading',\n defaultMessage: 'Loading...',\n },\n error: {\n id: 'app.components.LoadingAnim.error',\n defaultMessage: \"Ooops...that wasn't supposed to happen!\",\n },\n contact: {\n id: 'app.components.LoadingAnim.contact',\n defaultMessage:\n \"We'd love to hear about it, though! You can contact support at\",\n },\n})\n","/**\n *\n * LoadingAnim\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { FormattedMessage } from 'react-intl'\nimport ProgressBar from 'progressbar.js'\n\nimport fail from 'assets/sadcloud.png'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { SUPPORT_EMAIL } from 'appConstants'\nimport messages from './messages'\nexport class LoadingAnim extends React.Component {\n constructor(props) {\n super(props)\n }\n componentDidMount() {\n const start = this.props.inverse ? 1 : 0\n const end = this.props.inverse ? 0 : 1\n\n var path = new ProgressBar.Path('#loading_logo', {\n duration: 10000,\n from: {\n color: this.props.theme.secondary,\n width: 2,\n },\n to: {\n color: this.props.theme.primary,\n width: 8,\n },\n strokeWidth: 4,\n easing: 'easeInOut',\n step: (state, shape) => {\n shape.path.setAttribute('stroke', state.color)\n shape.path.setAttribute('stroke-width', state.width)\n },\n })\n path.set(start)\n path.animate(end)\n this.interval = setInterval(() => {\n path.set(end)\n path.animate(start)\n }, 10500)\n this.interval2 = setInterval(() => {\n path.set(start)\n path.animate(end)\n }, 21000)\n }\n\n componentWillUnmount() {\n clearInterval(this.interval)\n clearInterval(this.interval2)\n }\n\n render() {\n if (this.props.error) {\n return (\n
    \n
    \n \n
    \n \n

    \n \n

    \n

    \n {' '}\n {SUPPORT_EMAIL}\n

    \n
    \n
    \n )\n }\n\n return (\n
    \n
    \n \n
    \n \n \n \n
    \n \n \n
    \n \n
    \n
    \n )\n }\n}\n\nLoadingAnim.propTypes = {\n error: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n inverse: PropTypes.bool,\n theme: themeShape,\n}\n\nexport default themeable(LoadingAnim)\n","/*\n *\n * PlatformSettingsData actions\n *\n */\n\nimport {\n GET_INTEGRATIONS,\n SET_INTEGRATIONS,\n SET_INTEGRATIONS_ERROR,\n CREATE_INTEGRATION,\n CREATE_INTEGRATION_SUCCESS,\n CREATE_INTEGRATION_ERROR,\n DELETE_INTEGRATION,\n DELETE_INTEGRATION_SUCCESS,\n DELETE_INTEGRATION_ERROR,\n UPDATE_INTEGRATION,\n UPDATE_INTEGRATION_SUCCESS,\n UPDATE_INTEGRATION_ERROR,\n UPDATE_INTEGRATION_CONFIG,\n UPDATE_INTEGRATION_CONFIG_SUCCESS,\n UPDATE_INTEGRATION_CONFIG_ERROR,\n ASSIGN_INTEGRATION,\n ASSIGN_INTEGRATION_SUCCESS,\n ASSIGN_INTEGRATION_ERROR,\n DELETE_INTEGRATION_ASSIGNMENT,\n DELETE_INTEGRATION_ASSIGNMENT_SUCCESS,\n DELETE_INTEGRATION_ASSIGNMENT_ERROR,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getIntegrations = createAction(GET_INTEGRATIONS)\nexport const setIntegrations = createAction(SET_INTEGRATIONS)\nexport const setIntegrationsError = createAction(SET_INTEGRATIONS_ERROR)\n\nexport const createIntegration = createAction(CREATE_INTEGRATION)\nexport const createIntegrationSuccess = createAction(CREATE_INTEGRATION_SUCCESS)\nexport const createIntegrationError = createAction(CREATE_INTEGRATION_ERROR)\n\nexport const deleteIntegration = createAction(DELETE_INTEGRATION)\nexport const deleteIntegrationSuccess = createAction(DELETE_INTEGRATION_SUCCESS)\nexport const deleteIntegrationError = createAction(DELETE_INTEGRATION_ERROR)\n\nexport const updateIntegration = createAction(UPDATE_INTEGRATION)\nexport const updateIntegrationSuccess = createAction(UPDATE_INTEGRATION_SUCCESS)\nexport const updateIntegrationError = createAction(UPDATE_INTEGRATION_ERROR)\n\nexport const updateIntegrationConfig = createAction(UPDATE_INTEGRATION_CONFIG)\nexport const updateIntegrationConfigSuccess = createAction(\n UPDATE_INTEGRATION_CONFIG_SUCCESS\n)\nexport const updateIntegrationConfigError = createAction(\n UPDATE_INTEGRATION_CONFIG_ERROR\n)\n\nexport const assignIntegration = createAction(ASSIGN_INTEGRATION)\nexport const assignIntegrationSuccess = createAction(ASSIGN_INTEGRATION_SUCCESS)\nexport const assignIntegrationError = createAction(ASSIGN_INTEGRATION_ERROR)\n\nexport const deleteIntegrationAssignment = createAction(\n DELETE_INTEGRATION_ASSIGNMENT\n)\nexport const deleteIntegrationAssignmentSuccess = createAction(\n DELETE_INTEGRATION_ASSIGNMENT_SUCCESS\n)\nexport const deleteIntegrationAssignmentError = createAction(\n DELETE_INTEGRATION_ASSIGNMENT_ERROR\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ReactMarkdown from 'react-markdown'\nimport './styles.css'\n\nconst LinkRenderer = props => {\n return (\n \n {props.children}\n \n )\n}\n\nLinkRenderer.propTypes = {\n children: PropTypes.node,\n href: PropTypes.string,\n}\n\nexport class MarkdownDisplay extends React.Component {\n render() {\n return (\n
    \n \n
    \n )\n }\n}\n\nMarkdownDisplay.propTypes = {\n content: PropTypes.string,\n}\n\nexport default MarkdownDisplay\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n policyTitleLabel: {\n id: 'app.containers.PolicyEdit.policyTitleLabel',\n defaultMessage: 'Title',\n },\n policyDescriptionLabel: {\n id: 'app.containers.PolicyEdit.policyDescriptionLabel',\n defaultMessage: 'Description',\n },\n policySearchLabel: {\n id: 'app.containers.PolicyEdit.policySearchLabel',\n defaultMessage: 'Search',\n },\n policyAlertingLevelLabel: {\n id: 'app.containers.PolicyEdit.policyAlertingLevelLabel',\n defaultMessage: 'Alert Level',\n },\n policyLastTriggeredLabel: {\n id: 'app.containers.PolicyEdit.policyLastTriggeredLabel',\n defaultMessage: 'Last Run',\n },\n policyFindingsLabel: {\n id: 'app.containers.PolicyEdit.policyFindingsLabel',\n defaultMessage: 'Findings',\n },\n cancelButton: {\n id: 'app.containers.PolicyEdit.cancelButton',\n defaultMessage: 'Cancel',\n },\n createButton: {\n id: 'app.containers.PolicyEdit.createButton',\n defaultMessage: 'Create',\n },\n addButton: {\n id: 'app.containers.PolicyEdit.addButton',\n defaultMessage: 'Add',\n },\n saveEditButton: {\n id: 'app.containers.PolicyEdit.saveEditButton',\n defaultMessage: 'Save',\n },\n policyLabel: {\n id: 'app.containers.PolicyEdit.policyLabel',\n defaultMessage: 'Policy',\n },\n evalTypeLabel: {\n id: 'app.containers.PolicyEdit.evalTypeLabel',\n defaultMessage: 'Trigger',\n },\n remTypeLabel: {\n id: 'app.containers.PolicyEdit.remTypeLabel',\n defaultMessage: 'Remediation Type',\n },\n evalTypeCountLabel: {\n id: 'app.containers.PolicyEdit.evalTypeCountLabel',\n defaultMessage: 'Count',\n },\n evalOpGTLabel: {\n id: 'app.containers.PolicyEdit.evalOpGTLabel',\n defaultMessage: 'Greater Than',\n },\n evalOpLTLabel: {\n id: 'app.containers.PolicyEdit.evalOpLTLabel',\n defaultMessage: 'Less Than',\n },\n evalOpEQLabel: {\n id: 'app.containers.PolicyEdit.evalOpEQLabel',\n defaultMessage: 'Equal To',\n },\n editPolicyHeader: {\n id: 'app.containers.PolicyEdit.editPolicyHeader',\n defaultMessage: 'Edit Policy',\n },\n})\n","import ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport permissionChecker from './index'\n\n/**\n * This react component will only render its children if the currently\n * logged in user has the permission passed by prop 'permissionName'\n */\nexport function WithPermission(props) {\n let renderIt = false\n if (props.multiPermissions) {\n props.multiPermissions.forEach(permission => {\n if (\n props.userHasPermission({\n permissionName: permission.permissionName,\n swimlanes: permission.swimlanes,\n resourceId: permission.resourceId,\n })\n ) {\n renderIt = true\n }\n })\n } else {\n renderIt = props.userHasPermission({\n permissionName: props.permissionName,\n swimlanes: props.swimlanes,\n resourceId: props.resourceId,\n })\n }\n\n if (props.invertCheck) {\n renderIt = !renderIt\n }\n if (renderIt) {\n return props.children\n } else {\n return null\n }\n}\n\nPropTypes.defaultProps = {\n invertCheck: false,\n}\n\nPropTypes.propTypes = {\n permissionName: PropTypes.string,\n resourceId: PropTypes.oneOfType([\n PropTypes.string,\n // if func, it's a function that can be used to generate the resourceId\n // from the args defined in 'resourceIdGeneratorArgs'\n PropTypes.func,\n ]),\n swimlanes: PropTypes.arrayOf(PropTypes.string),\n\n // if you have multiple permissions, passs it this bad boy\n multiPermissions: PropTypes.arrayOf(\n PropTypes.shape({\n permissionName: PropTypes.string,\n resourceId: PropTypes.string,\n swimlanes: PropTypes.arrayOf(PropTypes.string),\n })\n ),\n\n // this is the contents of the auth0 id_token\n userData: ImmutablePropTypes.map,\n\n // userHasPermission populated from permissionChecker hoc\n userHasPermission: PropTypes.func.isRequired,\n\n // whether we should invert the permission check, and only render the\n // children if user doesn't have permission. Instead of passing this try\n // using WithoutPermission component instead\n invertCheck: PropTypes.bool,\n}\n\nexport default permissionChecker(WithPermission)\n","/**\n *\n * BarLoadingAnimation\n *\n */\n\nimport React from 'react'\n\nclass BarLoadingAnimation extends React.PureComponent {\n render() {\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n )\n }\n}\n\nBarLoadingAnimation.propTypes = {}\n\nexport default BarLoadingAnimation\n","var map = {\n\t\"./index.js\": 2021\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2020;","\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!./light-bootstrap-dashboard.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!./light-bootstrap-dashboard.css\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!./light-bootstrap-dashboard.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/*!\\n\\n =========================================================\\n * Light Bootstrap Dashboard React - v1.1.0\\n * Based on Light Bootstrap Dashboard - v1.3.0\\n =========================================================\\n\\n * Product Page: http://www.creative-tim.com/product/light-bootstrap-dashboard-react\\n * Copyright 2017 Creative Tim (http://www.creative-tim.com)\\n * Licensed under MIT (https://github.com/creativetimofficial/light-bootstrap-dashboard-react/blob/master/LICENSE.md)\\n\\n =========================================================\\n\\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n\\n */\\n/* light colors */\\n@keyframes spin {\\n from {\\n transform: rotate(0deg);\\n }\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n\\n@-webkit-keyframes spin {\\n from {\\n -webkit-transform: rotate(0deg);\\n }\\n to {\\n -webkit-transform: rotate(360deg);\\n }\\n}\\n\\n@-moz-keyframes spin {\\n from {\\n -moz-transform: rotate(0deg);\\n }\\n to {\\n -moz-transform: rotate(360deg);\\n }\\n}\\n\\n@-ms-keyframes spin {\\n from {\\n -ms-transform: rotate(0deg);\\n }\\n to {\\n -ms-transform: rotate(360deg);\\n }\\n}\\n\\n/* Font Smoothing */\\nbody,\\nh1,\\n.h1,\\nh2,\\n.h2,\\nh3,\\n.h3,\\nh4,\\n.h4,\\nh5,\\n.h5,\\nh6,\\n.h6,\\np,\\n.navbar,\\n.brand,\\n.btn-simple,\\n.alert,\\na,\\n.td-name,\\ntd,\\nbutton.close {\\n -moz-osx-font-smoothing: grayscale;\\n -webkit-font-smoothing: antialiased;\\n font-family: 'Roboto', 'Helvetica Neue', Arial, sans-serif;\\n font-weight: 400;\\n}\\n\\nh1,\\n.h1,\\nh2,\\n.h2,\\nh3,\\n.h3,\\nh4,\\n.h4 {\\n font-weight: 300;\\n margin: 30px 0 15px;\\n}\\n\\nh1,\\n.h1 {\\n font-size: 52px;\\n}\\n\\nh2,\\n.h2 {\\n font-size: 36px;\\n}\\n\\nh3,\\n.h3 {\\n font-size: 28px;\\n margin: 20px 0 10px;\\n}\\n\\nh4,\\n.h4 {\\n font-size: 22px;\\n line-height: 30px;\\n}\\n\\nh5,\\n.h5 {\\n font-size: 16px;\\n margin-bottom: 15px;\\n}\\n\\nh6,\\n.h6 {\\n font-size: 14px;\\n font-weight: 600;\\n text-transform: uppercase;\\n}\\n\\np {\\n font-size: 16px;\\n line-height: 1.5;\\n}\\n\\nh1 small,\\nh2 small,\\nh3 small,\\nh4 small,\\nh5 small,\\nh6 small,\\n.h1 small,\\n.h2 small,\\n.h3 small,\\n.h4 small,\\n.h5 small,\\n.h6 small,\\nh1 .small,\\nh2 .small,\\nh3 .small,\\nh4 .small,\\nh5 .small,\\nh6 .small,\\n.h1 .small,\\n.h2 .small,\\n.h3 .small,\\n.h4 .small,\\n.h5 .small,\\n.h6 .small {\\n color: #9a9a9a;\\n font-weight: 300;\\n line-height: 1.5;\\n}\\n\\nh1 small,\\nh2 small,\\nh3 small,\\nh1 .small,\\nh2 .small,\\nh3 .small {\\n font-size: 60%;\\n}\\n\\nh1 .subtitle {\\n display: block;\\n margin: 0 0 30px;\\n}\\n\\n.text-muted {\\n color: #9a9a9a;\\n}\\n\\n.text-primary,\\n.text-primary:hover {\\n color: #1d62f0 !important;\\n}\\n\\n.text-info,\\n.text-info:hover {\\n color: #1dc7ea !important;\\n}\\n\\n.text-success,\\n.text-success:hover {\\n color: #87cb16 !important;\\n}\\n\\n.text-warning,\\n.text-warning:hover {\\n color: #ff9500 !important;\\n}\\n\\n.text-danger,\\n.text-danger:hover {\\n color: #ff4a55 !important;\\n}\\n\\n/* General overwrite */\\nbody,\\n.wrapper {\\n min-height: 100vh;\\n position: relative;\\n background-color: white;\\n}\\n\\na {\\n color: #1dc7ea;\\n}\\na:hover,\\na:focus {\\n color: #42d0ed;\\n text-decoration: none;\\n}\\n\\na:focus,\\na:active,\\nbutton::-moz-focus-inner,\\ninput::-moz-focus-inner,\\ninput[type='reset']::-moz-focus-inner,\\ninput[type='button']::-moz-focus-inner,\\ninput[type='submit']::-moz-focus-inner,\\nselect::-moz-focus-inner,\\ninput[type='file'] > input[type='button']::-moz-focus-inner {\\n outline: 0;\\n}\\n\\n.ui-slider-handle:focus,\\n.navbar-toggle,\\ninput:focus {\\n outline: 0 !important;\\n}\\n\\n/* Animations */\\n.form-control,\\n.input-group-addon,\\n.tagsinput,\\n.navbar,\\n.navbar .alert {\\n -webkit-transition: all 300ms linear;\\n -moz-transition: all 300ms linear;\\n -o-transition: all 300ms linear;\\n -ms-transition: all 300ms linear;\\n transition: all 300ms linear;\\n}\\n\\n.sidebar .nav a,\\n.table > tbody > tr .td-actions .btn {\\n -webkit-transition: all 150ms ease-in;\\n -moz-transition: all 150ms ease-in;\\n -o-transition: all 150ms ease-in;\\n -ms-transition: all 150ms ease-in;\\n transition: all 150ms ease-in;\\n}\\n\\n.btn {\\n -webkit-transition: all 100ms ease-in;\\n -moz-transition: all 100ms ease-in;\\n -o-transition: all 100ms ease-in;\\n -ms-transition: all 100ms ease-in;\\n transition: all 100ms ease-in;\\n}\\n\\n.fa {\\n width: 18px;\\n text-align: center;\\n}\\n\\n.margin-top {\\n margin-top: 50px;\\n}\\n\\n.wrapper {\\n position: relative;\\n top: 0;\\n height: 100vh;\\n}\\n\\n.sidebar {\\n position: fixed;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n width: 260px;\\n display: block;\\n z-index: 1;\\n color: #fff;\\n font-weight: 200;\\n background-size: cover;\\n background-position: center center;\\n}\\n.sidebar .sidebar-wrapper {\\n position: relative;\\n height: calc(100vh - 75px);\\n overflow: auto;\\n width: 260px;\\n z-index: 4;\\n padding-bottom: 30px;\\n}\\n.sidebar .sidebar-background {\\n position: absolute;\\n z-index: 1;\\n height: 100%;\\n width: 100%;\\n display: block;\\n top: 0;\\n left: 0;\\n background-size: cover;\\n background-position: center center;\\n}\\n.sidebar .logo {\\n padding: 10px 30px;\\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\\n position: relative;\\n z-index: 4;\\n}\\n.sidebar .logo p {\\n float: left;\\n font-size: 20px;\\n margin: 10px 10px;\\n color: #ffffff;\\n line-height: 20px;\\n font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\\n}\\n.sidebar .logo a.logo-mini {\\n float: left;\\n text-align: center;\\n width: 30px;\\n margin-right: 15px;\\n}\\n.sidebar .logo a.logo-mini img {\\n width: 40px;\\n margin-left: -3px;\\n display: block;\\n margin-top: 2px;\\n}\\n.sidebar .logo a.logo-normal {\\n display: block;\\n}\\n.sidebar .logo .logo-img {\\n width: 34px;\\n display: inline-block;\\n height: 34px;\\n margin-left: -2px;\\n margin-top: -2px;\\n margin-right: 10px;\\n border-radius: 30px;\\n text-align: center;\\n}\\n.sidebar .logo-tim {\\n border-radius: 50%;\\n border: 1px solid #333;\\n display: block;\\n height: 61px;\\n width: 61px;\\n float: left;\\n overflow: hidden;\\n}\\n.sidebar .logo-tim img {\\n width: 60px;\\n height: 60px;\\n}\\n.sidebar .nav {\\n margin-top: 20px;\\n}\\n.sidebar .nav li > a {\\n color: #ffffff;\\n margin: 5px 15px;\\n opacity: 0.86;\\n border-radius: 4px;\\n}\\n.sidebar .nav li:hover > a,\\n.sidebar .nav li.open > a,\\n.sidebar .nav li.open > a:focus,\\n.sidebar .nav li.open > a:hover {\\n background: rgba(255, 255, 255, 0.13);\\n opacity: 1;\\n}\\n.sidebar .nav li.active > a {\\n color: #ffffff;\\n opacity: 1;\\n background: rgba(255, 255, 255, 0.23);\\n}\\n.sidebar .nav p {\\n margin: 0;\\n line-height: 30px;\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n}\\n.sidebar .nav .caret {\\n top: 24px;\\n position: absolute;\\n right: 15px;\\n}\\n.sidebar .nav i {\\n font-size: 28px;\\n float: left;\\n margin-right: 15px;\\n line-height: 30px;\\n width: 30px;\\n text-align: center;\\n}\\n\\n.sidebar .logo,\\nbody > .navbar-collapse .logo {\\n padding: 10px 30px;\\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\\n}\\n.sidebar .logo p,\\nbody > .navbar-collapse .logo p {\\n float: left;\\n font-size: 20px;\\n margin: 10px 10px;\\n color: #ffffff;\\n line-height: 20px;\\n font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\\n}\\n.sidebar .logo .simple-text,\\nbody > .navbar-collapse .logo .simple-text {\\n text-transform: uppercase;\\n padding: 5px 0px;\\n display: block;\\n font-size: 18px;\\n color: #ffffff;\\n font-weight: 400;\\n line-height: 30px;\\n}\\n\\n.sidebar .logo-tim,\\nbody > .navbar-collapse .logo-tim {\\n border-radius: 50%;\\n border: 1px solid #333;\\n display: block;\\n height: 61px;\\n width: 61px;\\n float: left;\\n overflow: hidden;\\n}\\n.sidebar .logo-tim img,\\nbody > .navbar-collapse .logo-tim img {\\n width: 60px;\\n height: 60px;\\n}\\n\\n.sidebar:after,\\n.sidebar:before,\\nbody > .navbar-collapse:after,\\nbody > .navbar-collapse:before {\\n display: block;\\n content: '';\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n top: 0;\\n left: 0;\\n z-index: 2;\\n}\\n\\n.sidebar:before,\\nbody > .navbar-collapse:before {\\n opacity: 0.33;\\n background: #000000;\\n}\\n\\n.sidebar:after,\\nbody > .navbar-collapse:after {\\n background: #282828;\\n background: -moz-linear-gradient(top, #282828 0%, #111 100%);\\n background: -webkit-gradient(\\n linear,\\n left top,\\n left bottom,\\n color-stop(0%, #282828),\\n color-stop(100%, #111)\\n );\\n background: -webkit-linear-gradient(top, #282828 0%, #111 100%);\\n background: -o-linear-gradient(top, #282828 0%, #111 100%);\\n background: -ms-linear-gradient(top, #282828 0%, #111 100%);\\n background: linear-gradient(to bottom, #282828 0%, #111 100%);\\n background-size: 150% 150%;\\n z-index: 3;\\n opacity: 1;\\n}\\n\\n.sidebar[data-image]:after,\\n.sidebar.has-image:after,\\nbody > .navbar-collapse[data-image]:after,\\nbody > .navbar-collapse.has-image:after {\\n opacity: 0.77;\\n}\\n\\n.sidebar[data-color='blue']:after,\\nbody > .navbar-collapse[data-color='blue']:after {\\n background: #1b8dff;\\n background: -moz-linear-gradient(top, #1b8dff 0%, #2632c1 100%);\\n background: -webkit-gradient(\\n linear,\\n left top,\\n left bottom,\\n color-stop(0%, #1b8dff),\\n color-stop(100%, #2632c1)\\n );\\n background: -webkit-linear-gradient(top, #1b8dff 0%, #2632c1 100%);\\n background: -o-linear-gradient(top, #1b8dff 0%, #2632c1 100%);\\n background: -ms-linear-gradient(top, #1b8dff 0%, #2632c1 100%);\\n background: linear-gradient(to bottom, #1b8dff 0%, #2632c1 100%);\\n background-size: 150% 150%;\\n}\\n\\n.sidebar[data-color='azure']:after,\\nbody > .navbar-collapse[data-color='azure']:after {\\n background: #1dc7ea;\\n background: -moz-linear-gradient(top, #1dc7ea 0%, #4091ff 100%);\\n background: -webkit-gradient(\\n linear,\\n left top,\\n left bottom,\\n color-stop(0%, #1dc7ea),\\n color-stop(100%, #4091ff)\\n );\\n background: -webkit-linear-gradient(top, #1dc7ea 0%, #4091ff 100%);\\n background: -o-linear-gradient(top, #1dc7ea 0%, #4091ff 100%);\\n background: -ms-linear-gradient(top, #1dc7ea 0%, #4091ff 100%);\\n background: linear-gradient(to bottom, #1dc7ea 0%, #4091ff 100%);\\n background-size: 150% 150%;\\n}\\n\\n.sidebar[data-color='green']:after,\\nbody > .navbar-collapse[data-color='green']:after {\\n background: #87cb16;\\n background: -moz-linear-gradient(top, #87cb16 0%, #6dc030 100%);\\n background: -webkit-gradient(\\n linear,\\n left top,\\n left bottom,\\n color-stop(0%, #87cb16),\\n color-stop(100%, #6dc030)\\n );\\n background: -webkit-linear-gradient(top, #87cb16 0%, #6dc030 100%);\\n background: -o-linear-gradient(top, #87cb16 0%, #6dc030 100%);\\n background: -ms-linear-gradient(top, #87cb16 0%, #6dc030 100%);\\n background: linear-gradient(to bottom, #87cb16 0%, #6dc030 100%);\\n background-size: 150% 150%;\\n}\\n\\n.sidebar[data-color='orange']:after,\\nbody > .navbar-collapse[data-color='orange']:after {\\n background: #ffa534;\\n background: -moz-linear-gradient(top, #ffa534 0%, #ff5221 100%);\\n background: -webkit-gradient(\\n linear,\\n left top,\\n left bottom,\\n color-stop(0%, #ffa534),\\n color-stop(100%, #ff5221)\\n );\\n background: -webkit-linear-gradient(top, #ffa534 0%, #ff5221 100%);\\n background: -o-linear-gradient(top, #ffa534 0%, #ff5221 100%);\\n background: -ms-linear-gradient(top, #ffa534 0%, #ff5221 100%);\\n background: linear-gradient(to bottom, #ffa534 0%, #ff5221 100%);\\n background-size: 150% 150%;\\n}\\n\\n.sidebar[data-color='red']:after,\\nbody > .navbar-collapse[data-color='red']:after {\\n background: #fb404b;\\n background: -moz-linear-gradient(top, #fb404b 0%, #bb0502 100%);\\n background: -webkit-gradient(\\n linear,\\n left top,\\n left bottom,\\n color-stop(0%, #fb404b),\\n color-stop(100%, #bb0502)\\n );\\n background: -webkit-linear-gradient(top, #fb404b 0%, #bb0502 100%);\\n background: -o-linear-gradient(top, #fb404b 0%, #bb0502 100%);\\n background: -ms-linear-gradient(top, #fb404b 0%, #bb0502 100%);\\n background: linear-gradient(to bottom, #fb404b 0%, #bb0502 100%);\\n background-size: 150% 150%;\\n}\\n\\n.sidebar[data-color='purple']:after,\\nbody > .navbar-collapse[data-color='purple']:after {\\n background: #9368e9;\\n background: -moz-linear-gradient(top, #9368e9 0%, #943bea 100%);\\n background: -webkit-gradient(\\n linear,\\n left top,\\n left bottom,\\n color-stop(0%, #9368e9),\\n color-stop(100%, #943bea)\\n );\\n background: -webkit-linear-gradient(top, #9368e9 0%, #943bea 100%);\\n background: -o-linear-gradient(top, #9368e9 0%, #943bea 100%);\\n background: -ms-linear-gradient(top, #9368e9 0%, #943bea 100%);\\n background: linear-gradient(to bottom, #9368e9 0%, #943bea 100%);\\n background-size: 150% 150%;\\n}\\n\\n.main-panel {\\n background: rgba(203, 203, 210, 0.15);\\n position: relative;\\n float: right;\\n width: calc(100% - 260px);\\n}\\n.main-panel > .content {\\n padding: 30px 15px;\\n min-height: calc(100% - 123px);\\n}\\n.main-panel > .footer {\\n border-top: 1px solid #e7e7e7;\\n}\\n.main-panel .navbar {\\n margin-bottom: 0;\\n}\\n\\n.sidebar,\\n.main-panel {\\n -webkit-transition-property: top, bottom;\\n transition-property: top, bottom;\\n -webkit-transition-duration: 0.2s, 0.2s;\\n transition-duration: 0.2s, 0.2s;\\n -webkit-transition-timing-function: linear, linear;\\n transition-timing-function: linear, linear;\\n -webkit-overflow-scrolling: touch;\\n}\\n\\n.btn {\\n border-width: 2px;\\n background-color: transparent;\\n font-weight: 400;\\n opacity: 0.8;\\n filter: alpha(opacity=80);\\n padding: 8px 16px;\\n border-color: #888888;\\n color: #888888;\\n}\\n.btn:hover,\\n.btn:focus,\\n.btn:active,\\n.btn.active,\\n.open > .btn.dropdown-toggle {\\n background-color: transparent;\\n color: #777777;\\n border-color: #777777;\\n}\\n.btn.disabled,\\n.btn.disabled:hover,\\n.btn.disabled:focus,\\n.btn.disabled.focus,\\n.btn.disabled:active,\\n.btn.disabled.active,\\n.btn:disabled,\\n.btn:disabled:hover,\\n.btn:disabled:focus,\\n.btn:disabled.focus,\\n.btn:disabled:active,\\n.btn:disabled.active,\\n.btn[disabled],\\n.btn[disabled]:hover,\\n.btn[disabled]:focus,\\n.btn[disabled].focus,\\n.btn[disabled]:active,\\n.btn[disabled].active,\\nfieldset[disabled] .btn,\\nfieldset[disabled] .btn:hover,\\nfieldset[disabled] .btn:focus,\\nfieldset[disabled] .btn.focus,\\nfieldset[disabled] .btn:active,\\nfieldset[disabled] .btn.active {\\n background-color: transparent;\\n border-color: #888888;\\n}\\n.btn.btn-fill {\\n color: #ffffff;\\n background-color: #888888;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.btn.btn-fill:hover,\\n.btn.btn-fill:focus,\\n.btn.btn-fill:active,\\n.btn.btn-fill.active,\\n.open > .btn.btn-fill.dropdown-toggle {\\n background-color: #777777;\\n color: #ffffff;\\n}\\n.btn.btn-fill .caret {\\n border-top-color: #ffffff;\\n}\\n.btn .caret {\\n border-top-color: #888888;\\n}\\n.btn:hover,\\n.btn:focus {\\n opacity: 1;\\n filter: alpha(opacity=100);\\n outline: 0 !important;\\n}\\n.btn:active,\\n.btn.active,\\n.open > .btn.dropdown-toggle {\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n outline: 0 !important;\\n}\\n.btn.btn-icon {\\n padding: 8px;\\n}\\n\\n.btn-primary {\\n border-color: #3472f7;\\n color: #3472f7;\\n}\\n.btn-primary:hover,\\n.btn-primary:focus,\\n.btn-primary:active,\\n.btn-primary.active,\\n.open > .btn-primary.dropdown-toggle {\\n background-color: transparent;\\n color: #1d62f0;\\n cursor: default;\\n border-color: #1d62f0;\\n}\\n.btn-primary.disabled,\\n.btn-primary.disabled:hover,\\n.btn-primary.disabled:focus,\\n.btn-primary.disabled.focus,\\n.btn-primary.disabled:active,\\n.btn-primary.disabled.active,\\n.btn-primary:disabled,\\n.btn-primary:disabled:hover,\\n.btn-primary:disabled:focus,\\n.btn-primary:disabled.focus,\\n.btn-primary:disabled:active,\\n.btn-primary:disabled.active,\\n.btn-primary[disabled],\\n.btn-primary[disabled]:hover,\\n.btn-primary[disabled]:focus,\\n.btn-primary[disabled].focus,\\n.btn-primary[disabled]:active,\\n.btn-primary[disabled].active,\\nfieldset[disabled] .btn-primary,\\nfieldset[disabled] .btn-primary:hover,\\nfieldset[disabled] .btn-primary:focus,\\nfieldset[disabled] .btn-primary.focus,\\nfieldset[disabled] .btn-primary:active,\\nfieldset[disabled] .btn-primary.active {\\n background-color: transparent;\\n color: #c0c0c0;\\n border-color: #c0c0c0;\\n}\\n.btn-primary.btn-fill {\\n color: #ffffff;\\n background-color: #3472f7;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.btn-primary.btn-fill:hover,\\n.btn-primary.btn-fill:focus,\\n.btn-primary.btn-fill:active,\\n.btn-primary.btn-fill.active,\\n.open > .btn-primary.btn-fill.dropdown-toggle {\\n background-color: #1d62f0;\\n color: #ffffff;\\n}\\n.btn-primary.btn-fill .caret {\\n border-top-color: #ffffff;\\n}\\n.btn-primary .caret {\\n border-top-color: #3472f7;\\n}\\n\\n.btn-success {\\n border-color: #87cb16;\\n color: #87cb16;\\n}\\n.btn-success:hover,\\n.btn-success:focus,\\n.btn-success:active,\\n.btn-success.active,\\n.open > .btn-success.dropdown-toggle {\\n background-color: transparent;\\n color: #049f0c;\\n border-color: #049f0c;\\n}\\n.btn-success.disabled,\\n.btn-success.disabled:hover,\\n.btn-success.disabled:focus,\\n.btn-success.disabled.focus,\\n.btn-success.disabled:active,\\n.btn-success.disabled.active,\\n.btn-success:disabled,\\n.btn-success:disabled:hover,\\n.btn-success:disabled:focus,\\n.btn-success:disabled.focus,\\n.btn-success:disabled:active,\\n.btn-success:disabled.active,\\n.btn-success[disabled],\\n.btn-success[disabled]:hover,\\n.btn-success[disabled]:focus,\\n.btn-success[disabled].focus,\\n.btn-success[disabled]:active,\\n.btn-success[disabled].active,\\nfieldset[disabled] .btn-success,\\nfieldset[disabled] .btn-success:hover,\\nfieldset[disabled] .btn-success:focus,\\nfieldset[disabled] .btn-success.focus,\\nfieldset[disabled] .btn-success:active,\\nfieldset[disabled] .btn-success.active {\\n background-color: transparent;\\n border-color: #87cb16;\\n}\\n.btn-success.btn-fill {\\n color: #ffffff;\\n background-color: #87cb16;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.btn-success.btn-fill:hover,\\n.btn-success.btn-fill:focus,\\n.btn-success.btn-fill:active,\\n.btn-success.btn-fill.active,\\n.open > .btn-success.btn-fill.dropdown-toggle {\\n background-color: #049f0c;\\n color: #ffffff;\\n}\\n.btn-success.btn-fill .caret {\\n border-top-color: #ffffff;\\n}\\n.btn-success .caret {\\n border-top-color: #87cb16;\\n}\\n\\n.btn-info {\\n border-color: #1dc7ea;\\n color: #1dc7ea;\\n}\\n.btn-info:hover,\\n.btn-info:focus,\\n.btn-info:active,\\n.btn-info.active,\\n.open > .btn-info.dropdown-toggle {\\n background-color: transparent;\\n color: #42d0ed;\\n border-color: #42d0ed;\\n}\\n.btn-info.disabled,\\n.btn-info.disabled:hover,\\n.btn-info.disabled:focus,\\n.btn-info.disabled.focus,\\n.btn-info.disabled:active,\\n.btn-info.disabled.active,\\n.btn-info:disabled,\\n.btn-info:disabled:hover,\\n.btn-info:disabled:focus,\\n.btn-info:disabled.focus,\\n.btn-info:disabled:active,\\n.btn-info:disabled.active,\\n.btn-info[disabled],\\n.btn-info[disabled]:hover,\\n.btn-info[disabled]:focus,\\n.btn-info[disabled].focus,\\n.btn-info[disabled]:active,\\n.btn-info[disabled].active,\\nfieldset[disabled] .btn-info,\\nfieldset[disabled] .btn-info:hover,\\nfieldset[disabled] .btn-info:focus,\\nfieldset[disabled] .btn-info.focus,\\nfieldset[disabled] .btn-info:active,\\nfieldset[disabled] .btn-info.active {\\n background-color: transparent;\\n border-color: #1dc7ea;\\n}\\n.btn-info.btn-fill {\\n color: #ffffff;\\n background-color: #1dc7ea;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.btn-info.btn-fill:hover,\\n.btn-info.btn-fill:focus,\\n.btn-info.btn-fill:active,\\n.btn-info.btn-fill.active,\\n.open > .btn-info.btn-fill.dropdown-toggle {\\n background-color: #42d0ed;\\n color: #ffffff;\\n}\\n.btn-info.btn-fill .caret {\\n border-top-color: #ffffff;\\n}\\n.btn-info .caret {\\n border-top-color: #1dc7ea;\\n}\\n\\n.btn-warning {\\n border-color: #ff9500;\\n color: #ff9500;\\n}\\n.btn-warning:hover,\\n.btn-warning:focus,\\n.btn-warning:active,\\n.btn-warning.active,\\n.open > .btn-warning.dropdown-toggle {\\n background-color: transparent;\\n color: #ed8d00;\\n border-color: #ed8d00;\\n}\\n.btn-warning.disabled,\\n.btn-warning.disabled:hover,\\n.btn-warning.disabled:focus,\\n.btn-warning.disabled.focus,\\n.btn-warning.disabled:active,\\n.btn-warning.disabled.active,\\n.btn-warning:disabled,\\n.btn-warning:disabled:hover,\\n.btn-warning:disabled:focus,\\n.btn-warning:disabled.focus,\\n.btn-warning:disabled:active,\\n.btn-warning:disabled.active,\\n.btn-warning[disabled],\\n.btn-warning[disabled]:hover,\\n.btn-warning[disabled]:focus,\\n.btn-warning[disabled].focus,\\n.btn-warning[disabled]:active,\\n.btn-warning[disabled].active,\\nfieldset[disabled] .btn-warning,\\nfieldset[disabled] .btn-warning:hover,\\nfieldset[disabled] .btn-warning:focus,\\nfieldset[disabled] .btn-warning.focus,\\nfieldset[disabled] .btn-warning:active,\\nfieldset[disabled] .btn-warning.active {\\n background-color: transparent;\\n border-color: #ff9500;\\n}\\n.btn-warning.btn-fill {\\n color: #ffffff;\\n background-color: #ff9500;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.btn-warning.btn-fill:hover,\\n.btn-warning.btn-fill:focus,\\n.btn-warning.btn-fill:active,\\n.btn-warning.btn-fill.active,\\n.open > .btn-warning.btn-fill.dropdown-toggle {\\n background-color: #ed8d00;\\n color: #ffffff;\\n}\\n.btn-warning.btn-fill .caret {\\n border-top-color: #ffffff;\\n}\\n.btn-warning .caret {\\n border-top-color: #ff9500;\\n}\\n\\n.btn-danger {\\n border-color: #ff4a55;\\n color: #ff4a55;\\n}\\n.btn-danger:hover,\\n.btn-danger:focus,\\n.btn-danger:active,\\n.btn-danger.active,\\n.open > .btn-danger.dropdown-toggle {\\n background-color: transparent;\\n color: #ee2d20;\\n border-color: #ee2d20;\\n}\\n.btn-danger.disabled,\\n.btn-danger.disabled:hover,\\n.btn-danger.disabled:focus,\\n.btn-danger.disabled.focus,\\n.btn-danger.disabled:active,\\n.btn-danger.disabled.active,\\n.btn-danger:disabled,\\n.btn-danger:disabled:hover,\\n.btn-danger:disabled:focus,\\n.btn-danger:disabled.focus,\\n.btn-danger:disabled:active,\\n.btn-danger:disabled.active,\\n.btn-danger[disabled],\\n.btn-danger[disabled]:hover,\\n.btn-danger[disabled]:focus,\\n.btn-danger[disabled].focus,\\n.btn-danger[disabled]:active,\\n.btn-danger[disabled].active,\\nfieldset[disabled] .btn-danger,\\nfieldset[disabled] .btn-danger:hover,\\nfieldset[disabled] .btn-danger:focus,\\nfieldset[disabled] .btn-danger.focus,\\nfieldset[disabled] .btn-danger:active,\\nfieldset[disabled] .btn-danger.active {\\n background-color: transparent;\\n border-color: #ff4a55;\\n}\\n.btn-danger.btn-fill {\\n color: #ffffff;\\n background-color: #ff4a55;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.btn-danger.btn-fill:hover,\\n.btn-danger.btn-fill:focus,\\n.btn-danger.btn-fill:active,\\n.btn-danger.btn-fill.active,\\n.open > .btn-danger.btn-fill.dropdown-toggle {\\n background-color: #ee2d20;\\n color: #ffffff;\\n}\\n.btn-danger.btn-fill .caret {\\n border-top-color: #ffffff;\\n}\\n.btn-danger .caret {\\n border-top-color: #ff4a55;\\n}\\n\\n.btn-neutral {\\n border-color: #ffffff;\\n color: #ffffff;\\n}\\n.btn-neutral:hover,\\n.btn-neutral:focus,\\n.btn-neutral:active,\\n.btn-neutral.active,\\n.open > .btn-neutral.dropdown-toggle {\\n background-color: transparent;\\n color: #ffffff;\\n border-color: #ffffff;\\n}\\n.btn-neutral.disabled,\\n.btn-neutral.disabled:hover,\\n.btn-neutral.disabled:focus,\\n.btn-neutral.disabled.focus,\\n.btn-neutral.disabled:active,\\n.btn-neutral.disabled.active,\\n.btn-neutral:disabled,\\n.btn-neutral:disabled:hover,\\n.btn-neutral:disabled:focus,\\n.btn-neutral:disabled.focus,\\n.btn-neutral:disabled:active,\\n.btn-neutral:disabled.active,\\n.btn-neutral[disabled],\\n.btn-neutral[disabled]:hover,\\n.btn-neutral[disabled]:focus,\\n.btn-neutral[disabled].focus,\\n.btn-neutral[disabled]:active,\\n.btn-neutral[disabled].active,\\nfieldset[disabled] .btn-neutral,\\nfieldset[disabled] .btn-neutral:hover,\\nfieldset[disabled] .btn-neutral:focus,\\nfieldset[disabled] .btn-neutral.focus,\\nfieldset[disabled] .btn-neutral:active,\\nfieldset[disabled] .btn-neutral.active {\\n background-color: transparent;\\n border-color: #ffffff;\\n}\\n.btn-neutral.btn-fill {\\n color: #ffffff;\\n background-color: #ffffff;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.btn-neutral.btn-fill:hover,\\n.btn-neutral.btn-fill:focus,\\n.btn-neutral.btn-fill:active,\\n.btn-neutral.btn-fill.active,\\n.open > .btn-neutral.btn-fill.dropdown-toggle {\\n background-color: #ffffff;\\n color: #ffffff;\\n}\\n.btn-neutral.btn-fill .caret {\\n border-top-color: #ffffff;\\n}\\n.btn-neutral .caret {\\n border-top-color: #ffffff;\\n}\\n.btn-neutral:active,\\n.btn-neutral.active,\\n.open > .btn-neutral.dropdown-toggle {\\n background-color: #ffffff;\\n color: #888888;\\n}\\n.btn-neutral.btn-fill,\\n.btn-neutral.btn-fill:hover,\\n.btn-neutral.btn-fill:focus {\\n color: #888888;\\n}\\n.btn-neutral.btn-simple:active,\\n.btn-neutral.btn-simple.active {\\n background-color: transparent;\\n}\\n\\n.btn:disabled,\\n.btn[disabled],\\n.btn.disabled {\\n opacity: 0.5;\\n filter: alpha(opacity=50);\\n}\\n\\n.btn-round {\\n border-width: 1px;\\n border-radius: 30px !important;\\n padding: 9px 18px;\\n}\\n.btn-round.btn-icon {\\n padding: 9px;\\n}\\n\\n.btn-simple {\\n border: 0;\\n font-size: 16px;\\n padding: 8px 16px;\\n}\\n.btn-simple.btn-icon {\\n padding: 8px;\\n}\\n\\n.btn-lg {\\n font-size: 18px;\\n border-radius: 6px;\\n padding: 14px 30px;\\n font-weight: 400;\\n}\\n.btn-lg.btn-round {\\n padding: 15px 30px;\\n}\\n.btn-lg.btn-simple {\\n padding: 16px 30px;\\n}\\n\\n.btn-sm {\\n font-size: 12px;\\n border-radius: 3px;\\n padding: 5px 10px;\\n}\\n.btn-sm.btn-round {\\n padding: 6px 10px;\\n}\\n.btn-sm.btn-simple {\\n padding: 7px 10px;\\n}\\n\\n.btn-xs {\\n font-size: 12px;\\n border-radius: 3px;\\n padding: 1px 5px;\\n}\\n.btn-xs.btn-round {\\n padding: 2px 5px;\\n}\\n.btn-xs.btn-simple {\\n padding: 3px 5px;\\n}\\n\\n.btn-wd {\\n min-width: 140px;\\n}\\n\\n.btn-group.select {\\n width: 100%;\\n}\\n\\n.btn-group.select .btn {\\n text-align: left;\\n}\\n\\n.btn-group.select .caret {\\n position: absolute;\\n top: 50%;\\n margin-top: -1px;\\n right: 8px;\\n}\\n\\n.form-control::-moz-placeholder {\\n color: #dddddd;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n.form-control:-moz-placeholder {\\n color: #dddddd;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n.form-control::-webkit-input-placeholder {\\n color: #dddddd;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n.form-control:-ms-input-placeholder {\\n color: #dddddd;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n.form-control {\\n background-color: #ffffff;\\n border: 1px solid #e3e3e3;\\n border-radius: 4px;\\n color: #565656;\\n padding: 8px 12px;\\n height: 40px;\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n}\\n.form-control:focus {\\n background-color: #ffffff;\\n border: 1px solid #aaaaaa;\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n outline: 0 !important;\\n color: #333333;\\n}\\n.has-success .form-control,\\n.has-error .form-control,\\n.has-success .form-control:focus,\\n.has-error .form-control:focus {\\n border-color: #e3e3e3;\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n}\\n.has-success .form-control {\\n color: #87cb16;\\n}\\n.has-success .form-control:focus {\\n border-color: #87cb16;\\n}\\n.has-error .form-control {\\n color: #ff4a55;\\n}\\n.has-error .form-control:focus {\\n border-color: #ff4a55;\\n}\\n.form-control + .form-control-feedback {\\n border-radius: 6px;\\n font-size: 14px;\\n margin-top: -7px;\\n position: absolute;\\n right: 10px;\\n top: 50%;\\n vertical-align: middle;\\n}\\n.open .form-control {\\n border-radius: 4px 4px 0 0;\\n border-bottom-color: transparent;\\n}\\n\\n.input-lg {\\n height: 55px;\\n padding: 14px 30px;\\n}\\n\\n.has-error .form-control-feedback {\\n color: #ff4a55;\\n}\\n\\n.has-success .form-control-feedback {\\n color: #87cb16;\\n}\\n\\n.input-group-addon {\\n background-color: #ffffff;\\n border: 1px solid #e3e3e3;\\n border-radius: 4px;\\n}\\n.has-success .input-group-addon,\\n.has-error .input-group-addon {\\n background-color: #ffffff;\\n border: 1px solid #e3e3e3;\\n}\\n.has-error .form-control:focus + .input-group-addon {\\n border-color: #ff4a55;\\n color: #ff4a55;\\n}\\n.has-success .form-control:focus + .input-group-addon {\\n border-color: #87cb16;\\n color: #87cb16;\\n}\\n.form-control:focus + .input-group-addon,\\n.form-control:focus ~ .input-group-addon {\\n background-color: #ffffff;\\n border-color: #9a9a9a;\\n}\\n\\n.input-group .form-control:first-child,\\n.input-group-addon:first-child,\\n.input-group-btn:first-child > .dropdown-toggle,\\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\\n border-right: 0 none;\\n}\\n\\n.input-group .form-control:last-child,\\n.input-group-addon:last-child,\\n.input-group-btn:last-child > .dropdown-toggle,\\n.input-group-btn:first-child > .btn:not(:first-child) {\\n border-left: 0 none;\\n}\\n\\n.form-control[disabled],\\n.form-control[readonly],\\nfieldset[disabled] .form-control {\\n background-color: #f5f5f5;\\n color: #888888;\\n cursor: not-allowed;\\n}\\n\\n.input-group-btn .btn {\\n border-width: 1px;\\n padding: 9px 16px;\\n}\\n\\n.input-group-btn .btn-default:not(.btn-fill) {\\n border-color: #dddddd;\\n}\\n\\n.input-group-btn:last-child > .btn {\\n margin-left: 0;\\n}\\n\\n.input-group-focus .input-group-addon {\\n border-color: #9a9a9a;\\n}\\n\\n.alert {\\n border: 0;\\n border-radius: 0;\\n color: #ffffff;\\n padding: 10px 15px;\\n font-size: 14px;\\n}\\n.container .alert {\\n border-radius: 4px;\\n}\\n.navbar .alert {\\n border-radius: 0;\\n left: 0;\\n position: absolute;\\n right: 0;\\n top: 85px;\\n width: 100%;\\n z-index: 3;\\n}\\n.navbar:not(.navbar-transparent) .alert {\\n top: 70px;\\n}\\n.alert span[data-notify='icon'] {\\n font-size: 30px;\\n display: block;\\n left: 15px;\\n position: absolute;\\n top: 50%;\\n margin-top: -15px;\\n}\\n.alert button.close {\\n position: absolute;\\n right: 10px;\\n top: 50%;\\n margin-top: -13px;\\n z-index: 1033;\\n background-color: #ffffff;\\n display: block;\\n border-radius: 50%;\\n opacity: 0.4;\\n line-height: 20px;\\n font-size: 12px;\\n width: 25px;\\n height: 25px;\\n outline: 0 !important;\\n text-align: center;\\n padding: 3px;\\n font-weight: 300;\\n}\\n.alert button.close:hover {\\n opacity: 0.55;\\n}\\n.alert .close ~ span {\\n display: block;\\n max-width: 89%;\\n}\\n.alert[data-notify='container'] {\\n padding: 10px 10px 10px 20px;\\n border-radius: 4px;\\n}\\n.alert.alert-with-icon {\\n padding-left: 65px;\\n}\\n.alert a,\\n.alert a:hover,\\n.alert a:focus {\\n text-decoration: underline;\\n color: white;\\n}\\n\\n.alert-info {\\n background-color: #63d8f1;\\n}\\n\\n.alert-success {\\n background-color: #a1e82c;\\n}\\n\\n.alert-warning {\\n background-color: #ffbc67;\\n}\\n\\n.alert-danger {\\n background-color: #fc727a;\\n}\\n\\n.table .radio,\\n.table .checkbox {\\n position: relative;\\n height: 20px;\\n display: block;\\n width: 20px;\\n padding: 0px 0px;\\n margin: 0px 5px;\\n text-align: center;\\n}\\n.table .radio .icons,\\n.table .checkbox .icons {\\n left: 5px;\\n}\\n\\n.table > thead > tr > th,\\n.table > tbody > tr > th,\\n.table > tfoot > tr > th,\\n.table > thead > tr > td,\\n.table > tbody > tr > td,\\n.table > tfoot > tr > td {\\n padding: 12px 8px;\\n vertical-align: middle;\\n}\\n\\n.table > tbody > tr > td {\\n font-size: 14px;\\n}\\n\\n.table > thead > tr > th {\\n border-bottom-width: 1px;\\n font-size: 12px;\\n text-transform: uppercase;\\n color: #9a9a9a;\\n font-weight: 400;\\n padding-bottom: 5px;\\n}\\n\\n.table .td-actions .btn {\\n opacity: 0.36;\\n filter: alpha(opacity=36);\\n}\\n.table .td-actions .btn.btn-xs {\\n padding-left: 3px;\\n padding-right: 3px;\\n}\\n\\n.table .td-actions {\\n min-width: 90px;\\n}\\n\\n.table > tbody > tr {\\n position: relative;\\n}\\n.table > tbody > tr:hover .td-actions .btn {\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n/* Checkbox and radio */\\n.checkbox,\\n.radio {\\n margin-bottom: 12px;\\n}\\n\\n.checkbox label,\\n.radio label {\\n display: inline-block;\\n position: relative;\\n cursor: pointer;\\n padding-left: 24px;\\n margin-bottom: 0;\\n}\\n\\n.checkbox label::before,\\n.checkbox label::after {\\n font-family: 'FontAwesome';\\n content: '\\\\f096';\\n display: inline-block;\\n position: absolute;\\n width: 20px;\\n height: 20px;\\n left: 0;\\n cursor: pointer;\\n line-height: 19px;\\n font-size: 20px;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n top: 1px;\\n color: #dddddd;\\n transition: color 0.2s linear;\\n padding: 1px;\\n}\\n\\n.checkbox label::after {\\n content: '';\\n text-align: center;\\n opacity: 1;\\n left: 1px;\\n color: #dddddd;\\n}\\n\\n.checkbox input[type='checkbox'],\\n.radio input[type='radio'] {\\n opacity: 0;\\n margin-left: 0;\\n}\\n\\n.checkbox input[type='checkbox']:checked + label::after {\\n font-family: 'FontAwesome';\\n content: '\\\\f046';\\n}\\n\\n.checkbox input[type='checkbox']:checked + label::after {\\n color: #1dc7ea;\\n}\\n\\n.checkbox input[type='checkbox']:checked + label::before {\\n opacity: 0;\\n}\\n\\n.checkbox input[type='checkbox']:disabled + label,\\n.radio input[type='radio']:disabled + label,\\n.checkbox input[type='checkbox']:disabled:checked + label::after {\\n color: #dddddd;\\n}\\n\\n.checkbox input[type='checkbox']:disabled + label::before,\\n.checkbox input[type='checkbox']:disabled + label::after {\\n cursor: not-allowed;\\n}\\n\\n.checkbox input[type='checkbox']:disabled + label,\\n.radio input[type='radio']:disabled + label {\\n cursor: not-allowed;\\n}\\n\\n.checkbox.checkbox-circle label::before {\\n border-radius: 50%;\\n}\\n\\n.checkbox.checkbox-inline {\\n padding-left: 0;\\n}\\n\\n.checkbox-primary input[type='checkbox']:checked + label::before {\\n background-color: #428bca;\\n border-color: #428bca;\\n}\\n\\n.checkbox-primary input[type='checkbox']:checked + label::after {\\n color: #fff;\\n}\\n\\n.checkbox-danger input[type='checkbox']:checked + label::before {\\n background-color: #d9534f;\\n border-color: #d9534f;\\n}\\n\\n.checkbox-danger input[type='checkbox']:checked + label::after {\\n color: #fff;\\n}\\n\\n.checkbox-info input[type='checkbox']:checked + label::before {\\n background-color: #5bc0de;\\n border-color: #5bc0de;\\n}\\n\\n.checkbox-info input[type='checkbox']:checked + label::after {\\n color: #fff;\\n}\\n\\n.checkbox-warning input[type='checkbox']:checked + label::before {\\n background-color: #f0ad4e;\\n border-color: #f0ad4e;\\n}\\n\\n.checkbox-warning input[type='checkbox']:checked + label::after {\\n color: #fff;\\n}\\n\\n.checkbox-success input[type='checkbox']:checked + label::before {\\n background-color: #5cb85c;\\n border-color: #5cb85c;\\n}\\n\\n.checkbox-success input[type='checkbox']:checked + label::after {\\n color: #fff;\\n}\\n\\n.radio label::before,\\n.radio label::after {\\n font-family: 'FontAwesome';\\n content: '\\\\f10c';\\n font-size: 20px;\\n height: 20px;\\n width: 20px;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n display: inline-block;\\n position: absolute;\\n line-height: 19px;\\n left: 0;\\n top: 0;\\n color: #dddddd;\\n padding: 1px;\\n transition: color 0.2s linear;\\n}\\n\\n.radio input[type='radio']:checked + label::after {\\n font-family: 'FontAwesome';\\n content: '\\\\f192';\\n color: #dddddd;\\n}\\n\\n.radio input[type='radio']:checked + label::after {\\n color: #1dc7ea;\\n}\\n\\n.radio input[type='radio']:disabled + label {\\n color: #ddd;\\n}\\n\\n.radio input[type='radio']:disabled + label::before,\\n.radio input[type='radio']:disabled + label::after {\\n color: #ddd;\\n}\\n\\n.radio.radio-inline {\\n margin-top: 0;\\n}\\n\\n/**\\n * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.\\n *\\n * @version v3.3.4\\n * @homepage https://bttstrp.github.io/bootstrap-switch\\n * @author Mattia Larentis (http://larentis.eu)\\n * @license Apache-2.0\\n */\\n.bootstrap-switch {\\n display: inline-block;\\n direction: ltr;\\n cursor: pointer;\\n border-radius: 4px;\\n border: 1px solid;\\n border-color: #ccc;\\n position: relative;\\n text-align: left;\\n overflow: hidden;\\n line-height: 8px;\\n z-index: 0;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n vertical-align: middle;\\n -webkit-transition: border-color ease-in-out 0.15s,\\n box-shadow ease-in-out 0.15s;\\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-container {\\n display: inline-block;\\n top: 0;\\n border-radius: 4px;\\n -webkit-transform: translate3d(0, 0, 0);\\n transform: translate3d(0, 0, 0);\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on,\\n.bootstrap-switch .bootstrap-switch-handle-off,\\n.bootstrap-switch .bootstrap-switch-label {\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n cursor: pointer;\\n display: table-cell;\\n vertical-align: middle;\\n padding: 6px 12px;\\n font-size: 14px;\\n line-height: 20px;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on,\\n.bootstrap-switch .bootstrap-switch-handle-off {\\n text-align: center;\\n z-index: 1;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,\\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {\\n color: #fff;\\n background: #337ab7;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,\\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {\\n color: #fff;\\n background: #5bc0de;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,\\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {\\n color: #fff;\\n background: #5cb85c;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,\\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {\\n background: #f0ad4e;\\n color: #fff;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,\\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {\\n color: #fff;\\n background: #d9534f;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,\\n.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {\\n color: #000;\\n background: #eeeeee;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-label {\\n text-align: center;\\n margin-top: -1px;\\n margin-bottom: -1px;\\n z-index: 100;\\n color: #333;\\n background: #fff;\\n}\\n\\n.bootstrap-switch span::before {\\n content: '\\\\200b';\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-on {\\n border-bottom-left-radius: 3px;\\n border-top-left-radius: 3px;\\n}\\n\\n.bootstrap-switch .bootstrap-switch-handle-off {\\n border-bottom-right-radius: 3px;\\n border-top-right-radius: 3px;\\n}\\n\\n.bootstrap-switch input[type='radio'],\\n.bootstrap-switch input[type='checkbox'] {\\n position: absolute !important;\\n top: 0;\\n left: 0;\\n margin: 0;\\n z-index: -1;\\n opacity: 0;\\n filter: alpha(opacity=0);\\n visibility: hidden;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,\\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,\\n.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {\\n padding: 1px 5px;\\n font-size: 12px;\\n line-height: 1.5;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,\\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,\\n.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {\\n padding: 5px 10px;\\n font-size: 12px;\\n line-height: 1.5;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,\\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,\\n.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {\\n padding: 6px 16px;\\n font-size: 18px;\\n line-height: 1.3333333;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-disabled,\\n.bootstrap-switch.bootstrap-switch-readonly,\\n.bootstrap-switch.bootstrap-switch-indeterminate {\\n cursor: default !important;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,\\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,\\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,\\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,\\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,\\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,\\n.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,\\n.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,\\n.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {\\n opacity: 0.5;\\n filter: alpha(opacity=50);\\n cursor: default !important;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {\\n -webkit-transition: margin-left 0.5s;\\n -o-transition: margin-left 0.5s;\\n transition: margin-left 0.5s;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {\\n border-bottom-left-radius: 0;\\n border-top-left-radius: 0;\\n border-bottom-right-radius: 3px;\\n border-top-right-radius: 3px;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {\\n border-bottom-right-radius: 0;\\n border-top-right-radius: 0;\\n border-bottom-left-radius: 3px;\\n border-top-left-radius: 3px;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-focused {\\n border-color: #66afe9;\\n outline: 0;\\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),\\n 0 0 8px rgba(102, 175, 233, 0.6);\\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),\\n 0 0 8px rgba(102, 175, 233, 0.6);\\n}\\n\\n.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,\\n.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off\\n .bootstrap-switch-label {\\n border-bottom-right-radius: 3px;\\n border-top-right-radius: 3px;\\n}\\n\\n.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,\\n.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on\\n .bootstrap-switch-label {\\n border-bottom-left-radius: 3px;\\n border-top-left-radius: 3px;\\n}\\n\\n.nav > li > a:hover,\\n.nav > li > a:focus {\\n background-color: transparent;\\n}\\n\\n.navbar {\\n border: 0;\\n font-size: 16px;\\n border-radius: 0;\\n}\\n.navbar .navbar-brand {\\n font-weight: 400;\\n margin: 5px 0px;\\n padding: 15px 15px;\\n font-size: 20px;\\n}\\n.navbar .navbar-nav > li > a {\\n padding: 10px 15px;\\n margin: 10px 3px;\\n position: relative;\\n}\\n.navbar .navbar-nav > li > a.btn {\\n margin: 15px 3px;\\n padding: 8px 16px;\\n}\\n.navbar .navbar-nav > li > a.btn-round {\\n margin: 16px 3px;\\n}\\n.navbar .navbar-nav > li > a [class^='fa'] {\\n font-size: 19px;\\n position: relative;\\n line-height: 16px;\\n top: 1px;\\n}\\n.navbar .navbar-nav .notification {\\n position: absolute;\\n background-color: #fb404b;\\n text-align: center;\\n border-radius: 10px;\\n min-width: 18px;\\n padding: 0 5px;\\n height: 18px;\\n font-size: 12px;\\n color: #ffffff;\\n font-weight: bold;\\n line-height: 18px;\\n top: 0px;\\n left: 7px;\\n}\\n.navbar .btn {\\n margin: 15px 3px;\\n font-size: 14px;\\n}\\n.navbar .btn-simple {\\n font-size: 16px;\\n}\\n.navbar.fixed {\\n width: calc(100% - $sidebar-width);\\n right: 0;\\n left: auto;\\n border-radius: 0;\\n}\\n\\n.navbar-nav > li > .dropdown-menu {\\n border-radius: 10px;\\n margin-top: -5px;\\n}\\n\\n.navbar-transparent .navbar-brand,\\n[class*='navbar-ct'] .navbar-brand {\\n color: #ffffff;\\n opacity: 0.9;\\n filter: alpha(opacity=90);\\n}\\n.navbar-transparent .navbar-brand:focus,\\n.navbar-transparent .navbar-brand:hover,\\n[class*='navbar-ct'] .navbar-brand:focus,\\n[class*='navbar-ct'] .navbar-brand:hover {\\n background-color: transparent;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n.navbar-transparent .navbar-nav > li > a:not(.btn),\\n[class*='navbar-ct'] .navbar-nav > li > a:not(.btn) {\\n color: #ffffff;\\n border-color: #ffffff;\\n opacity: 0.8;\\n filter: alpha(opacity=80);\\n}\\n\\n.navbar-transparent .navbar-nav > .active > a:not(.btn),\\n.navbar-transparent .navbar-nav > .active > a:hover:not(.btn),\\n.navbar-transparent .navbar-nav > .active > a:focus:not(.btn),\\n.navbar-transparent .navbar-nav > li > a:hover:not(.btn),\\n.navbar-transparent .navbar-nav > li > a:focus:not(.btn),\\n[class*='navbar-ct'] .navbar-nav > .active > a:not(.btn),\\n[class*='navbar-ct'] .navbar-nav > .active > a:hover:not(.btn),\\n[class*='navbar-ct'] .navbar-nav > .active > a:focus:not(.btn),\\n[class*='navbar-ct'] .navbar-nav > li > a:hover:not(.btn),\\n[class*='navbar-ct'] .navbar-nav > li > a:focus:not(.btn) {\\n background-color: transparent;\\n border-radius: 3px;\\n color: #ffffff;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n.navbar-transparent .navbar-nav .nav > li > a.btn:hover,\\n[class*='navbar-ct'] .navbar-nav .nav > li > a.btn:hover {\\n background-color: transparent;\\n}\\n\\n.navbar-transparent .navbar-nav > .dropdown > a .caret,\\n.navbar-transparent .navbar-nav > .dropdown > a:hover .caret,\\n.navbar-transparent .navbar-nav > .dropdown > a:focus .caret,\\n[class*='navbar-ct'] .navbar-nav > .dropdown > a .caret,\\n[class*='navbar-ct'] .navbar-nav > .dropdown > a:hover .caret,\\n[class*='navbar-ct'] .navbar-nav > .dropdown > a:focus .caret {\\n border-bottom-color: #ffffff;\\n border-top-color: #ffffff;\\n}\\n\\n.navbar-transparent .navbar-nav > .open > a,\\n.navbar-transparent .navbar-nav > .open > a:hover,\\n.navbar-transparent .navbar-nav > .open > a:focus,\\n[class*='navbar-ct'] .navbar-nav > .open > a,\\n[class*='navbar-ct'] .navbar-nav > .open > a:hover,\\n[class*='navbar-ct'] .navbar-nav > .open > a:focus {\\n background-color: transparent;\\n color: #ffffff;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n.navbar-transparent .btn-default,\\n[class*='navbar-ct'] .btn-default {\\n color: #ffffff;\\n border-color: #ffffff;\\n}\\n\\n.navbar-transparent .btn-default.btn-fill,\\n[class*='navbar-ct'] .btn-default.btn-fill {\\n color: #9a9a9a;\\n background-color: #ffffff;\\n opacity: 0.9;\\n filter: alpha(opacity=90);\\n}\\n\\n.navbar-transparent .btn-default.btn-fill:hover,\\n.navbar-transparent .btn-default.btn-fill:focus,\\n.navbar-transparent .btn-default.btn-fill:active,\\n.navbar-transparent .btn-default.btn-fill.active,\\n.navbar-transparent .open .dropdown-toggle.btn-fill.btn-default,\\n[class*='navbar-ct'] .btn-default.btn-fill:hover,\\n[class*='navbar-ct'] .btn-default.btn-fill:focus,\\n[class*='navbar-ct'] .btn-default.btn-fill:active,\\n[class*='navbar-ct'] .btn-default.btn-fill.active,\\n[class*='navbar-ct'] .open .dropdown-toggle.btn-fill.btn-default {\\n border-color: #ffffff;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n\\n.navbar-transparent .dropdown-menu .divider {\\n background-color: rgba(255, 255, 255, 0.2);\\n}\\n\\n.nav-open .nav .caret {\\n border-bottom-color: #ffffff;\\n border-top-color: #ffffff;\\n}\\n\\n.navbar-default {\\n background-color: rgba(255, 255, 255, 0.96);\\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n}\\n.navbar-default .navbar-nav > li > a:not(.btn) {\\n color: #9a9a9a;\\n}\\n.navbar-default .navbar-nav > .active > a,\\n.navbar-default .navbar-nav > .active > a:not(.btn):hover,\\n.navbar-default .navbar-nav > .active > a:not(.btn):focus,\\n.navbar-default .navbar-nav > li > a:not(.btn):hover,\\n.navbar-default .navbar-nav > li > a:not(.btn):focus {\\n background-color: transparent;\\n border-radius: 3px;\\n color: #1dc7ea;\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.navbar-default .navbar-nav > .dropdown > a:hover .caret,\\n.navbar-default .navbar-nav > .dropdown > a:focus .caret {\\n border-bottom-color: #1dc7ea;\\n border-top-color: #1dc7ea;\\n}\\n.navbar-default .navbar-nav > .open > a,\\n.navbar-default .navbar-nav > .open > a:hover,\\n.navbar-default .navbar-nav > .open > a:focus {\\n background-color: transparent;\\n color: #1dc7ea;\\n}\\n.navbar-default .navbar-nav .navbar-toggle:hover,\\n.navbar-default .navbar-nav .navbar-toggle:focus {\\n background-color: transparent;\\n}\\n.navbar-default:not(.navbar-transparent) .btn-default:hover {\\n color: #1dc7ea;\\n border-color: #1dc7ea;\\n}\\n.navbar-default:not(.navbar-transparent) .btn-neutral,\\n.navbar-default:not(.navbar-transparent) .btn-neutral:hover,\\n.navbar-default:not(.navbar-transparent) .btn-neutral:active {\\n color: #9a9a9a;\\n}\\n\\n/* Navbar with icons */\\n.navbar-icons.navbar .navbar-brand {\\n margin-top: 12px;\\n margin-bottom: 12px;\\n}\\n\\n.navbar-icons .navbar-nav > li > a {\\n text-align: center;\\n padding: 6px 15px;\\n margin: 6px 3px;\\n}\\n\\n.navbar-icons .navbar-nav [class^='pe'] {\\n font-size: 30px;\\n position: relative;\\n}\\n\\n.navbar-icons .navbar-nav p {\\n margin: 3px 0 0;\\n}\\n\\n.navbar-form {\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n}\\n.navbar-form .form-control {\\n border-radius: 0;\\n border: 0;\\n padding: 0;\\n background-color: transparent;\\n height: 22px;\\n font-size: 16px;\\n line-height: 1.5;\\n color: #e3e3e3;\\n}\\n.navbar-transparent .navbar-form .form-control,\\n[class*='navbar-ct'] .navbar-form .form-control {\\n color: #ffffff;\\n border: 0;\\n border-bottom: 1px solid rgba(255, 255, 255, 0.6);\\n}\\n\\n.navbar-ct-blue {\\n background-color: #4ea7ff;\\n}\\n\\n.navbar-ct-azure {\\n background-color: #63d8f1;\\n}\\n\\n.navbar-ct-green {\\n background-color: #a1e82c;\\n}\\n\\n.navbar-ct-orange {\\n background-color: #ffbc67;\\n}\\n\\n.navbar-ct-red {\\n background-color: #fc727a;\\n}\\n\\n.navbar-transparent {\\n padding-top: 15px;\\n background-color: transparent;\\n border-bottom: 1px solid transparent;\\n}\\n\\n.navbar-toggle {\\n margin-top: 19px;\\n margin-bottom: 19px;\\n border: 0;\\n}\\n.navbar-toggle .icon-bar {\\n background-color: #ffffff;\\n}\\n.navbar-toggle .navbar-collapse,\\n.navbar-toggle .navbar-form {\\n border-color: transparent;\\n}\\n.navbar-toggle.navbar-default .navbar-toggle:hover,\\n.navbar-toggle.navbar-default .navbar-toggle:focus {\\n background-color: transparent;\\n}\\n\\n.footer {\\n background-color: #ffffff;\\n line-height: 20px;\\n}\\n.footer nav > ul {\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n font-weight: normal;\\n}\\n.footer nav > ul a:not(.btn) {\\n color: #9a9a9a;\\n display: block;\\n margin-bottom: 3px;\\n}\\n.footer nav > ul a:not(.btn):hover,\\n.footer nav > ul a:not(.btn):focus {\\n color: #777777;\\n}\\n.footer .social-area {\\n padding: 15px 0;\\n}\\n.footer .social-area h5 {\\n padding-bottom: 15px;\\n}\\n.footer .social-area > a:not(.btn) {\\n color: #9a9a9a;\\n display: inline-block;\\n vertical-align: top;\\n padding: 10px 5px;\\n font-size: 20px;\\n font-weight: normal;\\n line-height: 20px;\\n text-align: center;\\n}\\n.footer .social-area > a:not(.btn):hover,\\n.footer .social-area > a:not(.btn):focus {\\n color: #777777;\\n}\\n.footer .copyright {\\n color: #777777;\\n padding: 10px 15px;\\n margin: 10px 3px;\\n line-height: 20px;\\n font-size: 14px;\\n}\\n.footer hr {\\n border-color: #dddddd;\\n}\\n.footer .title {\\n color: #777777;\\n}\\n\\n.footer-default {\\n background-color: #f5f5f5;\\n}\\n\\n.footer:not(.footer-big) nav > ul {\\n font-size: 14px;\\n}\\n.footer:not(.footer-big) nav > ul li {\\n margin-left: 20px;\\n float: left;\\n}\\n.footer:not(.footer-big) nav > ul a {\\n padding: 10px 0px;\\n margin: 10px 10px 10px 0px;\\n}\\n\\n.dropdown-menu {\\n visibility: hidden;\\n margin: 0;\\n padding: 0;\\n border-radius: 10px;\\n display: block;\\n z-index: 9000;\\n position: absolute;\\n opacity: 0;\\n filter: alpha(opacity=0);\\n -webkit-box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.125);\\n box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.125);\\n}\\n.open .dropdown-menu {\\n opacity: 1;\\n filter: alpha(opacity=100);\\n visibility: visible;\\n}\\n.select .dropdown-menu {\\n border-radius: 0 0 10px 10px;\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n -webkit-transform-origin: 50% -40px;\\n -moz-transform-origin: 50% -40px;\\n -o-transform-origin: 50% -40px;\\n -ms-transform-origin: 50% -40px;\\n transform-origin: 50% -40px;\\n -webkit-transform: scale(1);\\n -moz-transform: scale(1);\\n -o-transform: scale(1);\\n -ms-transform: scale(1);\\n transform: scale(1);\\n -webkit-transition: all 150ms linear;\\n -moz-transition: all 150ms linear;\\n -o-transition: all 150ms linear;\\n -ms-transition: all 150ms linear;\\n transition: all 150ms linear;\\n margin-top: -20px;\\n}\\n.select.open .dropdown-menu {\\n margin-top: -1px;\\n}\\n.dropdown-menu > li > a {\\n padding: 8px 16px;\\n color: #333333;\\n}\\n.dropdown-menu > li > a img {\\n margin-top: -3px;\\n}\\n.dropdown-menu > li > a:focus {\\n outline: 0 !important;\\n}\\n.btn-group.select .dropdown-menu {\\n min-width: 100%;\\n}\\n.dropdown-menu > li:first-child > a {\\n border-top-left-radius: 10px;\\n border-top-right-radius: 10px;\\n}\\n.dropdown-menu > li:last-child > a {\\n border-bottom-left-radius: 10px;\\n border-bottom-right-radius: 10px;\\n}\\n.select .dropdown-menu > li:first-child > a {\\n border-radius: 0;\\n border-bottom: 0 none;\\n}\\n.dropdown-menu > li > a:hover,\\n.dropdown-menu > li > a:focus {\\n background-color: #f5f5f5;\\n color: #333333;\\n opacity: 1;\\n text-decoration: none;\\n}\\n.dropdown-menu.dropdown-blue > li > a:hover,\\n.dropdown-menu.dropdown-blue > li > a:focus {\\n background-color: rgba(52, 114, 247, 0.2);\\n}\\n.dropdown-menu.dropdown-azure > li > a:hover,\\n.dropdown-menu.dropdown-azure > li > a:focus {\\n background-color: rgba(29, 199, 234, 0.2);\\n}\\n.dropdown-menu.ct-green > li > a:hover,\\n.dropdown-menu.ct-green > li > a:focus {\\n background-color: rgba(135, 203, 22, 0.2);\\n}\\n.dropdown-menu.dropdown-orange > li > a:hover,\\n.dropdown-menu.dropdown-orange > li > a:focus {\\n background-color: rgba(255, 149, 0, 0.2);\\n}\\n.dropdown-menu.dropdown-red > li > a:hover,\\n.dropdown-menu.dropdown-red > li > a:focus {\\n background-color: rgba(255, 74, 85, 0.2);\\n}\\n\\n.dropdown-with-icons > li > a {\\n padding-left: 0px;\\n line-height: 28px;\\n}\\n\\n.dropdown-with-icons i {\\n text-align: center;\\n line-height: 28px;\\n float: left;\\n}\\n.dropdown-with-icons i[class^='pe-'] {\\n font-size: 24px;\\n width: 46px;\\n}\\n.dropdown-with-icons i[class^='fa'] {\\n font-size: 14px;\\n width: 38px;\\n}\\n\\n.btn-group.select {\\n overflow: hidden;\\n}\\n\\n.btn-group.select.open {\\n overflow: visible;\\n}\\n\\n.card {\\n border-radius: 4px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(63, 63, 68, 0.1);\\n background-color: #ffffff;\\n margin-bottom: 30px;\\n}\\n.card .image {\\n width: 100%;\\n overflow: hidden;\\n height: 260px;\\n border-radius: 4px 4px 0 0;\\n position: relative;\\n -webkit-transform-style: preserve-3d;\\n -moz-transform-style: preserve-3d;\\n transform-style: preserve-3d;\\n}\\n.card .image img {\\n width: 100%;\\n}\\n.card .filter {\\n position: absolute;\\n z-index: 2;\\n background-color: rgba(0, 0, 0, 0.68);\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n text-align: center;\\n opacity: 0;\\n filter: alpha(opacity=0);\\n}\\n.card .filter .btn {\\n position: relative;\\n top: 50%;\\n -webkit-transform: translateY(-50%);\\n -ms-transform: translateY(-50%);\\n transform: translateY(-50%);\\n}\\n.card:hover .filter {\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.card .btn-hover {\\n opacity: 0;\\n filter: alpha(opacity=0);\\n}\\n.card:hover .btn-hover {\\n opacity: 1;\\n filter: alpha(opacity=100);\\n}\\n.card .content {\\n padding: 15px 15px 10px 15px;\\n}\\n.card .header {\\n padding: 15px 15px 0;\\n}\\n.card .category,\\n.card label {\\n font-size: 14px;\\n font-weight: 400;\\n color: #9a9a9a;\\n margin-bottom: 0px;\\n}\\n.card .category i,\\n.card label i {\\n font-size: 16px;\\n}\\n.card label {\\n font-size: 12px;\\n margin-bottom: 5px;\\n text-transform: uppercase;\\n}\\n.card .title {\\n margin: 0;\\n color: #333333;\\n font-weight: 300;\\n}\\n.card .avatar {\\n width: 30px;\\n height: 30px;\\n overflow: hidden;\\n border-radius: 50%;\\n margin-right: 5px;\\n}\\n.card .description {\\n font-size: 14px;\\n color: #333;\\n}\\n.card .footer {\\n padding: 0;\\n background-color: transparent;\\n line-height: 30px;\\n}\\n.card .footer .legend {\\n padding: 5px 0;\\n}\\n.card .footer hr {\\n margin-top: 5px;\\n margin-bottom: 5px;\\n}\\n.card .stats {\\n color: #a9a9a9;\\n}\\n.card .footer div {\\n display: inline-block;\\n}\\n.card .author {\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n}\\n.card .author i {\\n font-size: 14px;\\n}\\n.card h6 {\\n font-size: 12px;\\n margin: 0;\\n}\\n.card.card-separator:after {\\n height: 100%;\\n right: -15px;\\n top: 0;\\n width: 1px;\\n background-color: #dddddd;\\n content: '';\\n position: absolute;\\n}\\n.card .ct-chart {\\n margin: 30px 0 30px;\\n height: 245px;\\n}\\n.card .table tbody td:first-child,\\n.card .table thead th:first-child {\\n padding-left: 15px;\\n}\\n.card .table tbody td:last-child,\\n.card .table thead th:last-child {\\n padding-right: 15px;\\n}\\n.card .alert {\\n border-radius: 4px;\\n position: relative;\\n}\\n.card .alert.alert-with-icon {\\n padding-left: 65px;\\n}\\n\\n.card-user .image {\\n height: 110px;\\n}\\n\\n.card-user .image-plain {\\n height: 0;\\n margin-top: 110px;\\n}\\n\\n.card-user .author {\\n text-align: center;\\n text-transform: none;\\n margin-top: -70px;\\n}\\n\\n.card-user .avatar {\\n width: 124px;\\n height: 124px;\\n border: 5px solid #ffffff;\\n position: relative;\\n margin-bottom: 15px;\\n}\\n.card-user .avatar.border-gray {\\n border-color: #eeeeee;\\n}\\n\\n.card-user .title {\\n line-height: 24px;\\n}\\n\\n.card-user .content {\\n min-height: 240px;\\n}\\n\\n.card-user .footer,\\n.card-price .footer {\\n padding: 5px 15px 10px;\\n}\\n\\n.card-user hr,\\n.card-price hr {\\n margin: 5px 15px;\\n}\\n\\n.card-plain {\\n background-color: transparent;\\n box-shadow: none;\\n border-radius: 0;\\n}\\n.card-plain .image {\\n border-radius: 4px;\\n}\\n\\n.card-stats .icon-big {\\n font-size: 3em;\\n min-height: 64px;\\n}\\n.card-stats .icon-big i {\\n font-weight: bold;\\n line-height: 59px;\\n}\\n\\n.card-stats .numbers {\\n font-size: 2em;\\n text-align: right;\\n}\\n.card-stats .numbers p {\\n margin: 0;\\n}\\n\\n.ct-label {\\n fill: rgba(0, 0, 0, 0.4);\\n color: rgba(0, 0, 0, 0.4);\\n font-size: 1.3rem;\\n line-height: 1;\\n}\\n\\n.ct-chart-line .ct-label,\\n.ct-chart-bar .ct-label {\\n display: block;\\n display: -webkit-box;\\n display: -moz-box;\\n display: -ms-flexbox;\\n display: -webkit-flex;\\n display: flex;\\n}\\n\\n.ct-label.ct-horizontal.ct-start {\\n -webkit-box-align: flex-end;\\n -webkit-align-items: flex-end;\\n -ms-flex-align: flex-end;\\n align-items: flex-end;\\n -webkit-box-pack: flex-start;\\n -webkit-justify-content: flex-start;\\n -ms-flex-pack: flex-start;\\n justify-content: flex-start;\\n text-align: left;\\n text-anchor: start;\\n}\\n\\n.ct-label.ct-horizontal.ct-end {\\n -webkit-box-align: flex-start;\\n -webkit-align-items: flex-start;\\n -ms-flex-align: flex-start;\\n align-items: flex-start;\\n -webkit-box-pack: flex-start;\\n -webkit-justify-content: flex-start;\\n -ms-flex-pack: flex-start;\\n justify-content: flex-start;\\n text-align: left;\\n text-anchor: start;\\n}\\n\\n.ct-label.ct-vertical.ct-start {\\n -webkit-box-align: flex-end;\\n -webkit-align-items: flex-end;\\n -ms-flex-align: flex-end;\\n align-items: flex-end;\\n -webkit-box-pack: flex-end;\\n -webkit-justify-content: flex-end;\\n -ms-flex-pack: flex-end;\\n justify-content: flex-end;\\n text-align: right;\\n text-anchor: end;\\n}\\n\\n.ct-label.ct-vertical.ct-end {\\n -webkit-box-align: flex-end;\\n -webkit-align-items: flex-end;\\n -ms-flex-align: flex-end;\\n align-items: flex-end;\\n -webkit-box-pack: flex-start;\\n -webkit-justify-content: flex-start;\\n -ms-flex-pack: flex-start;\\n justify-content: flex-start;\\n text-align: left;\\n text-anchor: start;\\n}\\n\\n.ct-chart-bar .ct-label.ct-horizontal.ct-start {\\n -webkit-box-align: flex-end;\\n -webkit-align-items: flex-end;\\n -ms-flex-align: flex-end;\\n align-items: flex-end;\\n -webkit-box-pack: center;\\n -webkit-justify-content: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n text-align: center;\\n text-anchor: start;\\n}\\n\\n.ct-chart-bar .ct-label.ct-horizontal.ct-end {\\n -webkit-box-align: flex-start;\\n -webkit-align-items: flex-start;\\n -ms-flex-align: flex-start;\\n align-items: flex-start;\\n -webkit-box-pack: center;\\n -webkit-justify-content: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n text-align: center;\\n text-anchor: start;\\n}\\n\\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start {\\n -webkit-box-align: flex-end;\\n -webkit-align-items: flex-end;\\n -ms-flex-align: flex-end;\\n align-items: flex-end;\\n -webkit-box-pack: flex-start;\\n -webkit-justify-content: flex-start;\\n -ms-flex-pack: flex-start;\\n justify-content: flex-start;\\n text-align: left;\\n text-anchor: start;\\n}\\n\\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end {\\n -webkit-box-align: flex-start;\\n -webkit-align-items: flex-start;\\n -ms-flex-align: flex-start;\\n align-items: flex-start;\\n -webkit-box-pack: flex-start;\\n -webkit-justify-content: flex-start;\\n -ms-flex-pack: flex-start;\\n justify-content: flex-start;\\n text-align: left;\\n text-anchor: start;\\n}\\n\\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start {\\n -webkit-box-align: center;\\n -webkit-align-items: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: flex-end;\\n -webkit-justify-content: flex-end;\\n -ms-flex-pack: flex-end;\\n justify-content: flex-end;\\n text-align: right;\\n text-anchor: end;\\n}\\n\\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end {\\n -webkit-box-align: center;\\n -webkit-align-items: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: flex-start;\\n -webkit-justify-content: flex-start;\\n -ms-flex-pack: flex-start;\\n justify-content: flex-start;\\n text-align: left;\\n text-anchor: end;\\n}\\n\\n.ct-grid {\\n stroke: rgba(0, 0, 0, 0.2);\\n stroke-width: 1px;\\n stroke-dasharray: 2px;\\n}\\n\\n.ct-point {\\n stroke-width: 8px;\\n stroke-linecap: round;\\n}\\n\\n.ct-line {\\n fill: none;\\n stroke-width: 3px;\\n}\\n\\n.ct-area {\\n stroke: none;\\n fill-opacity: 0.8;\\n}\\n\\n.ct-bar {\\n fill: none;\\n stroke-width: 10px;\\n}\\n\\n.ct-slice-donut {\\n fill: none;\\n stroke-width: 60px;\\n}\\n\\n.ct-series-a .ct-point,\\n.ct-series-a .ct-line,\\n.ct-series-a .ct-bar,\\n.ct-series-a .ct-slice-donut {\\n stroke: #1dc7ea;\\n}\\n\\n.ct-series-a .ct-slice-pie,\\n.ct-series-a .ct-area {\\n fill: #1dc7ea;\\n}\\n\\n.ct-series-b .ct-point,\\n.ct-series-b .ct-line,\\n.ct-series-b .ct-bar,\\n.ct-series-b .ct-slice-donut {\\n stroke: #fb404b;\\n}\\n\\n.ct-series-b .ct-slice-pie,\\n.ct-series-b .ct-area {\\n fill: #fb404b;\\n}\\n\\n.ct-series-c .ct-point,\\n.ct-series-c .ct-line,\\n.ct-series-c .ct-bar,\\n.ct-series-c .ct-slice-donut {\\n stroke: #ffa534;\\n}\\n\\n.ct-series-c .ct-slice-pie,\\n.ct-series-c .ct-area {\\n fill: #ffa534;\\n}\\n\\n.ct-series-d .ct-point,\\n.ct-series-d .ct-line,\\n.ct-series-d .ct-bar,\\n.ct-series-d .ct-slice-donut {\\n stroke: #9368e9;\\n}\\n\\n.ct-series-d .ct-slice-pie,\\n.ct-series-d .ct-area {\\n fill: #9368e9;\\n}\\n\\n.ct-series-e .ct-point,\\n.ct-series-e .ct-line,\\n.ct-series-e .ct-bar,\\n.ct-series-e .ct-slice-donut {\\n stroke: #87cb16;\\n}\\n\\n.ct-series-e .ct-slice-pie,\\n.ct-series-e .ct-area {\\n fill: #87cb16;\\n}\\n\\n.ct-series-f .ct-point,\\n.ct-series-f .ct-line,\\n.ct-series-f .ct-bar,\\n.ct-series-f .ct-slice-donut {\\n stroke: #1b8dff;\\n}\\n\\n.ct-series-f .ct-slice-pie,\\n.ct-series-f .ct-area {\\n fill: #1b8dff;\\n}\\n\\n.ct-series-g .ct-point,\\n.ct-series-g .ct-line,\\n.ct-series-g .ct-bar,\\n.ct-series-g .ct-slice-donut {\\n stroke: #5e5e5e;\\n}\\n\\n.ct-series-g .ct-slice-pie,\\n.ct-series-g .ct-area {\\n fill: #5e5e5e;\\n}\\n\\n.ct-series-h .ct-point,\\n.ct-series-h .ct-line,\\n.ct-series-h .ct-bar,\\n.ct-series-h .ct-slice-donut {\\n stroke: #dd4b39;\\n}\\n\\n.ct-series-h .ct-slice-pie,\\n.ct-series-h .ct-area {\\n fill: #dd4b39;\\n}\\n\\n.ct-series-i .ct-point,\\n.ct-series-i .ct-line,\\n.ct-series-i .ct-bar,\\n.ct-series-i .ct-slice-donut {\\n stroke: #35465c;\\n}\\n\\n.ct-series-i .ct-slice-pie,\\n.ct-series-i .ct-area {\\n fill: #35465c;\\n}\\n\\n.ct-series-j .ct-point,\\n.ct-series-j .ct-line,\\n.ct-series-j .ct-bar,\\n.ct-series-j .ct-slice-donut {\\n stroke: #e52d27;\\n}\\n\\n.ct-series-j .ct-slice-pie,\\n.ct-series-j .ct-area {\\n fill: #e52d27;\\n}\\n\\n.ct-series-k .ct-point,\\n.ct-series-k .ct-line,\\n.ct-series-k .ct-bar,\\n.ct-series-k .ct-slice-donut {\\n stroke: #55acee;\\n}\\n\\n.ct-series-k .ct-slice-pie,\\n.ct-series-k .ct-area {\\n fill: #55acee;\\n}\\n\\n.ct-series-l .ct-point,\\n.ct-series-l .ct-line,\\n.ct-series-l .ct-bar,\\n.ct-series-l .ct-slice-donut {\\n stroke: #cc2127;\\n}\\n\\n.ct-series-l .ct-slice-pie,\\n.ct-series-l .ct-area {\\n fill: #cc2127;\\n}\\n\\n.ct-series-m .ct-point,\\n.ct-series-m .ct-line,\\n.ct-series-m .ct-bar,\\n.ct-series-m .ct-slice-donut {\\n stroke: #1769ff;\\n}\\n\\n.ct-series-m .ct-slice-pie,\\n.ct-series-m .ct-area {\\n fill: #1769ff;\\n}\\n\\n.ct-series-n .ct-point,\\n.ct-series-n .ct-line,\\n.ct-series-n .ct-bar,\\n.ct-series-n .ct-slice-donut {\\n stroke: #6188e2;\\n}\\n\\n.ct-series-n .ct-slice-pie,\\n.ct-series-n .ct-area {\\n fill: #6188e2;\\n}\\n\\n.ct-series-o .ct-point,\\n.ct-series-o .ct-line,\\n.ct-series-o .ct-bar,\\n.ct-series-o .ct-slice-donut {\\n stroke: #a748ca;\\n}\\n\\n.ct-series-o .ct-slice-pie,\\n.ct-series-o .ct-area {\\n fill: #a748ca;\\n}\\n\\n.ct-square {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-square:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 100%;\\n}\\n.ct-square:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-square > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-minor-second {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-minor-second:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 93.75%;\\n}\\n.ct-minor-second:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-minor-second > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-major-second {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-major-second:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 88.88889%;\\n}\\n.ct-major-second:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-major-second > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-minor-third {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-minor-third:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 83.33333%;\\n}\\n.ct-minor-third:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-minor-third > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-major-third {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-major-third:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 80%;\\n}\\n.ct-major-third:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-major-third > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-perfect-fourth {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-perfect-fourth:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 75%;\\n}\\n.ct-perfect-fourth:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-perfect-fourth > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-perfect-fifth {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-perfect-fifth:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 66.66667%;\\n}\\n.ct-perfect-fifth:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-perfect-fifth > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-minor-sixth {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-minor-sixth:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 62.5%;\\n}\\n.ct-minor-sixth:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-minor-sixth > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-golden-section {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-golden-section:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 61.8047%;\\n}\\n.ct-golden-section:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-golden-section > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-major-sixth {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-major-sixth:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 60%;\\n}\\n.ct-major-sixth:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-major-sixth > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-minor-seventh {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-minor-seventh:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 56.25%;\\n}\\n.ct-minor-seventh:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-minor-seventh > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-major-seventh {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-major-seventh:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 53.33333%;\\n}\\n.ct-major-seventh:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-major-seventh > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-octave {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-octave:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 50%;\\n}\\n.ct-octave:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-octave > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-major-tenth {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-major-tenth:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 40%;\\n}\\n.ct-major-tenth:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-major-tenth > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-major-eleventh {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-major-eleventh:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 37.5%;\\n}\\n.ct-major-eleventh:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-major-eleventh > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-major-twelfth {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-major-twelfth:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 33.33333%;\\n}\\n.ct-major-twelfth:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-major-twelfth > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.ct-double-octave {\\n display: block;\\n position: relative;\\n width: 100%;\\n}\\n.ct-double-octave:before {\\n display: block;\\n float: left;\\n content: '';\\n width: 0;\\n height: 0;\\n padding-bottom: 25%;\\n}\\n.ct-double-octave:after {\\n content: '';\\n display: table;\\n clear: both;\\n}\\n.ct-double-octave > svg {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n@media (min-width: 992px) {\\n .navbar-form {\\n margin-top: 21px;\\n margin-bottom: 21px;\\n padding-left: 5px;\\n padding-right: 5px;\\n }\\n .navbar-nav > li > .dropdown-menu,\\n .dropdown .dropdown-menu {\\n -webkit-transform: scale(0);\\n -moz-transform: scale(0);\\n -o-transform: scale(0);\\n -ms-transform: scale(0);\\n transform: scale(0);\\n -webkit-transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1);\\n -moz-transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1);\\n -o-transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1);\\n -ms-transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1);\\n transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1);\\n }\\n .navbar-nav > li.open > .dropdown-menu,\\n .dropdown.open .dropdown-menu {\\n -webkit-transform: scale(1);\\n -moz-transform: scale(1);\\n -o-transform: scale(1);\\n -ms-transform: scale(1);\\n transform: scale(1);\\n -webkit-transform-origin: 29px -50px;\\n -moz-transform-origin: 29px -50px;\\n -o-transform-origin: 29px -50px;\\n -ms-transform-origin: 29px -50px;\\n transform-origin: 29px -50px;\\n }\\n .navbar-nav > li > .dropdown-menu:before {\\n border-bottom: 11px solid rgba(0, 0, 0, 0.2);\\n border-left: 11px solid transparent;\\n border-right: 11px solid transparent;\\n content: '';\\n display: inline-block;\\n position: absolute;\\n left: 12px;\\n top: -11px;\\n }\\n .navbar-nav > li > .dropdown-menu:after {\\n border-bottom: 11px solid #ffffff;\\n border-left: 11px solid transparent;\\n border-right: 11px solid transparent;\\n content: '';\\n display: inline-block;\\n position: absolute;\\n left: 12px;\\n top: -10px;\\n }\\n .navbar-nav.navbar-right > li > .dropdown-menu:before {\\n left: auto;\\n right: 12px;\\n }\\n .navbar-nav.navbar-right > li > .dropdown-menu:after {\\n left: auto;\\n right: 12px;\\n }\\n .footer:not(.footer-big) nav > ul li:first-child {\\n margin-left: 0;\\n }\\n body > .navbar-collapse.collapse {\\n display: none !important;\\n }\\n .card form [class*='col-'] {\\n padding: 6px;\\n }\\n .card form [class*='col-']:first-child {\\n padding-left: 15px;\\n }\\n .card form [class*='col-']:last-child {\\n padding-right: 15px;\\n }\\n}\\n\\n/* Changes for small display */\\n@media (max-width: 991px) {\\n .main-panel {\\n width: 100%;\\n }\\n .navbar-transparent {\\n padding-top: 15px;\\n background-color: rgba(0, 0, 0, 0.45);\\n }\\n body {\\n position: relative;\\n }\\n .main-panel {\\n -webkit-transform: translate3d(0px, 0, 0);\\n -moz-transform: translate3d(0px, 0, 0);\\n -o-transform: translate3d(0px, 0, 0);\\n -ms-transform: translate3d(0px, 0, 0);\\n transform: translate3d(0px, 0, 0);\\n -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n left: 0;\\n }\\n .navbar .container {\\n left: 0;\\n width: 100%;\\n -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n position: relative;\\n }\\n .navbar .navbar-collapse.collapse,\\n .navbar .navbar-collapse.collapse.in,\\n .navbar .navbar-collapse.collapsing {\\n display: none !important;\\n }\\n .navbar-nav > li {\\n float: none;\\n position: relative;\\n display: block;\\n }\\n .sidebar {\\n position: fixed;\\n display: block;\\n top: 0;\\n height: 100%;\\n width: 260px;\\n right: 0;\\n left: auto;\\n z-index: 1032;\\n visibility: visible;\\n background-color: #999;\\n overflow-y: visible;\\n border-top: none;\\n text-align: left;\\n padding: 0;\\n -webkit-transform: translate3d(260px, 0, 0);\\n -moz-transform: translate3d(260px, 0, 0);\\n -o-transform: translate3d(260px, 0, 0);\\n -ms-transform: translate3d(260px, 0, 0);\\n transform: translate3d(260px, 0, 0);\\n -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1);\\n }\\n .sidebar > ul {\\n position: relative;\\n z-index: 4;\\n overflow-y: scroll;\\n height: calc(100vh - 61px);\\n width: 100%;\\n }\\n .sidebar::before {\\n top: 0;\\n left: 0;\\n height: 100%;\\n width: 100%;\\n position: absolute;\\n background-color: #282828;\\n display: block;\\n content: '';\\n z-index: 1;\\n }\\n .sidebar .sidebar-wrapper .dropdown-menu > li:first-child > a,\\n .sidebar .sidebar-wrapper .dropdown-menu > li:last-child > a {\\n border-radius: 4px;\\n }\\n .sidebar .sidebar-wrapper .dropdown-menu > li > a:hover,\\n .sidebar .sidebar-wrapper .dropdown-menu > li > a:focus {\\n color: white;\\n }\\n .sidebar .sidebar-wrapper > .nav > div .nav {\\n margin-top: 10px;\\n float: none !important;\\n }\\n .sidebar .sidebar-wrapper > .nav > div .nav > li > a {\\n margin: 0;\\n line-height: 30px;\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n margin: 5px 15px;\\n }\\n .sidebar .sidebar-wrapper > .nav > div .notification {\\n float: left;\\n line-height: 30px;\\n margin-right: 8px;\\n font-weight: 600;\\n }\\n .sidebar .open .dropdown-menu {\\n position: static;\\n float: none;\\n width: auto;\\n margin-top: 0;\\n background-color: transparent;\\n border: 0;\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n }\\n .nav-open .sidebar {\\n -webkit-transform: translate3d(0px, 0, 0);\\n -moz-transform: translate3d(0px, 0, 0);\\n -o-transform: translate3d(0px, 0, 0);\\n -ms-transform: translate3d(0px, 0, 0);\\n transform: translate3d(0px, 0, 0);\\n }\\n .nav-open .navbar .container {\\n left: -260px;\\n }\\n .nav-open .main-panel {\\n left: 0;\\n -webkit-transform: translate3d(-260px, 0, 0);\\n -moz-transform: translate3d(-260px, 0, 0);\\n -o-transform: translate3d(-260px, 0, 0);\\n -ms-transform: translate3d(-260px, 0, 0);\\n transform: translate3d(-260px, 0, 0);\\n }\\n .navbar-toggle .icon-bar {\\n display: block;\\n position: relative;\\n background: #fff;\\n width: 24px;\\n height: 2px;\\n border-radius: 1px;\\n margin: 0 auto;\\n }\\n .navbar-header .navbar-toggle {\\n margin: 10px 15px 10px 0;\\n width: 40px;\\n height: 40px;\\n }\\n .bar1,\\n .bar2,\\n .bar3 {\\n outline: 1px solid transparent;\\n }\\n .bar1 {\\n top: 0px;\\n -webkit-animation: topbar-back 500ms linear 0s;\\n -moz-animation: topbar-back 500ms linear 0s;\\n animation: topbar-back 500ms 0s;\\n -webkit-animation-fill-mode: forwards;\\n -moz-animation-fill-mode: forwards;\\n animation-fill-mode: forwards;\\n }\\n .bar2 {\\n opacity: 1;\\n }\\n .bar3 {\\n bottom: 0px;\\n -webkit-animation: bottombar-back 500ms linear 0s;\\n -moz-animation: bottombar-back 500ms linear 0s;\\n animation: bottombar-back 500ms 0s;\\n -webkit-animation-fill-mode: forwards;\\n -moz-animation-fill-mode: forwards;\\n animation-fill-mode: forwards;\\n }\\n .toggled .bar1 {\\n top: 6px;\\n -webkit-animation: topbar-x 500ms linear 0s;\\n -moz-animation: topbar-x 500ms linear 0s;\\n animation: topbar-x 500ms 0s;\\n -webkit-animation-fill-mode: forwards;\\n -moz-animation-fill-mode: forwards;\\n animation-fill-mode: forwards;\\n }\\n .toggled .bar2 {\\n opacity: 0;\\n }\\n .toggled .bar3 {\\n bottom: 6px;\\n -webkit-animation: bottombar-x 500ms linear 0s;\\n -moz-animation: bottombar-x 500ms linear 0s;\\n animation: bottombar-x 500ms 0s;\\n -webkit-animation-fill-mode: forwards;\\n -moz-animation-fill-mode: forwards;\\n animation-fill-mode: forwards;\\n }\\n @keyframes topbar-x {\\n 0% {\\n top: 0px;\\n transform: rotate(0deg);\\n }\\n 45% {\\n top: 6px;\\n transform: rotate(145deg);\\n }\\n 75% {\\n transform: rotate(130deg);\\n }\\n 100% {\\n transform: rotate(135deg);\\n }\\n }\\n @-webkit-keyframes topbar-x {\\n 0% {\\n top: 0px;\\n -webkit-transform: rotate(0deg);\\n }\\n 45% {\\n top: 6px;\\n -webkit-transform: rotate(145deg);\\n }\\n 75% {\\n -webkit-transform: rotate(130deg);\\n }\\n 100% {\\n -webkit-transform: rotate(135deg);\\n }\\n }\\n @-moz-keyframes topbar-x {\\n 0% {\\n top: 0px;\\n -moz-transform: rotate(0deg);\\n }\\n 45% {\\n top: 6px;\\n -moz-transform: rotate(145deg);\\n }\\n 75% {\\n -moz-transform: rotate(130deg);\\n }\\n 100% {\\n -moz-transform: rotate(135deg);\\n }\\n }\\n @keyframes topbar-back {\\n 0% {\\n top: 6px;\\n transform: rotate(135deg);\\n }\\n 45% {\\n transform: rotate(-10deg);\\n }\\n 75% {\\n transform: rotate(5deg);\\n }\\n 100% {\\n top: 0px;\\n transform: rotate(0);\\n }\\n }\\n @-webkit-keyframes topbar-back {\\n 0% {\\n top: 6px;\\n -webkit-transform: rotate(135deg);\\n }\\n 45% {\\n -webkit-transform: rotate(-10deg);\\n }\\n 75% {\\n -webkit-transform: rotate(5deg);\\n }\\n 100% {\\n top: 0px;\\n -webkit-transform: rotate(0);\\n }\\n }\\n @-moz-keyframes topbar-back {\\n 0% {\\n top: 6px;\\n -moz-transform: rotate(135deg);\\n }\\n 45% {\\n -moz-transform: rotate(-10deg);\\n }\\n 75% {\\n -moz-transform: rotate(5deg);\\n }\\n 100% {\\n top: 0px;\\n -moz-transform: rotate(0);\\n }\\n }\\n @keyframes bottombar-x {\\n 0% {\\n bottom: 0px;\\n transform: rotate(0deg);\\n }\\n 45% {\\n bottom: 6px;\\n transform: rotate(-145deg);\\n }\\n 75% {\\n transform: rotate(-130deg);\\n }\\n 100% {\\n transform: rotate(-135deg);\\n }\\n }\\n @-webkit-keyframes bottombar-x {\\n 0% {\\n bottom: 0px;\\n -webkit-transform: rotate(0deg);\\n }\\n 45% {\\n bottom: 6px;\\n -webkit-transform: rotate(-145deg);\\n }\\n 75% {\\n -webkit-transform: rotate(-130deg);\\n }\\n 100% {\\n -webkit-transform: rotate(-135deg);\\n }\\n }\\n @-moz-keyframes bottombar-x {\\n 0% {\\n bottom: 0px;\\n -moz-transform: rotate(0deg);\\n }\\n 45% {\\n bottom: 6px;\\n -moz-transform: rotate(-145deg);\\n }\\n 75% {\\n -moz-transform: rotate(-130deg);\\n }\\n 100% {\\n -moz-transform: rotate(-135deg);\\n }\\n }\\n @keyframes bottombar-back {\\n 0% {\\n bottom: 6px;\\n transform: rotate(-135deg);\\n }\\n 45% {\\n transform: rotate(10deg);\\n }\\n 75% {\\n transform: rotate(-5deg);\\n }\\n 100% {\\n bottom: 0px;\\n transform: rotate(0);\\n }\\n }\\n @-webkit-keyframes bottombar-back {\\n 0% {\\n bottom: 6px;\\n -webkit-transform: rotate(-135deg);\\n }\\n 45% {\\n -webkit-transform: rotate(10deg);\\n }\\n 75% {\\n -webkit-transform: rotate(-5deg);\\n }\\n 100% {\\n bottom: 0px;\\n -webkit-transform: rotate(0);\\n }\\n }\\n @-moz-keyframes bottombar-back {\\n 0% {\\n bottom: 6px;\\n -moz-transform: rotate(-135deg);\\n }\\n 45% {\\n -moz-transform: rotate(10deg);\\n }\\n 75% {\\n -moz-transform: rotate(-5deg);\\n }\\n 100% {\\n bottom: 0px;\\n -moz-transform: rotate(0);\\n }\\n }\\n @-webkit-keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n }\\n 100% {\\n opacity: 1;\\n }\\n }\\n @-moz-keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n }\\n 100% {\\n opacity: 1;\\n }\\n }\\n @keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n }\\n 100% {\\n opacity: 1;\\n }\\n }\\n .dropdown-menu .divider {\\n background-color: rgba(229, 229, 229, 0.15);\\n }\\n .navbar-nav {\\n margin: 1px 0;\\n }\\n .navbar-nav .open .dropdown-menu > li > a {\\n padding: 15px 15px 5px 50px;\\n }\\n .navbar-nav .open .dropdown-menu > li:first-child > a {\\n padding: 5px 15px 5px 50px;\\n }\\n .navbar-nav .open .dropdown-menu > li:last-child > a {\\n padding: 15px 15px 25px 50px;\\n }\\n [class*='navbar-'] .navbar-nav > li > a,\\n [class*='navbar-'] .navbar-nav > li > a:hover,\\n [class*='navbar-'] .navbar-nav > li > a:focus,\\n [class*='navbar-'] .navbar-nav .active > a,\\n [class*='navbar-'] .navbar-nav .active > a:hover,\\n [class*='navbar-'] .navbar-nav .active > a:focus,\\n [class*='navbar-'] .navbar-nav .open .dropdown-menu > li > a,\\n [class*='navbar-'] .navbar-nav .open .dropdown-menu > li > a:hover,\\n [class*='navbar-'] .navbar-nav .open .dropdown-menu > li > a:focus,\\n [class*='navbar-']\\n .navbar-nav\\n .navbar-nav\\n .open\\n .dropdown-menu\\n > li\\n > a:active {\\n color: white;\\n }\\n [class*='navbar-'] .navbar-nav > li > a,\\n [class*='navbar-'] .navbar-nav > li > a:hover,\\n [class*='navbar-'] .navbar-nav > li > a:focus,\\n [class*='navbar-'] .navbar-nav .open .dropdown-menu > li > a,\\n [class*='navbar-'] .navbar-nav .open .dropdown-menu > li > a:hover,\\n [class*='navbar-'] .navbar-nav .open .dropdown-menu > li > a:focus {\\n opacity: 0.7;\\n background: transparent;\\n }\\n [class*='navbar-']\\n .navbar-nav.navbar-nav\\n .open\\n .dropdown-menu\\n > li\\n > a:active {\\n opacity: 1;\\n }\\n [class*='navbar-'] .navbar-nav .dropdown > a:hover .caret {\\n border-bottom-color: #777;\\n border-top-color: #777;\\n }\\n [class*='navbar-'] .navbar-nav .dropdown > a:active .caret {\\n border-bottom-color: white;\\n border-top-color: white;\\n }\\n .dropdown-menu {\\n display: none;\\n }\\n .navbar-fixed-top {\\n -webkit-backface-visibility: hidden;\\n }\\n #bodyClick {\\n height: 100%;\\n width: 100%;\\n position: fixed;\\n opacity: 0;\\n top: 0;\\n left: auto;\\n right: 250px;\\n content: '';\\n z-index: 9999;\\n overflow-x: hidden;\\n }\\n .social-line .btn {\\n margin: 0 0 10px 0;\\n }\\n .subscribe-line .form-control {\\n margin: 0 0 10px 0;\\n }\\n .social-line.pull-right {\\n float: none;\\n }\\n .footer nav.pull-left {\\n float: none !important;\\n }\\n .footer:not(.footer-big) nav > ul li {\\n float: none;\\n }\\n .social-area.pull-right {\\n float: none !important;\\n }\\n .form-control + .form-control-feedback {\\n margin-top: -8px;\\n }\\n .navbar-toggle:hover,\\n .navbar-toggle:focus {\\n background-color: transparent !important;\\n }\\n .btn.dropdown-toggle {\\n margin-bottom: 0;\\n }\\n .media-post .author {\\n width: 20%;\\n float: none !important;\\n display: block;\\n margin: 0 auto 10px;\\n }\\n .media-post .media-body {\\n width: 100%;\\n }\\n .navbar-collapse.collapse {\\n height: 100% !important;\\n }\\n .navbar-collapse.collapse.in {\\n display: block;\\n }\\n .navbar-header .collapse,\\n .navbar-toggle {\\n display: block !important;\\n }\\n .navbar-header {\\n float: none;\\n }\\n .navbar-nav .open .dropdown-menu {\\n position: static;\\n float: none;\\n width: auto;\\n margin-top: 0;\\n background-color: transparent;\\n border: 0;\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n }\\n .navbar-collapse .nav p {\\n font-size: 14px;\\n margin: 0;\\n }\\n .navbar-collapse [class^='pe-7s-'] {\\n float: left;\\n font-size: 20px;\\n margin-right: 10px;\\n }\\n}\\n\\n@media (min-width: 992px) {\\n .table-full-width {\\n margin-left: -15px;\\n margin-right: -15px;\\n }\\n .table-responsive {\\n overflow: visible;\\n }\\n}\\n\\n@media (max-width: 991px) {\\n .table-responsive {\\n width: 100%;\\n margin-bottom: 15px;\\n overflow-x: scroll;\\n overflow-y: hidden;\\n -ms-overflow-style: -ms-autohiding-scrollbar;\\n -webkit-overflow-scrolling: touch;\\n }\\n}\\n\", \"\"]);\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ReactMde, { commands as mdeCommands } from 'react-mde'\nimport MarkdownDisplay from 'components/MarkdownDisplay'\n\nexport class MarkdownEditor extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n markdown: props.value || '',\n selectedTab: 'write',\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.value !== this.props.value) {\n if (!this.props.value) {\n this.handleClear()\n }\n }\n }\n\n handleChange = value => {\n this.setState({ markdown: value })\n\n if (this.props.onKeyStroke) {\n this.props.onKeyStroke(value)\n }\n }\n\n handleClear = () => this.setState({ markdown: '' })\n\n render() {\n //Remove the image command from the button b ar\n const commands = mdeCommands.getDefaultCommands()\n commands[1] = {\n commands: [\n mdeCommands.linkCommand,\n mdeCommands.quoteCommand,\n mdeCommands.codeCommand,\n ],\n }\n\n return (\n this.props.onChange(this.state.markdown)}\n >\n this.setState({ selectedTab: tab })}\n generateMarkdownPreview={markdown =>\n Promise.resolve()\n }\n />\n
    \n )\n }\n}\n\nMarkdownEditor.propTypes = {\n onChange: PropTypes.func.isRequired,\n onKeyStroke: PropTypes.func,\n value: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n}\n\nexport default MarkdownEditor\n","\nvar content = require(\"!!../node_modules/css-loader/dist/cjs.js!./global-styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../node_modules/css-loader/dist/cjs.js!./global-styles.css\", function() {\n\t\tvar newContent = require(\"!!../node_modules/css-loader/dist/cjs.js!./global-styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Imports\nvar getUrl = require(\"../node_modules/css-loader/dist/runtime/getUrl.js\");\nvar ___CSS_LOADER_URL___0___ = getUrl(require(\"./assets/webfonts/roboto-v18-latin-100.woff2\"));\nvar ___CSS_LOADER_URL___1___ = getUrl(require(\"./assets/webfonts/roboto-v18-latin-100.woff\"));\nvar ___CSS_LOADER_URL___2___ = getUrl(require(\"./assets/webfonts/roboto-v18-latin-300.woff2\"));\nvar ___CSS_LOADER_URL___3___ = getUrl(require(\"./assets/webfonts/roboto-v18-latin-300.woff\"));\nvar ___CSS_LOADER_URL___4___ = getUrl(require(\"./assets/webfonts/roboto-v18-latin-regular.woff2\"));\nvar ___CSS_LOADER_URL___5___ = getUrl(require(\"./assets/webfonts/roboto-v18-latin-regular.woff\"));\nvar ___CSS_LOADER_URL___6___ = getUrl(require(\"./assets/webfonts/roboto-v18-latin-500.woff2\"));\nvar ___CSS_LOADER_URL___7___ = getUrl(require(\"./assets/webfonts/roboto-v18-latin-500.woff\"));\nvar ___CSS_LOADER_URL___8___ = getUrl(require(\"./assets/webfonts/comfortaa-v12-latin-regular.woff2\"));\nvar ___CSS_LOADER_URL___9___ = getUrl(require(\"./assets/webfonts/comfortaa-v12-latin-regular.woff\"));\n// Module\nexports.push([module.id, \"html,\\nbody {\\n height: 100%;\\n width: 100%;\\n}\\n\\nbody {\\n font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif;\\n font-weight: 300;\\n}\\n\\nbody.fontLoaded {\\n font-family: 'Roboto', 'Open Sans', 'Helvetica Neue', Helvetica, Arial,\\n sans-serif;\\n}\\n\\nbutton {\\n cursor: pointer;\\n}\\n\\nbutton:hover {\\n cursor: pointer;\\n}\\n\\n[type='button']:not(:disabled),\\n[type='reset']:not(:disabled),\\n[type='submit']:not(:disabled),\\nbutton:not(:disabled) {\\n cursor: pointer;\\n}\\n\\nbutton:focus {\\n outline: none !important;\\n}\\n\\n#app {\\n background-color: #fafafa;\\n min-height: 100%;\\n min-width: 100%;\\n}\\n\\np,\\nlabel {\\n font-family: 'Roboto', Georgia, Times, 'Times New Roman', serif;\\n line-height: 1.5em;\\n font-weight: 300;\\n}\\n\\np:last-child {\\n margin-bottom: 0;\\n}\\n\\nul {\\n list-style-type: none;\\n margin: 0;\\n padding: 0;\\n}\\n\\nth {\\n font-weight: 400;\\n}\\n\\ninput::placeholder {\\n color: #d2d2d2;\\n}\\n\\n/* react-dates overrides */\\n.SingleDatePicker,\\n.SingleDatePickerInput,\\n.DateInput {\\n width: 100%;\\n}\\n\\n.DateInput_input {\\n border: 1px solid #e3e3e3;\\n border-radius: 4px;\\n color: #565656;\\n padding: 8px 12px;\\n height: 40px;\\n box-shadow: none;\\n font-weight: 400;\\n font-size: inherit;\\n}\\n\\n.DateInput_input:focus {\\n border: 1px solid #aaaaaa;\\n box-shadow: none;\\n outline: 0 !important;\\n color: #333333;\\n}\\n\\n.DateInput_fang {\\n top: 40px !important;\\n}\\n\\n.SingleDatePicker_picker {\\n top: 50px !important;\\n}\\n\\nbutton[disabled] {\\n cursor: default;\\n}\\n\\n/* roboto-100 - latin */\\n@font-face {\\n font-family: 'Roboto';\\n font-style: normal;\\n font-weight: 100;\\n src: local('Roboto Thin'), local('Roboto-Thin'),\\n url(\" + ___CSS_LOADER_URL___0___ + \") format('woff2'),\\n \\n url(\" + ___CSS_LOADER_URL___1___ + \") format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */\\n}\\n/* roboto-300 - latin */\\n@font-face {\\n font-family: 'Roboto';\\n font-style: normal;\\n font-weight: 300;\\n src: local('Roboto Light'), local('Roboto-Light'),\\n url(\" + ___CSS_LOADER_URL___2___ + \") format('woff2'),\\n \\n url(\" + ___CSS_LOADER_URL___3___ + \") format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */\\n}\\n/* roboto-regular - latin */\\n@font-face {\\n font-family: 'Roboto';\\n font-style: normal;\\n font-weight: 400;\\n src: local('Roboto'), local('Roboto-Regular'),\\n url(\" + ___CSS_LOADER_URL___4___ + \") format('woff2'),\\n \\n url(\" + ___CSS_LOADER_URL___5___ + \") format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */\\n}\\n/* roboto-500 - latin */\\n@font-face {\\n font-family: 'Roboto';\\n font-style: normal;\\n font-weight: 500;\\n src: local('Roboto Medium'), local('Roboto-Medium'),\\n url(\" + ___CSS_LOADER_URL___6___ + \") format('woff2'),\\n \\n url(\" + ___CSS_LOADER_URL___7___ + \") format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */\\n}\\n\\n/* comfortaa-regular - latin */\\n@font-face {\\n font-family: 'Comfortaa';\\n font-style: normal;\\n font-weight: 400;\\n src: local('Comfortaa Regular'), local('Comfortaa-Regular'),\\n url(\" + ___CSS_LOADER_URL___8___ + \") format('woff2'),\\n \\n url(\" + ___CSS_LOADER_URL___9___ + \") format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */\\n}\\n\\n/* AGGrid overrides */\\n.ag-virtual-list-container {\\n overflow: visible;\\n}\\n\\n.ag-set-filter-list {\\n overflow: auto;\\n}\\n\\n.ag-set-filter-item {\\n overflow: visible;\\n}\\n\\n.ag-theme-material .ag-header-cell,\\n.ag-theme-material .ag-header-group-cell {\\n line-height: 35px;\\n}\\n\\n.ag-theme-material .ag-header-cell-menu-button .ag-icon-menu {\\n height: 35px;\\n}\\n\\n.ag-theme-material .ag-header-cell-resize::after {\\n margin-top: 5px;\\n}\\n\\n.ag-selection-checkbox {\\n position: relative;\\n top: -14px;\\n}\\n.ag-icon-contracted, .ag-icon-expanded {\\n position: relative;\\n top: -6px;\\n}\\n.ag-group-value {\\n position: relative;\\n top: 3px;\\n}\\n\\n/*Fix right click menu for ag grid tables that are in reactstrap modals */\\n.ag-popup > div {\\n z-index: 9999;\\n}\\n\\n/* react-gh-like-diff overrides */\\n.d2h-file-header {\\n display: none\\n}\\n\\n/* React-grid overrides */\\n\\n.react-grid-layout {\\n position: relative;\\n transition: height 200ms ease;\\n}\\n.react-grid-item {\\n transition: all 200ms ease;\\n transition-property: left, top;\\n}\\n.react-grid-item.cssTransforms {\\n transition-property: transform;\\n}\\n.react-grid-item.resizing {\\n z-index: 1;\\n will-change: width, height;\\n}\\n\\n.react-grid-item.react-draggable-dragging {\\n transition: none;\\n z-index: 3;\\n will-change: transform;\\n}\\n\\n.react-grid-item.react-grid-placeholder {\\n background: red;\\n opacity: 0.2;\\n transition-duration: 100ms;\\n z-index: 2;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n -o-user-select: none;\\n user-select: none;\\n}\\n\\n.react-grid-item > .react-resizable-handle {\\n position: absolute;\\n width: 20px;\\n height: 20px;\\n bottom: 0;\\n right: 0;\\n cursor: se-resize;\\n}\\n\\n.react-grid-item > .react-resizable-handle::after {\\n content: '';\\n position: absolute;\\n right: 3px;\\n bottom: 3px;\\n width: 5px;\\n height: 5px;\\n border-right: 2px solid rgba(0, 0, 0, 0.4);\\n border-bottom: 2px solid rgba(0, 0, 0, 0.4);\\n}\\n\\n/* Bootstrap overrides */\\n.dropdown .btn:focus {\\n outline: none;\\n box-shadow: none;\\n}\\n.dropdown .btn:active {\\n color: #888888 !important;\\n background-color: transparent !important;\\n box-shadow: none !important;\\n}\\n\\n.dropdown-menu.show {\\n opacity: 1;\\n visibility: visible;\\n z-index: 900;\\n}\\n\\n.dropdown-toggle {\\n position: relative;\\n text-align: left;\\n padding-right: 1.5em !important;\\n}\\n\\n.dropdown-toggle::after {\\n right: 0.5em;\\n top: 49%;\\n position: absolute;\\n}\\n\\n.dropdown-toggle.btn-secondary:not(:disabled):not(.disabled).active:focus,\\n.dropdown-toggle.btn-secondary:not(:disabled):not(.disabled):active:focus,\\n.show > .btn-secondary.dropdown-toggle:focus {\\n box-shadow: none;\\n}\\n\\n.toggle-button:not(.toggle-button-active):focus {\\n box-shadow: none;\\n}\\n\\n.input-group > .input-group-append > .borderless-dropdown-toggle {\\n background-color: #ffffff;\\n}\\n\\n.popover {\\n max-width: none;\\n font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif;\\n font-weight: 300;\\n font-size: 1rem;\\n}\\n\\n.input-group-text {\\n border-color: #e3e3e3;\\n}\\n\\n.input-group-prepend + input:focus {\\n border-color: #e3e3e3;\\n}\\n\\n.input-group-prepend {\\n margin-right: 0;\\n}\\n\\n.alert .close:not(:disabled):not(.disabled) {\\n color: #000;\\n font-weight: bold;\\n font-size: 15px;\\n}\\n\\n.modal.show {\\n z-index: 9050;\\n}\\n\\n.modal-backdrop.fade.show {\\n z-index: 9040;\\n}\\n\\nol.breadcrumb {\\n background-color: transparent;\\n padding: 0;\\n margin: 0;\\n}\\n\\n/* react-popper-tooltip helper */\\n.tooltip-container-noborder {\\n background-color: white;\\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.18);\\n display: flex;\\n flex-direction: column;\\n margin: 0.4rem;\\n transition: opacity 0.3s;\\n z-index: 2147483647;\\n}\\n\\n.tooltip-trigger {\\n cursor: pointer;\\n display: inline-block;\\n}\\n\\n/* React Tooltip overrides */\\n\\n.top-level-tooltip {\\n z-index: 9999;\\n}\\n\\n.opaque-tooltip.show {\\n opacity: 1;\\n}\\n\\n.__react_component_tooltip.type-light {\\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\\n}\\n\\n/* react-autosuggest overrides */\\n.react-autosuggest__suggestion {\\n color: black;\\n padding: 0.5rem;\\n width: 100%;\\n}\\n\\n.react-autosuggest__suggestions-list {\\n display: flex;\\n flex-direction: column;\\n max-height: 12rem;\\n background-color: #ffffff;\\n border: 1px solid rgba(0, 0, 0, 0.15);\\n box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.125);\\n width: 100%;\\n min-width: 300px;\\n overflow: auto;\\n position: absolute;\\n z-index: 40;\\n}\\n\\n.react-autosuggest__suggestions-container {\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n position: relative;\\n}\\n\\n.react-autosuggest__input {\\n background-color: #ffffff;\\n border: 1px solid #e3e3e3;\\n border-radius: 4px;\\n color: #565656;\\n padding: 8px 12px;\\n height: 40px;\\n box-shadow: none;\\n}\\n\\n.react-autosuggest__container {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n/* React-mde overrides */\\n.mde-preview .mde-preview-content {\\n padding: 10px; \\n}\\n\\n/* Auth0 overrides */\\n\\n.auth0-lock.auth0-lock.auth0-lock-opened .auth0-lock-overlay {\\n opacity: 0 !important;\\n}\\n\\n.auth0-lock.auth0-lock.auth0-lock-opened .auth0-lock-widget {\\n box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);\\n}\\n\\n.auth0-lock.auth0-lock .auth0-lock-header-bg {\\n background: #ffffff !important;\\n border-bottom: 1px solid #000000 !important;\\n background-color: #ffffff !important;\\n}\\n\\n.auth0-lock.auth0-lock.auth0-lock-opened\\n .auth0-lock-header-bg\\n .auth0-lock-header-bg-blur {\\n display: none !important;\\n border: none !important;\\n background: 'transparent' !important;\\n}\\n\\n.auth0-lock-header-bg-solid {\\n background-color: #ffffff !important;\\n}\\n\\n.iHelpTooltip {\\n background-color: #ffffff !important;\\n border: 1px solid #ababab !important;\\n color: black !important;\\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23) !important;\\n max-width: 500px !important;\\n text-align: center !important;\\n}\\n\\n.auth0-lock.auth0-lock .auth0-lock-input-wrap {\\n border-radius: 3px;\\n border: 1px solid #c0c0c0 !important;\\n position: relative;\\n background: #ffffff !important;\\n -webkit-transition: border-color 0.8s;\\n transition: border-color 0.8s;\\n}\\n\\n.auth0-lock.auth0-lock .auth0-lock-input-wrap .auth0-lock-input {\\n border: 0;\\n padding: 0 14px;\\n right: 0;\\n height: 40px;\\n font-size: 13px;\\n width: 100%;\\n border-radius: 0 2px 2px 0;\\n box-sizing: border-box;\\n position: relative;\\n color: rgba(0, 0, 0, 0.97) !important;\\n font-weight: 400;\\n}\\n\\n.tooltip {\\n pointer-events: none;\\n position: absolute;\\n z-index: 9;\\n font-size: 12px;\\n padding: 8px;\\n background: #000;\\n color: #fff;\\n min-width: 160px;\\n max-height: 240px;\\n overflow-y: hidden;\\n}\\n.tooltip.interactive {\\n pointer-events: all;\\n background: #fcfcfc;\\n color: #444;\\n overflow-y: auto;\\n}\\n\\n.graphiql-container .topBar {\\n background: inherit !important;\\n height: 46px !important;\\n}\\n\\n.graphiql-container .docExplorerShow,\\n.graphiql-container .historyShow {\\n background: inherit !important;\\n}\\n\\n.graphiql-container .doc-explorer-title,\\n.graphiql-container .history-title {\\n height: inherit !important;\\n}\\n\\n.graphiql-container .search-box:before {\\n top: 6px !important;\\n}\\n\\n/* Animations - */\\n@keyframes slide-in-left {\\n 0% {\\n transform: translateX(-1000px);\\n opacity: 0;\\n }\\n 100% {\\n transform: translateX(0);\\n opacity: 1;\\n }\\n}\\n.slide-in-left {\\n animation: slide-in-left 0.5s cubic-bezier(0.19, 1, 0.22, 1) both;\\n}\\n\\n@keyframes slide-in-right {\\n 0% {\\n transform: translateX(1000px);\\n opacity: 0;\\n }\\n 100% {\\n transform: translateX(0);\\n opacity: 1;\\n }\\n}\\n.slide-in-right {\\n animation: slide-in-right 0.5s cubic-bezier(0.19, 1, 0.22, 1) both;\\n}\\n\\n@keyframes slide-in-top {\\n 0% {\\n transform: translateY(-1000px);\\n opacity: 0;\\n }\\n 100% {\\n transform: translateY(0);\\n opacity: 1;\\n }\\n}\\n.slide-in-top {\\n animation: slide-in-top 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1.5s both;\\n}\\n\\n@keyframes puff-in-center {\\n 0% {\\n transform: scale(2);\\n filter: blur(2px);\\n opacity: 0;\\n }\\n 100% {\\n transform: scale(1);\\n filter: blur(0);\\n opacity: 1;\\n }\\n}\\n.puff-in-center {\\n animation: puff-in-center 0.7s cubic-bezier(0.55, 0.055, 0.675, 0.19) 1.5s\\n both;\\n}\\n\\n@keyframes scale-in-center {\\n 0% {\\n transform: scale(0);\\n opacity: 1;\\n }\\n 100% {\\n transform: scale(1);\\n opacity: 1;\\n }\\n}\\n.scale-in-center {\\n animation: scale-in-center 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\\n}\\n\\n@keyframes slide-fwd-center {\\n 0% {\\n transform: translateZ(0);\\n }\\n 100% {\\n transform: translateZ(160px);\\n }\\n}\\n.slide-fwd-center {\\n animation: slide-fwd-center 0.45s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1.5s\\n both;\\n}\\n\\n@keyframes slide-in-top {\\n 0% {\\n transform: translateY(-1000px);\\n opacity: 0;\\n }\\n 100% {\\n transform: translateY(0);\\n opacity: 1;\\n }\\n}\\n.slide-in-top {\\n animation: slide-in-top 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1s both;\\n}\\n\\n@keyframes slide-in-top-delayed {\\n 0% {\\n transform: translateY(-1000px);\\n opacity: 0;\\n }\\n 100% {\\n transform: translateY(0);\\n opacity: 1;\\n }\\n}\\n.slide-in-top-delayed {\\n animation: slide-in-top 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1s both;\\n}\\n\\n@keyframes rotate-in-2-fwd {\\n 0% {\\n transform: translateZ(-200px) rotate(-45deg);\\n opacity: 0;\\n }\\n 100% {\\n transform: translateZ(0) rotate(0);\\n opacity: 1;\\n }\\n}\\n.rotate-in-2-fwd-delayed {\\n animation: rotate-in-2-fwd 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1s both;\\n}\\n\\n@keyframes flip-in-ver-right {\\n 0% {\\n transform: rotateY(-80deg);\\n opacity: 0;\\n }\\n 100% {\\n transform: rotateY(0);\\n opacity: 1;\\n }\\n}\\n.flip-in-ver-right {\\n animation: flip-in-ver-right 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\\n}\\n\\n.flip-in-ver-right-delayed {\\n animation: flip-in-ver-right 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) 1s both;\\n}\\n\\n@keyframes flip-in-hor-bottom {\\n 0% {\\n transform: rotateX(80deg);\\n opacity: 0;\\n }\\n 100% {\\n transform: rotateX(0);\\n opacity: 1;\\n }\\n}\\n.flip-in-hor-bottom {\\n animation: flip-in-hor-bottom 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\\n}\\n\\n@keyframes shadow-drop-2-center {\\n 0% {\\n transform: translateZ(0);\\n box-shadow: 0 0 0 0 transparent;\\n }\\n 100% {\\n transform: translateZ(50px);\\n box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.35);\\n }\\n}\\n.shadow-drop-2-center {\\n animation: shadow-drop-2-center 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\\n}\\n\\n@keyframes fade-in-top {\\n 0% {\\n transform: translateY(-50px);\\n opacity: 0;\\n }\\n 100% {\\n transform: translateY(0);\\n opacity: 1;\\n }\\n}\\n.fade-in-top {\\n animation: fade-in-top 1s cubic-bezier(0.39, 0.575, 0.565, 1) both;\\n}\\n\\n.react-trello-lane {\\n animation: fade-in-top 1s cubic-bezier(0.39, 0.575, 0.565, 1) both;\\n}\\n\\n@-webkit-keyframes fade-in {\\n 0% {\\n opacity: 0;\\n }\\n 100% {\\n opacity: 1;\\n }\\n}\\n@keyframes fade-in {\\n 0% {\\n opacity: 0;\\n }\\n 100% {\\n opacity: 1;\\n }\\n}\\n.fade-in {\\n -webkit-animation: fade-in 1.2s cubic-bezier(0.39, 0.575, 0.565, 1) both;\\n animation: fade-in 1.2s cubic-bezier(0.39, 0.575, 0.565, 1) both;\\n}\\n.fade-in-fast {\\n animation: fade-in 0.2s cubic-bezier(0.39, 0.575, 0.565, 1) both;\\n}\\n\\n@-webkit-keyframes pulse {\\n 0% {\\n -webkit-box-shadow: 0 0 0 0 rgba(27, 117, 188, 0.4);\\n }\\n 70% {\\n -webkit-box-shadow: 0 0 0 10px rgba(27, 117, 188, 0);\\n }\\n 100% {\\n -webkit-box-shadow: 0 0 0 0 rgba(27, 117, 188, 0);\\n }\\n}\\n@keyframes pulse {\\n 0% {\\n -moz-box-shadow: 0 0 0 0 rgba(27, 117, 188, 0.4);\\n box-shadow: 0 0 0 0 rgba(27, 117, 188, 0.4);\\n }\\n 70% {\\n -moz-box-shadow: 0 0 0 10px rgba(27, 117, 188, 0);\\n box-shadow: 0 0 0 10px rgba(27, 117, 188, 0);\\n }\\n 100% {\\n -moz-box-shadow: 0 0 0 0 rgba(27, 117, 188, 0);\\n box-shadow: 0 0 0 0 rgba(27, 117, 188, 0);\\n }\\n}\\n\\n.scale-in-ver-top {\\n animation: scale-in-ver-top 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\\n}\\n@keyframes scale-in-ver-top {\\n 0% {\\n transform: scaleY(0);\\n transform-origin: 100% 0%;\\n opacity: 1;\\n }\\n 100% {\\n transform: scaleY(1);\\n transform-origin: 100% 0%;\\n opacity: 1;\\n }\\n}\\n\\n.search-arrow {\\n fill: red !important;\\n}\\n\\n.spinner {\\n width: 40px;\\n height: 40px;\\n\\n position: relative;\\n margin: auto auto;\\n}\\n\\n.double-bounce1,\\n.double-bounce2 {\\n width: 100%;\\n height: 100%;\\n border-radius: 50%;\\n background-color: #e4c647;\\n opacity: 0.6;\\n position: absolute;\\n top: 0;\\n left: 0;\\n\\n -webkit-animation: sk-bounce 2s infinite ease-in-out;\\n animation: sk-bounce 2s infinite ease-in-out;\\n}\\n\\n.double-bounce2 {\\n -webkit-animation-delay: -1s;\\n animation-delay: -1s;\\n}\\n\\n@-webkit-keyframes sk-bounce {\\n 0%,\\n 100% {\\n -webkit-transform: scale(0);\\n }\\n 50% {\\n -webkit-transform: scale(1);\\n }\\n}\\n\\n@keyframes sk-bounce {\\n 0%,\\n 100% {\\n transform: scale(0);\\n -webkit-transform: scale(0);\\n }\\n 50% {\\n transform: scale(1);\\n -webkit-transform: scale(1);\\n }\\n}\\n\\n.sk-folding-cube {\\n margin: 20px auto;\\n width: 40px;\\n height: 40px;\\n position: relative;\\n -webkit-transform: rotateZ(45deg);\\n transform: rotateZ(45deg);\\n}\\n\\n.sk-folding-cube .sk-cube {\\n float: left;\\n width: 50%;\\n height: 50%;\\n position: relative;\\n -webkit-transform: scale(1.1);\\n -ms-transform: scale(1.1);\\n transform: scale(1.1);\\n}\\n.sk-folding-cube .sk-cube:before {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background-color: #74b4df;\\n -webkit-animation: sk-foldCubeAngle 2.4s infinite linear both;\\n animation: sk-foldCubeAngle 2.4s infinite linear both;\\n -webkit-transform-origin: 100% 100%;\\n -ms-transform-origin: 100% 100%;\\n transform-origin: 100% 100%;\\n}\\n.sk-folding-cube .sk-cube2 {\\n -webkit-transform: scale(1.1) rotateZ(90deg);\\n transform: scale(1.1) rotateZ(90deg);\\n}\\n.sk-folding-cube .sk-cube3 {\\n -webkit-transform: scale(1.1) rotateZ(180deg);\\n transform: scale(1.1) rotateZ(180deg);\\n}\\n.sk-folding-cube .sk-cube4 {\\n -webkit-transform: scale(1.1) rotateZ(270deg);\\n transform: scale(1.1) rotateZ(270deg);\\n}\\n.sk-folding-cube .sk-cube2:before {\\n -webkit-animation-delay: 0.3s;\\n animation-delay: 0.3s;\\n}\\n.sk-folding-cube .sk-cube3:before {\\n -webkit-animation-delay: 0.6s;\\n animation-delay: 0.6s;\\n}\\n.sk-folding-cube .sk-cube4:before {\\n -webkit-animation-delay: 0.9s;\\n animation-delay: 0.9s;\\n}\\n@-webkit-keyframes sk-foldCubeAngle {\\n 0%,\\n 10% {\\n -webkit-transform: perspective(140px) rotateX(-180deg);\\n transform: perspective(140px) rotateX(-180deg);\\n opacity: 0;\\n }\\n 25%,\\n 75% {\\n -webkit-transform: perspective(140px) rotateX(0deg);\\n transform: perspective(140px) rotateX(0deg);\\n opacity: 1;\\n }\\n 90%,\\n 100% {\\n -webkit-transform: perspective(140px) rotateY(180deg);\\n transform: perspective(140px) rotateY(180deg);\\n opacity: 0;\\n }\\n}\\n\\n@keyframes sk-foldCubeAngle {\\n 0%,\\n 10% {\\n -webkit-transform: perspective(140px) rotateX(-180deg);\\n transform: perspective(140px) rotateX(-180deg);\\n opacity: 0;\\n }\\n 25%,\\n 75% {\\n -webkit-transform: perspective(140px) rotateX(0deg);\\n transform: perspective(140px) rotateX(0deg);\\n opacity: 1;\\n }\\n 90%,\\n 100% {\\n -webkit-transform: perspective(140px) rotateY(180deg);\\n transform: perspective(140px) rotateY(180deg);\\n opacity: 0;\\n }\\n}\\n\\n.spinner2 {\\n margin: 100px auto;\\n width: 50px;\\n height: 40px;\\n text-align: center;\\n font-size: 10px;\\n}\\n\\n.spinner2 > div {\\n background-color: #1b75bc;\\n height: 100%;\\n width: 6px;\\n display: inline-block;\\n margin: 0.2em;\\n\\n -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out;\\n animation: sk-stretchdelay 1.2s infinite ease-in-out;\\n}\\n\\n.spinner2 .rect2 {\\n -webkit-animation-delay: -1.1s;\\n animation-delay: -1.1s;\\n}\\n\\n.spinner2 .rect3 {\\n -webkit-animation-delay: -1s;\\n animation-delay: -1s;\\n}\\n\\n.spinner2 .rect4 {\\n -webkit-animation-delay: -0.9s;\\n animation-delay: -0.9s;\\n}\\n\\n.spinner2 .rect5 {\\n -webkit-animation-delay: -0.8s;\\n animation-delay: -0.8s;\\n}\\n\\n@-webkit-keyframes sk-stretchdelay {\\n 0%,\\n 40%,\\n 100% {\\n -webkit-transform: scaleY(0.4);\\n }\\n 20% {\\n -webkit-transform: scaleY(1);\\n }\\n}\\n\\n@keyframes sk-stretchdelay {\\n 0%,\\n 40%,\\n 100% {\\n transform: scaleY(0.4);\\n -webkit-transform: scaleY(0.4);\\n }\\n 20% {\\n transform: scaleY(1);\\n -webkit-transform: scaleY(1);\\n }\\n}\\n\\n.sectionTest .Select-control {\\n height: 30px;\\n}\\n.sectionTest .Select-placeholder {\\n line-height: 20px;\\n}\\n.sectionTest .Select-value {\\n line-height: 26px !important;\\n}\\n\\n.sectionTest .Select-value-label {\\n line-height: 26px;\\n}\\n\\n.sectionTest .Select-input {\\n height: 26px;\\n}\\n\\n.slide-in-blurred-top {\\n -webkit-animation: slide-in-blurred-top 1s cubic-bezier(0.075, 0.82, 0.165, 1)\\n both;\\n animation: slide-in-blurred-top 1s cubic-bezier(0.075, 0.82, 0.165, 1) both;\\n}\\n\\n.alertLevel-10 {\\n background-color: #da1e28;\\n padding: 0 !important;\\n}\\n.alertLevel-9 {\\n background-color: #da1e28;\\n padding: 0 !important;\\n}\\n.alertLevel-8 {\\n background-color: #da1e28;\\n padding: 0 !important;\\n}\\n.alertLevel-7 {\\n background-color: #fc7b1e;\\n padding: 0 !important;\\n}\\n.alertLevel-6 {\\n background-color: #fc7b1e;\\n padding: 0 !important;\\n}\\n.alertLevel-5 {\\n background-color: #fc7b1e;\\n padding: 0 !important;\\n}\\n.alertLevel-4 {\\n background-color: #fdd13a;\\n padding: 0 !important;\\n}\\n.alertLevel-3 {\\n background-color: #fdd13a;\\n padding: 0 !important;\\n}\\n.alertLevel-2 {\\n background-color: #fdd13a;\\n padding: 0 !important;\\n}\\n.alertLevel-1 {\\n background-color: #fdd13a;\\n padding: 0 !important;\\n}\\n.alertLevel-0 {\\n background-color: rgba(255, 255, 255, 1);\\n padding: 0 !important;\\n}\\n\\n.scrollable {\\n overflow: auto;\\n background: /* Shadow covers */ linear-gradient(\\n white 30%,\\n rgba(255, 255, 255, 0)\\n ),\\n linear-gradient(rgba(255, 255, 255, 0), white 70%) 0 100%,\\n /* Shadows */\\n radial-gradient(\\n 50% 0,\\n farthest-side,\\n rgba(0, 0, 0, 0.2),\\n rgba(0, 0, 0, 0)\\n ),\\n radial-gradient(\\n 50% 100%,\\n farthest-side,\\n rgba(0, 0, 0, 0.2),\\n rgba(0, 0, 0, 0)\\n )\\n 0 100%;\\n background: /* Shadow covers */ linear-gradient(\\n white 30%,\\n rgba(255, 255, 255, 0)\\n ),\\n linear-gradient(rgba(255, 255, 255, 0), white 70%) 0 100%,\\n /* Shadows */\\n radial-gradient(\\n farthest-side at 50% 0,\\n rgba(0, 0, 0, 0.2),\\n rgba(0, 0, 0, 0)\\n ),\\n radial-gradient(\\n farthest-side at 50% 100%,\\n rgba(0, 0, 0, 0.2),\\n rgba(0, 0, 0, 0)\\n )\\n 0 100%;\\n background-repeat: no-repeat;\\n background-color: white;\\n background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;\\n /* Opera doesn't support this in the shorthand */\\n background-attachment: local, local, scroll, scroll;\\n}\\n\\n\\n.relative-tooltip {\\n position: absolute !important;\\n top: 24px !important;\\n left: -5% !important;\\n width: 110%;\\n}\", \"\"]);\n","module.exports = __webpack_public_path__ + \"987b84570ea69ee660455b8d5e91f5f1.woff2\";","module.exports = __webpack_public_path__ + \"e9dbbe8a693dd275c16d32feb101f1c1.woff\";","module.exports = __webpack_public_path__ + \"55536c8e9e9a532651e3cf374f290ea3.woff2\";","module.exports = __webpack_public_path__ + \"a1471d1d6431c893582a5f6a250db3f9.woff\";","module.exports = __webpack_public_path__ + \"5d4aeb4e5f5ef754e307d7ffaef688bd.woff2\";","module.exports = __webpack_public_path__ + \"bafb105baeb22d965c70fe52ba6b49d9.woff\";","module.exports = __webpack_public_path__ + \"285467176f7fe6bb6a9c6873b3dad2cc.woff2\";","module.exports = __webpack_public_path__ + \"de8b7431b74642e830af4d4f4b513ec9.woff\";","module.exports = __webpack_public_path__ + \"dd1061d9185b485b20ff1830fdfcc427.woff2\";","module.exports = __webpack_public_path__ + \"5c9b39fca6fdd0e3ab010f693ae88d8e.woff\";","/*\n * IHelp Messages\n *\n * This contains all the text for the IHelp component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n quicksearch: {\n id: 'app.containers.IHelp.quicksearch',\n defaultMessage:\n 'Quick search looks across all of your Identities, Data, and Infrastructure simultaneously allowing you to quickly find what you are looking for',\n },\n filterPanel: {\n id: 'app.containers.IHelp.filterPanel',\n defaultMessage:\n 'Filter all the displayed Solution Center content. If an active filter has been successfully applied to a widget, it will be indicated on the widget by the filter icon.',\n },\n searchEntityTypes: {\n id: 'app.containers.IHelp.searchEntityTypes',\n defaultMessage:\n 'Choose a top level data type to begin a new search. You will then be able to add more filters and relations to explore your cloud data',\n },\n savedSearchNameField: {\n id: 'app.containers.IHelp.savedSearchNameField',\n defaultMessage:\n 'Saving the search will allow you to revisit this search in the future, or use its results in a widget on the Solution Center',\n },\n solutionCenterToolbarGeneral: {\n id: 'app.containers.IHelp.solutionCenterToolbarGeneral',\n defaultMessage:\n 'Solution Cards show you interesting metrics at a glance. Click the plus icon in the tab bar to create your own custom Solution Card. Add widgets to your new card using the button just under the tab bar',\n },\n editWidgetModal: {\n id: 'app.containers.IHelp.editWidgetModal',\n defaultMessage:\n 'Widgets require at least one search to display data. They may require several searches, or other configuration, depending on the type. Widgets can be edited after creation.',\n },\n multiFilterValue: {\n id: 'app.containers.IHelp.multiFilterValue',\n defaultMessage:\n \"To filter by multiple values (that are or'd together), please add them separated by either a comma or on separate lines, but not both. It is also possible to upload a CSV file using the button below. If you would like to search for a value containing a comma, contain it within quotes\",\n },\n explorer: {\n id: 'app.containers.IHelp.explorer',\n defaultMessage: 'Use Search to highlight existing nodes of interest.',\n },\n relationOperator: {\n id: 'app.containers.IHelp.relationOperator',\n defaultMessage:\n 'Select OR to find results that match at least one on the connected relations. Select AND to find only the results that match every connected relation',\n },\n filterPanelTagSet: {\n id: 'app.containers.IHelp.filterPanelTagSet',\n defaultMessage: 'Match on both Tag Keys and Tag Values',\n },\n ignorePermissions: {\n id: 'app.containers.IHelp.ignorePermissions',\n defaultMessage:\n 'Permissions that match these filters are excluded from results',\n },\n includePermissions: {\n id: 'app.containers.IHelp.includePermissions',\n defaultMessage:\n 'Permissions that match these filters are included in search results',\n },\n notSearchFilter: {\n id: 'app.containers.IHelp.notSearchFilter',\n defaultMessage:\n 'Check this to invert this filter by adding a NOT statement',\n },\n proximityMessage: {\n id: 'app.containers.IHelp.proximityMessage',\n defaultMessage:\n 'Distance in characters between the regex pattern and a keyword. If a keyword is fully within the proximity then there is a pattern match.',\n },\n whereMessage: {\n id: 'app.containers.IHelp.whereMessage',\n defaultMessage: 'The direction to check for keywords.',\n },\n customDataClassifierDescription: {\n id: 'app.containers.IHelp.customDataClassifierDescription',\n defaultMessage:\n 'The use case for this model is when data patterns can be described by the set of regexes and the set of keywords in proximity to the regexes. For example, if the pattern is \"Customer ID: 12345678\", then the regex is the one for 8 digits, and the key word is \"Customer ID\"; the proximity can be set to 20. In addition, one can provide the list of disallowed keywords and configure directions to check for keywords.',\n },\n})\n","/**\n *\n * IHelp\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { FormattedMessage } from 'react-intl'\n\nimport Icon from 'components/Icon'\nimport messages from './messages'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport MarkdownDisplay from 'components/MarkdownDisplay'\nimport Tooltip from 'components/Tooltip'\nimport BorderlessButton from 'components/BorderlessButton'\n\nexport class IHelp extends React.PureComponent {\n styles = {\n base: {\n transition: 'all 0.4s ease',\n color: this.props.theme.neutralMedium,\n ':hover': {\n color: this.props.theme.primary,\n },\n },\n icon: {\n display: 'inline-block',\n cursor: 'pointer',\n fontSize: this.props.iconSize || '22px',\n },\n }\n\n getIcon = () => {\n if (this.props.help) {\n return (\n \n )\n } else if (this.props.info) {\n return (\n \n )\n }\n }\n\n getContent = () => {\n if (this.props.customContent) {\n return this.props.customContent()\n }\n if (this.props.help && messages[this.props.helpKey]) {\n return \n } else if (this.props.info && typeof this.props.infoMsg === 'string') {\n return \n } else if (this.props.info) {\n return this.props.infoMsg\n } else {\n return this.props.helpKey || 'No help key or info message provided'\n }\n }\n\n render() {\n return (\n \n {this.getIcon()}\n \n }\n tooltipContent={this.getContent()}\n position={this.props.position}\n />\n )\n }\n}\n\nIHelp.propTypes = {\n customContent: PropTypes.func,\n id: PropTypes.string.isRequired,\n theme: themeShape,\n style: PropTypes.object,\n helpKey: PropTypes.string,\n infoMsg: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n help: PropTypes.bool,\n info: PropTypes.bool,\n color: PropTypes.oneOf(['primary', 'secondary']),\n position: PropTypes.oneOf([\n 'auto',\n 'auto-start',\n 'auto-end',\n 'top',\n 'top-start',\n 'top-end',\n 'right',\n 'right-start',\n 'right-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n ]),\n width: PropTypes.string,\n iconSize: PropTypes.string,\n}\n\nexport default themeable(IHelp)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Icon from 'components/Icon'\nimport { CLOUD_TYPES } from 'appConstants'\n\nconst CloudBadge = props => {\n if (props.type === CLOUD_TYPES.AWS) {\n return \n }\n\n if (props.type === CLOUD_TYPES.AZURE) {\n return \n }\n\n if (props.type === CLOUD_TYPES.SONRAI) {\n return \n }\n\n if (props.type === CLOUD_TYPES.GCP) {\n return \n }\n\n if (props.type === CLOUD_TYPES.GSUITE) {\n return \n }\n\n if (props.type === CLOUD_TYPES.HASHICORP) {\n return \n }\n\n if (props.type === CLOUD_TYPES.KUBERNETES) {\n return \n }\n\n return null\n}\n\nCloudBadge.propTypes = {\n style: PropTypes.object,\n type: PropTypes.oneOf([\n CLOUD_TYPES.AWS,\n CLOUD_TYPES.AZURE,\n CLOUD_TYPES.GCP,\n CLOUD_TYPES.SONRAI,\n CLOUD_TYPES.HASHICORP,\n CLOUD_TYPES.KUBERNETES,\n CLOUD_TYPES.GSUITE,\n '',\n ]),\n}\n\nexport default CloudBadge\n","\nvar content = require(\"!!../../../../../node_modules/css-loader/dist/cjs.js!./pe-icon-7-stroke.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../node_modules/css-loader/dist/cjs.js!./pe-icon-7-stroke.css\", function() {\n\t\tvar newContent = require(\"!!../../../../../node_modules/css-loader/dist/cjs.js!./pe-icon-7-stroke.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Imports\nvar getUrl = require(\"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\");\nvar ___CSS_LOADER_URL___0___ = getUrl(require(\"../fonts/Pe-icon-7-stroke.eot?d7yf1v\"));\nvar ___CSS_LOADER_URL___1___ = getUrl(require(\"../fonts/Pe-icon-7-stroke.eot\") + \"?#iefixd7yf1v\");\nvar ___CSS_LOADER_URL___2___ = getUrl(require(\"../fonts/Pe-icon-7-stroke.woff?d7yf1v\"));\nvar ___CSS_LOADER_URL___3___ = getUrl(require(\"../fonts/Pe-icon-7-stroke.ttf?d7yf1v\"));\nvar ___CSS_LOADER_URL___4___ = getUrl(require(\"../fonts/Pe-icon-7-stroke.svg?d7yf1v\") + \"#Pe-icon-7-stroke\");\n// Module\nexports.push([module.id, \"@font-face {\\n font-family: 'Pe-icon-7-stroke';\\n src: url(\" + ___CSS_LOADER_URL___0___ + \");\\n src: url(\" + ___CSS_LOADER_URL___1___ + \")\\n format('embedded-opentype'),\\n url(\" + ___CSS_LOADER_URL___2___ + \") format('woff'),\\n url(\" + ___CSS_LOADER_URL___3___ + \") format('truetype'),\\n url(\" + ___CSS_LOADER_URL___4___ + \") format('svg');\\n font-weight: normal;\\n font-style: normal;\\n}\\n\\n[class^='pe-7s-'],\\n[class*=' pe-7s-'] {\\n display: inline-block;\\n font-family: 'Pe-icon-7-stroke';\\n speak: none;\\n font-style: normal;\\n font-weight: normal;\\n font-variant: normal;\\n text-transform: none;\\n line-height: 1;\\n\\n /* Better Font Rendering =========== */\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.pe-7s-album:before {\\n content: '\\\\e6aa';\\n}\\n.pe-7s-arc:before {\\n content: '\\\\e6ab';\\n}\\n.pe-7s-back-2:before {\\n content: '\\\\e6ac';\\n}\\n.pe-7s-bandaid:before {\\n content: '\\\\e6ad';\\n}\\n.pe-7s-car:before {\\n content: '\\\\e6ae';\\n}\\n.pe-7s-diamond:before {\\n content: '\\\\e6af';\\n}\\n.pe-7s-door-lock:before {\\n content: '\\\\e6b0';\\n}\\n.pe-7s-eyedropper:before {\\n content: '\\\\e6b1';\\n}\\n.pe-7s-female:before {\\n content: '\\\\e6b2';\\n}\\n.pe-7s-gym:before {\\n content: '\\\\e6b3';\\n}\\n.pe-7s-hammer:before {\\n content: '\\\\e6b4';\\n}\\n.pe-7s-headphones:before {\\n content: '\\\\e6b5';\\n}\\n.pe-7s-helm:before {\\n content: '\\\\e6b6';\\n}\\n.pe-7s-hourglass:before {\\n content: '\\\\e6b7';\\n}\\n.pe-7s-leaf:before {\\n content: '\\\\e6b8';\\n}\\n.pe-7s-magic-wand:before {\\n content: '\\\\e6b9';\\n}\\n.pe-7s-male:before {\\n content: '\\\\e6ba';\\n}\\n.pe-7s-map-2:before {\\n content: '\\\\e6bb';\\n}\\n.pe-7s-next-2:before {\\n content: '\\\\e6bc';\\n}\\n.pe-7s-paint-bucket:before {\\n content: '\\\\e6bd';\\n}\\n.pe-7s-pendrive:before {\\n content: '\\\\e6be';\\n}\\n.pe-7s-photo:before {\\n content: '\\\\e6bf';\\n}\\n.pe-7s-piggy:before {\\n content: '\\\\e6c0';\\n}\\n.pe-7s-plugin:before {\\n content: '\\\\e6c1';\\n}\\n.pe-7s-refresh-2:before {\\n content: '\\\\e6c2';\\n}\\n.pe-7s-rocket:before {\\n content: '\\\\e6c3';\\n}\\n.pe-7s-settings:before {\\n content: '\\\\e6c4';\\n}\\n.pe-7s-shield:before {\\n content: '\\\\e6c5';\\n}\\n.pe-7s-smile:before {\\n content: '\\\\e6c6';\\n}\\n.pe-7s-usb:before {\\n content: '\\\\e6c7';\\n}\\n.pe-7s-vector:before {\\n content: '\\\\e6c8';\\n}\\n.pe-7s-wine:before {\\n content: '\\\\e6c9';\\n}\\n.pe-7s-cloud-upload:before {\\n content: '\\\\e68a';\\n}\\n.pe-7s-cash:before {\\n content: '\\\\e68c';\\n}\\n.pe-7s-close:before {\\n content: '\\\\e680';\\n}\\n.pe-7s-bluetooth:before {\\n content: '\\\\e68d';\\n}\\n.pe-7s-cloud-download:before {\\n content: '\\\\e68b';\\n}\\n.pe-7s-way:before {\\n content: '\\\\e68e';\\n}\\n.pe-7s-close-circle:before {\\n content: '\\\\e681';\\n}\\n.pe-7s-id:before {\\n content: '\\\\e68f';\\n}\\n.pe-7s-angle-up:before {\\n content: '\\\\e682';\\n}\\n.pe-7s-wristwatch:before {\\n content: '\\\\e690';\\n}\\n.pe-7s-angle-up-circle:before {\\n content: '\\\\e683';\\n}\\n.pe-7s-world:before {\\n content: '\\\\e691';\\n}\\n.pe-7s-angle-right:before {\\n content: '\\\\e684';\\n}\\n.pe-7s-volume:before {\\n content: '\\\\e692';\\n}\\n.pe-7s-angle-right-circle:before {\\n content: '\\\\e685';\\n}\\n.pe-7s-users:before {\\n content: '\\\\e693';\\n}\\n.pe-7s-angle-left:before {\\n content: '\\\\e686';\\n}\\n.pe-7s-user-female:before {\\n content: '\\\\e694';\\n}\\n.pe-7s-angle-left-circle:before {\\n content: '\\\\e687';\\n}\\n.pe-7s-up-arrow:before {\\n content: '\\\\e695';\\n}\\n.pe-7s-angle-down:before {\\n content: '\\\\e688';\\n}\\n.pe-7s-switch:before {\\n content: '\\\\e696';\\n}\\n.pe-7s-angle-down-circle:before {\\n content: '\\\\e689';\\n}\\n.pe-7s-scissors:before {\\n content: '\\\\e697';\\n}\\n.pe-7s-wallet:before {\\n content: '\\\\e600';\\n}\\n.pe-7s-safe:before {\\n content: '\\\\e698';\\n}\\n.pe-7s-volume2:before {\\n content: '\\\\e601';\\n}\\n.pe-7s-volume1:before {\\n content: '\\\\e602';\\n}\\n.pe-7s-voicemail:before {\\n content: '\\\\e603';\\n}\\n.pe-7s-video:before {\\n content: '\\\\e604';\\n}\\n.pe-7s-user:before {\\n content: '\\\\e605';\\n}\\n.pe-7s-upload:before {\\n content: '\\\\e606';\\n}\\n.pe-7s-unlock:before {\\n content: '\\\\e607';\\n}\\n.pe-7s-umbrella:before {\\n content: '\\\\e608';\\n}\\n.pe-7s-trash:before {\\n content: '\\\\e609';\\n}\\n.pe-7s-tools:before {\\n content: '\\\\e60a';\\n}\\n.pe-7s-timer:before {\\n content: '\\\\e60b';\\n}\\n.pe-7s-ticket:before {\\n content: '\\\\e60c';\\n}\\n.pe-7s-target:before {\\n content: '\\\\e60d';\\n}\\n.pe-7s-sun:before {\\n content: '\\\\e60e';\\n}\\n.pe-7s-study:before {\\n content: '\\\\e60f';\\n}\\n.pe-7s-stopwatch:before {\\n content: '\\\\e610';\\n}\\n.pe-7s-star:before {\\n content: '\\\\e611';\\n}\\n.pe-7s-speaker:before {\\n content: '\\\\e612';\\n}\\n.pe-7s-signal:before {\\n content: '\\\\e613';\\n}\\n.pe-7s-shuffle:before {\\n content: '\\\\e614';\\n}\\n.pe-7s-shopbag:before {\\n content: '\\\\e615';\\n}\\n.pe-7s-share:before {\\n content: '\\\\e616';\\n}\\n.pe-7s-server:before {\\n content: '\\\\e617';\\n}\\n.pe-7s-search:before {\\n content: '\\\\e618';\\n}\\n.pe-7s-film:before {\\n content: '\\\\e6a5';\\n}\\n.pe-7s-science:before {\\n content: '\\\\e619';\\n}\\n.pe-7s-disk:before {\\n content: '\\\\e6a6';\\n}\\n.pe-7s-ribbon:before {\\n content: '\\\\e61a';\\n}\\n.pe-7s-repeat:before {\\n content: '\\\\e61b';\\n}\\n.pe-7s-refresh:before {\\n content: '\\\\e61c';\\n}\\n.pe-7s-add-user:before {\\n content: '\\\\e6a9';\\n}\\n.pe-7s-refresh-cloud:before {\\n content: '\\\\e61d';\\n}\\n.pe-7s-paperclip:before {\\n content: '\\\\e69c';\\n}\\n.pe-7s-radio:before {\\n content: '\\\\e61e';\\n}\\n.pe-7s-note2:before {\\n content: '\\\\e69d';\\n}\\n.pe-7s-print:before {\\n content: '\\\\e61f';\\n}\\n.pe-7s-network:before {\\n content: '\\\\e69e';\\n}\\n.pe-7s-prev:before {\\n content: '\\\\e620';\\n}\\n.pe-7s-mute:before {\\n content: '\\\\e69f';\\n}\\n.pe-7s-power:before {\\n content: '\\\\e621';\\n}\\n.pe-7s-medal:before {\\n content: '\\\\e6a0';\\n}\\n.pe-7s-portfolio:before {\\n content: '\\\\e622';\\n}\\n.pe-7s-like2:before {\\n content: '\\\\e6a1';\\n}\\n.pe-7s-plus:before {\\n content: '\\\\e623';\\n}\\n.pe-7s-left-arrow:before {\\n content: '\\\\e6a2';\\n}\\n.pe-7s-play:before {\\n content: '\\\\e624';\\n}\\n.pe-7s-key:before {\\n content: '\\\\e6a3';\\n}\\n.pe-7s-plane:before {\\n content: '\\\\e625';\\n}\\n.pe-7s-joy:before {\\n content: '\\\\e6a4';\\n}\\n.pe-7s-photo-gallery:before {\\n content: '\\\\e626';\\n}\\n.pe-7s-pin:before {\\n content: '\\\\e69b';\\n}\\n.pe-7s-phone:before {\\n content: '\\\\e627';\\n}\\n.pe-7s-plug:before {\\n content: '\\\\e69a';\\n}\\n.pe-7s-pen:before {\\n content: '\\\\e628';\\n}\\n.pe-7s-right-arrow:before {\\n content: '\\\\e699';\\n}\\n.pe-7s-paper-plane:before {\\n content: '\\\\e629';\\n}\\n.pe-7s-delete-user:before {\\n content: '\\\\e6a7';\\n}\\n.pe-7s-paint:before {\\n content: '\\\\e62a';\\n}\\n.pe-7s-bottom-arrow:before {\\n content: '\\\\e6a8';\\n}\\n.pe-7s-notebook:before {\\n content: '\\\\e62b';\\n}\\n.pe-7s-note:before {\\n content: '\\\\e62c';\\n}\\n.pe-7s-next:before {\\n content: '\\\\e62d';\\n}\\n.pe-7s-news-paper:before {\\n content: '\\\\e62e';\\n}\\n.pe-7s-musiclist:before {\\n content: '\\\\e62f';\\n}\\n.pe-7s-music:before {\\n content: '\\\\e630';\\n}\\n.pe-7s-mouse:before {\\n content: '\\\\e631';\\n}\\n.pe-7s-more:before {\\n content: '\\\\e632';\\n}\\n.pe-7s-moon:before {\\n content: '\\\\e633';\\n}\\n.pe-7s-monitor:before {\\n content: '\\\\e634';\\n}\\n.pe-7s-micro:before {\\n content: '\\\\e635';\\n}\\n.pe-7s-menu:before {\\n content: '\\\\e636';\\n}\\n.pe-7s-map:before {\\n content: '\\\\e637';\\n}\\n.pe-7s-map-marker:before {\\n content: '\\\\e638';\\n}\\n.pe-7s-mail:before {\\n content: '\\\\e639';\\n}\\n.pe-7s-mail-open:before {\\n content: '\\\\e63a';\\n}\\n.pe-7s-mail-open-file:before {\\n content: '\\\\e63b';\\n}\\n.pe-7s-magnet:before {\\n content: '\\\\e63c';\\n}\\n.pe-7s-loop:before {\\n content: '\\\\e63d';\\n}\\n.pe-7s-look:before {\\n content: '\\\\e63e';\\n}\\n.pe-7s-lock:before {\\n content: '\\\\e63f';\\n}\\n.pe-7s-lintern:before {\\n content: '\\\\e640';\\n}\\n.pe-7s-link:before {\\n content: '\\\\e641';\\n}\\n.pe-7s-like:before {\\n content: '\\\\e642';\\n}\\n.pe-7s-light:before {\\n content: '\\\\e643';\\n}\\n.pe-7s-less:before {\\n content: '\\\\e644';\\n}\\n.pe-7s-keypad:before {\\n content: '\\\\e645';\\n}\\n.pe-7s-junk:before {\\n content: '\\\\e646';\\n}\\n.pe-7s-info:before {\\n content: '\\\\e647';\\n}\\n.pe-7s-home:before {\\n content: '\\\\e648';\\n}\\n.pe-7s-help2:before {\\n content: '\\\\e649';\\n}\\n.pe-7s-help1:before {\\n content: '\\\\e64a';\\n}\\n.pe-7s-graph3:before {\\n content: '\\\\e64b';\\n}\\n.pe-7s-graph2:before {\\n content: '\\\\e64c';\\n}\\n.pe-7s-graph1:before {\\n content: '\\\\e64d';\\n}\\n.pe-7s-graph:before {\\n content: '\\\\e64e';\\n}\\n.pe-7s-global:before {\\n content: '\\\\e64f';\\n}\\n.pe-7s-gleam:before {\\n content: '\\\\e650';\\n}\\n.pe-7s-glasses:before {\\n content: '\\\\e651';\\n}\\n.pe-7s-gift:before {\\n content: '\\\\e652';\\n}\\n.pe-7s-folder:before {\\n content: '\\\\e653';\\n}\\n.pe-7s-flag:before {\\n content: '\\\\e654';\\n}\\n.pe-7s-filter:before {\\n content: '\\\\e655';\\n}\\n.pe-7s-file:before {\\n content: '\\\\e656';\\n}\\n.pe-7s-expand1:before {\\n content: '\\\\e657';\\n}\\n.pe-7s-exapnd2:before {\\n content: '\\\\e658';\\n}\\n.pe-7s-edit:before {\\n content: '\\\\e659';\\n}\\n.pe-7s-drop:before {\\n content: '\\\\e65a';\\n}\\n.pe-7s-drawer:before {\\n content: '\\\\e65b';\\n}\\n.pe-7s-download:before {\\n content: '\\\\e65c';\\n}\\n.pe-7s-display2:before {\\n content: '\\\\e65d';\\n}\\n.pe-7s-display1:before {\\n content: '\\\\e65e';\\n}\\n.pe-7s-diskette:before {\\n content: '\\\\e65f';\\n}\\n.pe-7s-date:before {\\n content: '\\\\e660';\\n}\\n.pe-7s-cup:before {\\n content: '\\\\e661';\\n}\\n.pe-7s-culture:before {\\n content: '\\\\e662';\\n}\\n.pe-7s-crop:before {\\n content: '\\\\e663';\\n}\\n.pe-7s-credit:before {\\n content: '\\\\e664';\\n}\\n.pe-7s-copy-file:before {\\n content: '\\\\e665';\\n}\\n.pe-7s-config:before {\\n content: '\\\\e666';\\n}\\n.pe-7s-compass:before {\\n content: '\\\\e667';\\n}\\n.pe-7s-comment:before {\\n content: '\\\\e668';\\n}\\n.pe-7s-coffee:before {\\n content: '\\\\e669';\\n}\\n.pe-7s-cloud:before {\\n content: '\\\\e66a';\\n}\\n.pe-7s-clock:before {\\n content: '\\\\e66b';\\n}\\n.pe-7s-check:before {\\n content: '\\\\e66c';\\n}\\n.pe-7s-chat:before {\\n content: '\\\\e66d';\\n}\\n.pe-7s-cart:before {\\n content: '\\\\e66e';\\n}\\n.pe-7s-camera:before {\\n content: '\\\\e66f';\\n}\\n.pe-7s-call:before {\\n content: '\\\\e670';\\n}\\n.pe-7s-calculator:before {\\n content: '\\\\e671';\\n}\\n.pe-7s-browser:before {\\n content: '\\\\e672';\\n}\\n.pe-7s-box2:before {\\n content: '\\\\e673';\\n}\\n.pe-7s-box1:before {\\n content: '\\\\e674';\\n}\\n.pe-7s-bookmarks:before {\\n content: '\\\\e675';\\n}\\n.pe-7s-bicycle:before {\\n content: '\\\\e676';\\n}\\n.pe-7s-bell:before {\\n content: '\\\\e677';\\n}\\n.pe-7s-battery:before {\\n content: '\\\\e678';\\n}\\n.pe-7s-ball:before {\\n content: '\\\\e679';\\n}\\n.pe-7s-back:before {\\n content: '\\\\e67a';\\n}\\n.pe-7s-attention:before {\\n content: '\\\\e67b';\\n}\\n.pe-7s-anchor:before {\\n content: '\\\\e67c';\\n}\\n.pe-7s-albums:before {\\n content: '\\\\e67d';\\n}\\n.pe-7s-alarm:before {\\n content: '\\\\e67e';\\n}\\n.pe-7s-airplay:before {\\n content: '\\\\e67f';\\n}\\n\", \"\"]);\n","module.exports = __webpack_public_path__ + \"71394c0c7ad6c1e7d5c77e8ac292fba5.eot\";","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport Icon from 'components/Icon'\nimport CenterContent from 'components/CenterContent'\n\nconst styles = {\n errorIcon: {\n color: 'bf2b2b',\n filter: 'drop-shadow( 2px 2px 3px #AAA )',\n fontSize: '50px',\n marginBottom: '0.5em',\n },\n codeStyle: {\n fontFamily: 'monospace',\n },\n wrapper: {\n height: '100%',\n },\n}\n\nexport class Error extends React.PureComponent {\n render() {\n const { errorMessage, description, title } = this.props\n\n return (\n \n
    \n \n {title &&
    {title}
    }\n

    {description}

    \n

    \n {errorMessage}\n

    \n
    \n
    \n )\n }\n}\n\nError.propTypes = {\n description: PropTypes.node,\n errorMessage: PropTypes.node,\n title: PropTypes.node,\n}\n\nexport default Error\n","module.exports = __webpack_public_path__ + \"71394c0c7ad6c1e7d5c77e8ac292fba5.eot\";","module.exports = __webpack_public_path__ + \"b38ef310874bdd008ac14ef3db939032.woff\";","module.exports = __webpack_public_path__ + \"01798bc13e33afc36a52f2826638d386.ttf\";","module.exports = __webpack_public_path__ + \"9321b661eba7820d6814c213fbd0e927.svg\";","\nvar content = require(\"!!../../../../../node_modules/css-loader/dist/cjs.js!./helper.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../node_modules/css-loader/dist/cjs.js!./helper.css\", function() {\n\t\tvar newContent = require(\"!!../../../../../node_modules/css-loader/dist/cjs.js!./helper.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* HELPER CLASS \\n * -------------------------- */\\n\\n/* FA based classes */\\n\\n/*! Modified from font-awesome helper CSS classes - PIXEDEN\\n * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome\\n * License - http://fontawesome.io/license (CSS: MIT License)\\n */\\n\\n/* makes the font 33% larger relative to the icon container */\\n.pe-lg {\\n font-size: 1.3333333333333333em;\\n line-height: 0.75em;\\n vertical-align: -15%;\\n}\\n.pe-2x {\\n font-size: 2em;\\n}\\n.pe-3x {\\n font-size: 3em;\\n}\\n.pe-4x {\\n font-size: 4em;\\n}\\n.pe-5x {\\n font-size: 5em;\\n}\\n.pe-fw {\\n width: 1.2857142857142858em;\\n text-align: center;\\n}\\n.pe-ul {\\n padding-left: 0;\\n margin-left: 2.142857142857143em;\\n list-style-type: none;\\n}\\n.pe-ul > li {\\n position: relative;\\n}\\n.pe-li {\\n position: absolute;\\n left: -2.142857142857143em;\\n width: 2.142857142857143em;\\n top: 0.14285714285714285em;\\n text-align: center;\\n}\\n.pe-li.pe-lg {\\n left: -1.8571428571428572em;\\n}\\n.pe-border {\\n padding: 0.2em 0.25em 0.15em;\\n border: solid 0.08em #eeeeee;\\n border-radius: 0.1em;\\n}\\n.pull-right {\\n float: right;\\n}\\n.pull-left {\\n float: left;\\n}\\n.pe.pull-left {\\n margin-right: 0.3em;\\n}\\n.pe.pull-right {\\n margin-left: 0.3em;\\n}\\n.pe-spin {\\n -webkit-animation: spin 2s infinite linear;\\n -moz-animation: spin 2s infinite linear;\\n -o-animation: spin 2s infinite linear;\\n animation: spin 2s infinite linear;\\n}\\n@-moz-keyframes spin {\\n 0% {\\n -moz-transform: rotate(0deg);\\n }\\n 100% {\\n -moz-transform: rotate(359deg);\\n }\\n}\\n@-webkit-keyframes spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(359deg);\\n }\\n}\\n@-o-keyframes spin {\\n 0% {\\n -o-transform: rotate(0deg);\\n }\\n 100% {\\n -o-transform: rotate(359deg);\\n }\\n}\\n@-ms-keyframes spin {\\n 0% {\\n -ms-transform: rotate(0deg);\\n }\\n 100% {\\n -ms-transform: rotate(359deg);\\n }\\n}\\n@keyframes spin {\\n 0% {\\n transform: rotate(0deg);\\n }\\n 100% {\\n transform: rotate(359deg);\\n }\\n}\\n.pe-rotate-90 {\\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\\n -webkit-transform: rotate(90deg);\\n -moz-transform: rotate(90deg);\\n -ms-transform: rotate(90deg);\\n -o-transform: rotate(90deg);\\n transform: rotate(90deg);\\n}\\n.pe-rotate-180 {\\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\\n -webkit-transform: rotate(180deg);\\n -moz-transform: rotate(180deg);\\n -ms-transform: rotate(180deg);\\n -o-transform: rotate(180deg);\\n transform: rotate(180deg);\\n}\\n.pe-rotate-270 {\\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\\n -webkit-transform: rotate(270deg);\\n -moz-transform: rotate(270deg);\\n -ms-transform: rotate(270deg);\\n -o-transform: rotate(270deg);\\n transform: rotate(270deg);\\n}\\n.pe-flip-horizontal {\\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);\\n -webkit-transform: scale(-1, 1);\\n -moz-transform: scale(-1, 1);\\n -ms-transform: scale(-1, 1);\\n -o-transform: scale(-1, 1);\\n transform: scale(-1, 1);\\n}\\n.pe-flip-vertical {\\n filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\\n -webkit-transform: scale(1, -1);\\n -moz-transform: scale(1, -1);\\n -ms-transform: scale(1, -1);\\n -o-transform: scale(1, -1);\\n transform: scale(1, -1);\\n}\\n.pe-stack {\\n position: relative;\\n display: inline-block;\\n width: 2em;\\n height: 2em;\\n line-height: 2em;\\n vertical-align: middle;\\n}\\n.pe-stack-1x,\\n.pe-stack-2x {\\n position: absolute;\\n left: 0;\\n width: 100%;\\n text-align: center;\\n}\\n.pe-stack-1x {\\n line-height: inherit;\\n}\\n.pe-stack-2x {\\n font-size: 2em;\\n}\\n.pe-inverse {\\n color: #ffffff;\\n}\\n\\n/* Custom classes / mods - PIXEDEN */\\n.pe-va {\\n vertical-align: middle;\\n}\\n\\n.pe-border {\\n border: solid 0.08em #eaeaea;\\n}\\n\\n[class^='pe-7s-'],\\n[class*=' pe-7s-'] {\\n display: inline-block;\\n}\\n\", \"\"]);\n","/*\n *\n * All app constants that are global should be set and consumed from here\n * These should be used to prevent the use of static strings as states\n *\n */\n\nexport const LOADING = 'Loading...'\nexport const ERROR = 'ERROR'\nexport const EMPTY = 'EMPTY'\n\nexport const DISCOVERY_TYPES = {\n USER: 'User',\n NETWORK: 'Network',\n ACTION: 'Action',\n REGION: 'Region',\n ACCOUNT: 'Account',\n ACTION_TYPE: 'ActionType',\n ROLE: 'Role',\n POLICY_ENTRY: 'PolicyEntry',\n PERMISSION: 'Permission',\n PERMISSION_LIST: 'PermissionList',\n DATA_OBJECT: 'DataObject',\n POLICY: 'Policy',\n POLICY_VERSION: 'PolicyVersion',\n DATA_CONTAINER: 'DataContainer',\n}\n\nexport const PLATFORM_ACCOUNT_TYPES = {\n AWS: 'aws',\n AZURE: 'azure',\n GCP: 'gcp',\n}\n\nexport const CLOUD_TYPES = {\n AWS: 'aws',\n AZURE: 'azure',\n SONRAI: 'sonrai',\n GCP: 'gcp',\n HASHICORP: 'hashicorp',\n KUBERNETES: 'kubernetes',\n GSUITE: 'gsuite',\n}\n\nexport const FILTER_DATE_FORMAT = 'YYYY-MM-DD'\nexport const WIDGET_TYPES = {\n RATIO: 'ratio',\n BIG_COUNT: 'bigCount',\n TABLE: 'table',\n GAUGE: 'gauge',\n MAP: 'map',\n LIST: 'list',\n REGIONS: 'regions',\n PIE_CHART: 'pieChart',\n BAR_CHART: 'barChart',\n ADVMAP: 'advMap',\n ALERT: 'alert',\n COMPLIANCE: 'compliance',\n SPARK: 'spark',\n TEXT: 'text',\n}\n\nexport const BOUNDARY_OPTIONS = {\n GREATER: 'Greater than...',\n LESS: 'Less than...',\n EQUAL: 'Equal to...',\n}\n\nexport const NODE_TYPES = {\n IDENTITY: 'Identity',\n USERS: 'Users',\n DATA: 'Data',\n ACCOUNT: 'Accounts',\n ACTION: 'Actions',\n INFRASTRUCTURE: 'Infrastructure',\n PERMISSION: 'Permissions',\n PROTECTION: 'Protection',\n}\n\nexport const EXPLORER_VIEW_TYPES = {\n EXPLORER: 'Explorer',\n TABLE: 'Table',\n}\n\nexport const ARC_MAP_SEARCH_NAME = 'arcmap'\nexport const REGION_MAP_SEARCH_NAME = 'regionmap'\n\nexport const NODE_VIEW_TYPES = {\n PUBLIC_KEY: 'publickey',\n ACCOUNT: 'account',\n DATA: 'data',\n DATA_OBJECT: 'dataobject',\n DATA_STORE: 'datastore',\n USER: 'user',\n CONTAINER: 'datacontainer',\n POLICY: 'policy',\n COMPUTE: 'compute',\n IMAGE: 'image',\n GENERIC: 'generic',\n ACTION_TYPE: 'actiontype',\n ACTION: 'action',\n IDENTITY: 'identity',\n GROUP: 'group',\n AUDIT: 'audit',\n ROLE: 'role',\n RESOURCE_GROUP: 'resourcegroup',\n SECRET: 'secret',\n SECRET_STORE: 'secretstore',\n ENCRYPTION_KEY: 'encryptionkey',\n WORKLOAD: 'workload',\n}\n\nexport const SUPPORT_EMAIL = 'support@sonraisecurity.com'\n\nexport const START_DATE = 'startDate'\n\nexport const ALERT_LEVELS = {\n ERROR: 'Critical',\n WARN: 'Warn',\n INFO: 'Info',\n}\n\nexport const CONTROL_FRAMEWORKS = {\n ALL_CONTROL_FRAMEWORKS: 'All Control Frameworks',\n}\n\nexport const POLL_FREQUENCY = 300000 //5 MINUTES\n\nexport const SONRAI_ORG_NAME = 'supersonrai'\n\nexport const SONRAI_MAX_COUNT = 500\nexport const SONRAI_DEFAULT_LIMIT = 100\n\nexport const DEFAULT_SEARCH_LIMIT = 500\n\nexport const QUERY_FILTER_OP = {\n IN_LIST: 'IN_LIST',\n NOT_IN_LIST: 'NOT_IN_LIST',\n BETWEEN: 'BETWEEN',\n NOT_BETWEEN: 'NOT_BETWEEN',\n IS_NULL: 'IS_NULL',\n IS_NOT_NULL: 'IS_NOT_NULL',\n REGEX: 'REGEX',\n NOT_REGEX: 'NOT_REGEX',\n EQUALS: 'EQ',\n NOT_EQUALS: 'NEQ',\n}\n\nexport const GRAPHQL_TIMEOUT = 120000\n\nexport const TYPES_WITH_CRM = [\n 'user',\n 'datastore',\n 'datacontainer',\n 'role',\n 'dataobject',\n 'secretstore',\n 'secret',\n 'identityreference',\n 'compute',\n 'identity',\n 'encryptionkey',\n]\n\nexport const DATA_TYPES_FOR_CRM = [\n 'datastore',\n 'datacontainer',\n 'dataobject',\n 'secret',\n 'secretstore',\n 'encryptionkey',\n]\nexport const IDENTITY_TYPES_FOR_CRM = [\n 'user',\n 'role',\n 'identityreference',\n 'identity',\n]\n\nexport const DEFAULT_ACTION_CLASSIFICATIONS_TO_ENABLE = [\n 'DataCreate',\n 'DataDelete',\n 'DataUpdate',\n 'DataRead',\n 'ProtectionCreate',\n 'ProtectionDelete',\n 'ProtectionUpdate',\n 'ProtectionRead',\n 'Configure',\n 'Delete',\n 'Update',\n]\n\nexport const SEARCH_SAVE_STATE = {\n ALLOW: 0,\n SAVING_CONCURRENT: 1,\n SAVING: 2,\n}\n\nexport const HAS_COPY = [\n 'cidrBlock',\n 'id',\n 'privateDnsName',\n 'sid',\n 'srn',\n 'vpcID',\n 'account',\n 'email',\n 'friendlyName',\n 'name',\n 'accessKey',\n 'eventName',\n 'grantedAccessKey',\n 'grantedSessionPrincipal',\n 'performedByValue',\n 'performedOnValue',\n 'sessionPrincipal',\n 'srcID',\n 'srcIP',\n 'srcIPs',\n 'userAgent',\n 'fingerprint',\n 'userName',\n 'privateIPSet',\n 'publicIPSet',\n 'srnList',\n 'userAgentSet',\n 'ipSet',\n]\n\nexport const SEVERITY_CATEGORIES = {\n HIGH: 'HIGH',\n MEDIUM: 'MEDIUM',\n LOW: 'LOW',\n}\n\nexport const GLOBAL_SWIMLANE_NAME = 'Global'\n\nexport const NODE_TYPES_WITH_NAME_EDITING_DISABLED = ['action', 'actiontype']\n\nexport const SWIMLANE_SCOPED_PERMISSIONS = [\n 'view.data',\n 'edit.alerts',\n 'edit.resource',\n 'edit.resources',\n 'edit.crmsettings',\n 'edit.ticket',\n 'edit.dataclassificationconfig',\n 'assign.bots',\n 'edit.roleassignments',\n 'assign.integrations',\n 'edit.tickets',\n 'transition.tickets',\n 'snooze.tickets',\n 'acceptrisk.tickets',\n 'assign.escalations',\n 'execute.bots',\n]\n\nexport const ACTION_TYPES = {\n ESCALATE_TO_BOT: 'Escalate to Bot',\n ASSIGN_USER: 'Assign to User',\n ASSIGN_ROLE: 'Assign to Role',\n}\n\nexport const REMEDIATION_TYPES = {\n UPDATE_POLICY: 'UPDATE_POLICY',\n DELETE_IDENTITY: 'DELETE_IDENTITY',\n DELETE_ACCESS_KEY: 'DELETE_ACCESS_KEY',\n}\n\nexport const TICKET_STATUS = {\n NEW: 'NEW',\n IN_PROGRESS: 'IN_PROGRESS', //Note: Not actually supported CRC-2641 needs backend work\n CLOSED: 'CLOSED',\n SNOOZED: 'SNOOZED',\n RISK_ACCEPTED: 'RISK_ACCEPTED',\n}\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nexport const nodeViewMiniPopoutDomain = state => \n state.get('nodeViewMiniPopout') || Map()\n\nexport const selectData = createSelector(\n nodeViewMiniPopoutDomain,\n nodeViewMiniPopout => {\n return nodeViewMiniPopout.get('data')\n }\n)","/*\n *\n * NodeViewMiniPopout constants\n *\n */\n\nexport const GET_DATA = 'app/NodeViewMiniPopout/GET_DATA'\nexport const SET_DATA = 'app/NodeViewMiniPopout/SET_DATA'\nexport const ERR_DATA = 'app/NodeViewMiniPopout/ERR_DATA'\n","import { createAction } from 'redux-actions'\n\nimport { GET_DATA, SET_DATA, ERR_DATA } from './constants'\n\nexport const getData = createAction(GET_DATA)\nexport const setData = createAction(SET_DATA)\nexport const errData = createAction(ERR_DATA)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n dataLoadError: {\n id: 'app.container.NodeViewMiniPopout.dataLoadError',\n defaultMessage: 'An error ocurred loading the data. Click here to close.',\n },\n generalProperties: {\n id: 'app.container.NodeViewMiniPopout.generalProperties',\n defaultMessage: 'Details',\n },\n gotoFullNodeView: {\n id: 'app.container.NodeViewMiniPopout.gotoFullNodeView',\n defaultMessage: 'Go to full node view',\n },\n})\n","import { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\n\nimport { GET_DATA, SET_DATA, ERR_DATA } from './constants'\n\nconst initialState = fromJS({\n data: {\n data: null,\n error: false,\n loading: true,\n },\n})\n\nconst nodeViewMiniPopout = handleActions(\n {\n [GET_DATA]: state => {\n return state\n .setIn(['data', 'error'], false)\n .setIn(['data', 'loading'], true)\n },\n [SET_DATA]: (state, { payload }) =>\n state\n .setIn(['data', 'error'], false)\n .setIn(['data', 'loading'], false)\n .setIn(['data', 'data'], fromJS(payload.data)),\n [ERR_DATA]: state =>\n state.setIn(['data', 'error'], true).setIn(['data', 'loading'], false),\n },\n initialState\n)\n\nexport default nodeViewMiniPopout\n","import { all, put, takeLatest } from 'redux-saga/effects'\n\nimport { getClient } from 'apolloClient'\nimport { getNodeInfoQuery } from 'utils/graphDataUtils'\n\nimport { GET_DATA } from './constants'\nimport { setData, errData } from './actions'\n\nfunction* getData(action) {\n const { srn, queryNames, types } = action.payload\n const query = getNodeInfoQuery(srn, queryNames, types)\n const client = yield getClient()\n try {\n const result = yield client.query({\n query,\n variables: { srn },\n })\n\n const { data } = result\n if (!data || data == null) {\n throw 'the result had no data'\n }\n\n const { items } = Object.values(data)[0]\n if (!items || items == null) {\n throw 'the result had no items'\n }\n\n yield put(setData({ data: items[0] }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`There was an error fetching data: {}`, e)\n yield put(errData())\n }\n}\n\nfunction* nodeViewMiniPopoutSaga() {\n yield all([takeLatest(GET_DATA, getData)])\n}\n\nexport default nodeViewMiniPopoutSaga\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport { push } from 'connected-react-router'\nimport { isImmutable } from 'immutable'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\n\nimport NodeViewHeader from 'containers/NodeViewHeader'\n\nimport BorderedCard from 'components/BorderedCard'\nimport Icon from 'components/Icon'\nimport LoadingAnim from 'components/LoadingAnim'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport NodeViewDetails from 'components/NodeView/NodeViewDetails'\nimport TextLink from 'components/TextLink'\n\nimport {\n selectQueryNames,\n selectQueryTypes,\n} from 'containers/SonraiData/selectors'\nimport { selectFields } from 'containers/NodeSolutionCenter/selectors'\nimport { selectData } from './selectors'\n\nimport { getData } from './actions'\n\nimport messages from './messages'\nimport reducer from './reducers'\nimport sagas from './sagas'\n\nconst styles = {\n openContainer: {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100vw',\n height: '100vh',\n zIndex: 8,\n overflowY: 'scroll',\n paddingBottom: '16px',\n },\n closedContainer: {\n position: 'fixed',\n width: 0,\n height: 0,\n left: -999999,\n },\n overlay: {\n cursor: 'pointer',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'black',\n transition: 'opacity 0.25s',\n },\n openOverlay: {\n position: 'fixed',\n opacity: 0.6,\n },\n closedOverlay: {\n position: 'absolute',\n opacity: 0,\n },\n content: {\n paddingTop: '90px',\n paddingBottom: '90px',\n height: '100%',\n width: '1024px',\n zIndex: 8.1,\n transition: 'right 0.25s',\n margin: 'auto',\n },\n openContent: {\n right: 0,\n },\n closedContent: {\n right: -1024,\n },\n card: {\n background: '#fcfcfc',\n width: '100%',\n minHeight: '100%',\n marginBottom: '16px',\n },\n controls: {\n marginLeft: '12px',\n marginRight: '12px',\n },\n closeIconContainer: {\n border: 'none',\n display: 'inline',\n float: 'right',\n position: 'relative',\n right: '6px',\n top: '2px',\n color: 'rgb(0, 90, 160)',\n cursor: 'pointer',\n },\n nodeDetails: {\n position: 'relative',\n left: '1px',\n boxShadow: 'rgba(0, 0, 0, 0.1) 1px 4px 3px -1px',\n margin: '12px',\n padding: '10px',\n border: '1px solid #eee',\n background: 'white',\n },\n nodeDetialsTitle: {\n fontSize: '1.2em',\n color: 'rgb(51, 51, 51)',\n },\n nodeHeader: {},\n error: {\n textAlign: 'center',\n marginTop: '30px',\n padding: '12px',\n },\n}\n\nexport class MiniNodeViewPopout extends Component {\n componentDidUpdate(prevProps) {\n if (!prevProps.open && this.props.open && this.props.nodeId) {\n this.props.getData({\n srn: this.props.nodeId,\n queryNames: this.props.queryNames,\n types: this.props.types,\n })\n }\n }\n\n goToSelectedNodeView = () => {\n const type = getTypeFromSrn(this.props.nodeId)\n this.props.push(getNodeViewPushParams(this.props.nodeId, type))\n }\n\n renderLoadingBody = () => {\n return \n }\n\n renderErrorBody = () => {\n return (\n
    \n

    \n \n

    \n
    \n )\n }\n\n renderBodyWithData = () => {\n const type = getTypeFromSrn(this.props.nodeId)\n const linkParams = getNodeViewPushParams(this.props.nodeId, type)\n\n return (\n
    \n
    \n
    \n e.preventDefault()}\n >\n \n \n \n \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n )\n }\n\n renderCardBody = () => {\n if (this.props.data.get('loading')) {\n return this.renderLoadingBody()\n }\n if (this.props.data.get('error')) {\n return this.renderErrorBody()\n }\n return this.renderBodyWithData()\n }\n\n render() {\n const containerStyle = this.props.open\n ? styles.openContainer\n : styles.closedContainer\n\n const overlayStyle = this.props.open\n ? styles.openOverlay\n : styles.closedOverlay\n\n const contentStyle = this.props.open\n ? styles.openContent\n : styles.closedContent\n\n return (\n
    \n \n \n \n {this.props.open && this.renderCardBody()}\n \n
    \n
    \n )\n }\n}\n\nMiniNodeViewPopout.propTypes = {\n // passed props\n handleClose: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n open: PropTypes.bool,\n\n // props mapped from state\n data: ImmutablePropTypes.map.isRequired,\n fields: ImmutablePropTypes.list,\n queryNames: ImmutablePropTypes.iterable.isRequired,\n types: ImmutablePropTypes.map,\n\n // bound action creators\n getData: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n data: selectData,\n fields: selectFields,\n queryNames: selectQueryNames,\n types: selectQueryTypes,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators({ getData, push }, dispatch)\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'nodeViewMiniPopout', reducer })\n\nconst withSaga = injectSaga({\n key: 'nodeViewMiniPopout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withSaga,\n withReducer\n)(MiniNodeViewPopout)\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./checkbox.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./checkbox.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./checkbox.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".checkbox-check-hidden {\\n stroke-dasharray: 62;\\n stroke-dashoffset: 0;\\n}\\n\\n.checkbox-animate-in {\\n animation-name: animateCheckIn;\\n animation-duration: 0.3s;\\n stroke-dasharray: 60;\\n stroke-dashoffset: 60;\\n}\\n\\n@keyframes animateCheckIn {\\n from {\\n stroke-dashoffset: 0;\\n }\\n\\n to {\\n stroke-dashoffset: 60;\\n }\\n}\\n\\n.checkbox-box-visible {\\n stroke-dasharray: 22;\\n stroke-dashoffset: 66;\\n}\\n\\n.checkbox-animate-away {\\n animation-name: animateBoxOut;\\n animation-duration: 0.5s;\\n stroke-dashoffset: 42;\\n stroke-dasharray: 22;\\n}\\n\\n@keyframes animateBoxOut {\\n from {\\n stroke-dashoffset: 66;\\n }\\n\\n to {\\n stroke-dashoffset: 42;\\n }\\n}\\n\", \"\"]);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"div.ag-root .ag-cell-focus {\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n user-select: text;\\n}\\n\", \"\"]);\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { ThemeContext } from './ThemeContext'\nimport { getDisplayName } from 'utils/hocHelpers'\n\nexport default WrappedComponent => {\n return class extends React.PureComponent {\n displayName = `Themeable(${getDisplayName(WrappedComponent)})`\n\n render() {\n return (\n \n {({ theme, typeColors }) => (\n \n )}\n \n )\n }\n }\n}\n\nexport const themeShape = PropTypes.shape({\n primary: PropTypes.string,\n secondary: PropTypes.string,\n emphasis: PropTypes.string,\n light: PropTypes.string,\n dark: PropTypes.string,\n highlight: PropTypes.string,\n neutralLight: PropTypes.string,\n neutralMedium: PropTypes.string,\n neutralDark: PropTypes.string,\n chartColors: PropTypes.arrayOf(PropTypes.string),\n success: PropTypes.string,\n fail: PropTypes.string,\n bodyText: PropTypes.string,\n background: PropTypes.string,\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Popover, { PopoverBody, PopoverAnchor } from 'components/Popover'\n\nconst styles = {\n popover: {\n maxWidth: '300px',\n },\n}\n\nexport class Tooltip extends React.PureComponent {\n render() {\n return (\n \n {this.props.anchor}\n \n
    \n {this.props.tooltipContent}\n
    \n
    \n \n )\n }\n}\n\nTooltip.propTypes = {\n anchor: PropTypes.node,\n position: PropTypes.string,\n styles: PropTypes.object,\n tooltipContent: PropTypes.node,\n trigger: PropTypes.string,\n}\n\nexport default Tooltip\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\nimport { GLOBAL_SWIMLANE_NAME } from 'appConstants'\n\nexport const selectSonraiDataDomain = state =>\n state.get('sonraiData', Map()) || Map()\n\nexport const selectQueryTypes = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('queryTypes') || Map()\n)\n\nexport const selectSavedSearches = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('savedSearches') || Map()\n)\n\nexport const selectSavedSearchesDetailsLoaded = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('savedSearchesDetailsLoaded')\n)\n\nexport const selectPermissions = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('permissions') || List()\n)\n\nexport const selectGraphQLSchema = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('schema') || {}\n)\n\nexport const selectSonraiSearches = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('sonraiSearches') || List()\n)\n\nexport const selectQueryRelations = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('queryRelations') || List()\n)\n\nexport const selectQueryNames = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('queryNames') || List()\n)\n\nexport const selectAllowedRootQueries = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('allowedRootQueries') || List()\n)\n\nexport const selectSonraiConfigLoading = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('sonraiConfigLoading')\n)\n\nexport const selectAccounts = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('accounts') || List()\n)\n\nexport const selectAccountsBySrn = createSelector(\n selectAccounts,\n accountsList =>\n Map(accountsList.map(account => List([account.get('srn'), account])))\n)\n\nexport const selectAccountsByAccountId = createSelector(\n selectAccounts,\n accountsList =>\n Map(accountsList.map(account => List([account.get('account'), account])))\n)\n\nexport const selectSubscriptions = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('subscriptions') || List()\n)\n\nexport const selectPivot = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('pivot') || Map()\n)\n\nexport const selectTags = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('tags') || List()\n)\n\nexport const selectDataContainers = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('dataContainers') || List()\n)\n\nexport const selectHasCollectors = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('hasCollectors')\n)\n\nexport const selectCheckCollectorsLoading = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('checkCollectorsLoading')\n)\n\nexport const selectSavedSearchesLoading = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('savedSearchesLoading')\n)\n\nexport const selectMonitoredResourcesCount = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('monitoredResourcesCount')\n)\n\nexport const selectSwimlanes = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('swimlanes') || Map()\n)\n\nexport const selectSwimlanesBySrn = createSelector(selectSwimlanes, swimlanes =>\n swimlanes.reduce(\n (swimlanesMap, swimlane) => swimlanesMap.set(swimlane.get('srn'), swimlane),\n Map()\n )\n)\n\nexport const selectSwimlanesWithoutGlobal = createSelector(\n selectSwimlanes,\n swimlanes =>\n swimlanes\n ? swimlanes.filterNot(\n swimlane => swimlane.get('title') === GLOBAL_SWIMLANE_NAME\n )\n : List()\n)\n\nexport const selectSwimlanesLoading = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('swimlanesLoading')\n)\n\nexport const selectGlobalError = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('globalError')\n)\n\nexport const selectSonraiUsers = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('sonraiUsers') || Map()\n)\n\nexport const selectSonraiUsersLoading = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('sonraiUsersLoading')\n)\n\nexport const selectUpdatingSonraiUsers = createSelector(\n selectSonraiDataDomain,\n sonraiData => sonraiData.get('updatingSonraiUser') || Map()\n)\n\nexport const selectAllRoles = createSelector(selectSonraiDataDomain, state => {\n // this logic is in place in regards to SAR-1943 - removing the edit.manualremediations permission until a user can actually use it\n const data = state.getIn(['allRoles', 'data'], List())\n const roleIndex = data.findIndex(item =>\n item.get('expandedPermissions').includes('edit.manualremediations')\n )\n const permissionIndex = data\n .getIn([roleIndex, 'expandedPermissions'], List())\n .findIndex(item => item === 'edit.manualremediations')\n\n if (roleIndex !== -1 && permissionIndex !== -1) {\n return state\n .get('allRoles')\n .deleteIn(['data', roleIndex, 'expandedPermissions', permissionIndex])\n }\n //once a user can, we can update Action & Desc. accordingly and just return state.get('allRoles') here\n return state.get('allRoles')\n})\n\nexport const selectUnassigningRoles = createSelector(\n selectSonraiDataDomain,\n data => data.get('unassigningRole')\n)\n\nexport const selectUpdatingUserRoles = createSelector(\n selectSonraiDataDomain,\n data => data.get('updatingUserRoles')\n)\n\nexport const selectBots = createSelector(selectSonraiDataDomain, state =>\n state.get('bots')\n)\n\nexport const selectBotsMap = createSelector(selectBots, bots =>\n bots\n ? Map(bots.get('data', List()).map(bot => List([bot.get('srn'), bot])))\n : Map()\n)\n\nexport const selectIsCreatingBot = createSelector(\n selectSonraiDataDomain,\n state => state.get('isCreatingBot')\n)\n\nexport const selectSourceUrlValidation = createSelector(\n selectSonraiDataDomain,\n state => state.get('sourceUrlValidation')\n)\n\nexport const selectIsUpdatingBotAssignment = createSelector(\n selectSonraiDataDomain,\n state => state.get('isUpdatingBotAssignment')\n)\n\nexport const selectExemptedIdentities = createSelector(\n selectSonraiDataDomain,\n state => state.get('exemptedIdentities') || List()\n)\n\nexport const selectExemptedIdentitiesError = createSelector(\n selectSonraiDataDomain,\n state => state.get('exemptedIdentitiesError')\n)\n\nexport const selectAddRemoveCertIdsError = createSelector(\n selectSonraiDataDomain,\n state => state.get('addRemoveCertIDsError')\n)\n\nexport const selectExemptedIdentitiesLoading = createSelector(\n selectSonraiDataDomain,\n state => state.get('exemptedIdentitiesLoading')\n)\n\nexport const selectExemptedIdentitiesAdding = createSelector(\n selectSonraiDataDomain,\n state => state.get('exemptedIdentitiesAdding')\n)\n\nexport const selectExemptedIdentitiesDeleting = createSelector(\n selectSonraiDataDomain,\n state => state.get('exemptedIdentitiesDeleting') || Map()\n)\n\nexport const selectSonraiSearchesLoading = createSelector(\n selectSonraiDataDomain,\n state => state.get('sonraiSearchesLoading')\n)\n\nexport const selectObjectivesLoading = createSelector(\n selectSonraiDataDomain,\n state => state.get('objectivesLoading')\n)\n\nexport const selectObjectives = createSelector(\n selectSonraiDataDomain,\n state => state.get('objectives') || List()\n)\n\nexport const selectObjectivesError = createSelector(\n selectSonraiDataDomain,\n state => state.get('objectivesError')\n)\n\nexport const selectEnablingObjectives = createSelector(\n selectSonraiDataDomain,\n state => state.get('enablingObjectives')\n)\n\nexport const selectEnablingAllObjectives = createSelector(\n selectSonraiDataDomain,\n state => state.get('enablingAllObjectives')\n)\n\nexport const selectEnablingAllObjectivesForSwimlane = createSelector(\n selectSonraiDataDomain,\n state => state.get('enablingAllObjectivesForSwimlane')\n)\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"div.vis-tooltip {\\n background: #fff;\\n border-radius: 0;\\n}\\n\\n.vis-network {\\n outline: none;\\n}\\n\", \"\"]);\n","export const FETCH_POLICY = 'app/PolicyEdit/FETCH_POLICY'\nexport const SET_POLICY = 'app/PolicyEdit/SET_POLICY'\n\nexport const POLICY_EVAL_TYPES = {\n COUNT: 'count',\n}\n\nexport const POLICY_OP_TYPES = {\n GT: 'gt',\n LT: 'lt',\n EQ: 'eq',\n GE: 'ge',\n ALL: 'all',\n LE: 'le',\n ANY: 'any',\n}\n","export const DOMAIN = 'tickets'\n\nexport const FETCH_TICKET_LIST = `app/containers/Tickets/FETCH_TICKET_LIST`\nexport const FETCH_TICKET_LIST_SUCCESS = `app/containers/Tickets/FETCH_TICKET_LIST_SUCCESS`\nexport const FETCH_TICKET_LIST_ERROR = `app/containers/Tickets/FETCH_TICKET_LIST_ERROR`\nexport const SET_TICKET_LIST_FILTER = `app/containers/Tickets/SET_TICKET_FILTER`\n\n// fetch change detection options\nexport const FETCH_CD_OPTIONS = `app/containers/Tickets/FETCH_CD_OPTIONS`\nexport const FETCH_CD_OPTIONS_SUCCESS = `app/containers/Tickets/FETCH_CD_OPTIONS_SUCCESS`\nexport const FETCH_CD_OPTIONS_ERROR = `app/containers/Tickets/FETCH_CD_OPTIONS_ERROR`\n\nexport const CLEAR_TICKET_LIST_FILTER = `app/containers/Tickets/CLEAR_TICKET_LIST_FILTER`\n","import {\n FETCH_CUSTOM_CLASSIFIERS,\n SET_CUSTOM_CLASSIFIERS,\n SET_CUSTOM_CLASSIFIERS_ERROR,\n CREATE_CUSTOM_CLASSIFIER,\n CREATE_CUSTOM_CLASSIFIER_SUCCESS,\n CREATE_CUSTOM_CLASSIFIER_ERROR,\n UPDATE_CUSTOM_CLASSIFIERS,\n UPDATE_CUSTOM_CLASSIFIERS_SUCCESS,\n UPDATE_CUSTOM_CLASSIFIERS_ERROR,\n DELETE_CUSTOM_CLASSIFIERS,\n DELETE_CUSTOM_CLASSIFIERS_SUCCESS,\n DELETE_CUSTOM_CLASSIFIERS_ERROR,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const fetchCustomClassifiers = createAction(FETCH_CUSTOM_CLASSIFIERS)\nexport const setCustomClassifiers = createAction(SET_CUSTOM_CLASSIFIERS)\nexport const setCustomClassifiersError = createAction(\n SET_CUSTOM_CLASSIFIERS_ERROR\n)\n\nexport const createCustomClassifier = createAction(CREATE_CUSTOM_CLASSIFIER)\nexport const createCustomClassifierSuccess = createAction(\n CREATE_CUSTOM_CLASSIFIER_SUCCESS\n)\nexport const createCustomClassifierError = createAction(\n CREATE_CUSTOM_CLASSIFIER_ERROR\n)\n\nexport const updateCustomClassifiers = createAction(UPDATE_CUSTOM_CLASSIFIERS)\nexport const updateCustomClassifiersSuccess = createAction(\n UPDATE_CUSTOM_CLASSIFIERS_SUCCESS\n)\nexport const updateCustomClassifiersError = createAction(\n UPDATE_CUSTOM_CLASSIFIERS_ERROR\n)\n\nexport const deleteCustomClassifier = createAction(DELETE_CUSTOM_CLASSIFIERS)\nexport const deleteCustomClassifierSuccess = createAction(\n DELETE_CUSTOM_CLASSIFIERS_SUCCESS\n)\nexport const deleteCustomClassifierError = createAction(\n DELETE_CUSTOM_CLASSIFIERS_ERROR\n)\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".markdown-display h1{\\n font-size: 2em;\\n}\\n\\n.markdown-display h2{\\n font-size: 1.5em;\\n}\\n\\n.markdown-display blockquote{\\n border-left: 4px solid #DDD;\\n padding: 0 15px;\\n color: #777;\\n}\\n\\n.markdown-display ul {\\n list-style-type: disc;\\n margin-bottom: 1em;\\n padding-left: 2em;\\n}\\n\\n.markdown-display pre {\\n font-family: Consolas, \\\"Liberation Mono\\\", Courier, monospace;\\n background-color: #f8f8f8;\\n border: 1px solid #ccc;\\n overflow: auto;\\n padding: 0.5em 1em;\\n border-radius: 3px;\\n}\", \"\"]);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"\\n.node-view-metadata-detail .metadata-tooltip {\\n /** \\n * these render pretty close to the side of the screen, so we set the max width\\n * so they don't run off the edge. They render in the middle of the metadata\\n * key, and the container for that is about 400px, plus the nav bar is on the\\n * side, so this width shuold make it so user can always read text\\n */\\n max-width: 420px;\\n word-break: break-all;\\n}\", \"\"]);\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport CodeMirror from 'codemirror'\nimport 'codemirror/addon/runmode/runmode'\nimport 'codemirror/mode/javascript/javascript'\nimport CopyToClipBoard from 'components/CopyToClipboard'\n\nconst styles = {\n displayModeButton: {\n background: 'none',\n cursor: 'pointer',\n border: 'none',\n color: '#9a9a9a',\n },\n jsonDisplayContainer: {\n border: '1px solid #eee',\n overflow: 'auto',\n padding: '10px',\n marginTop: '-25px',\n },\n\n jsonDisplayControlsContainer: {\n padding: '0px 0px 8px 0px',\n textAlign: 'right',\n },\n jsonDisplayText: {\n fontFamily: '\"Lucida Console\", Monaco, monospace',\n fontSize: '11.5px',\n },\n jsonDisplayStyles: {\n property: {\n color: 'black',\n },\n string: {\n color: '#007ad9',\n },\n },\n}\n\nclass JSONDisplay extends Component {\n render() {\n const json = JSON.stringify(this.props.content, null, 2)\n const elements = []\n let index = 0\n const pushElement = (token, classNames) => {\n const tokenStyles = (classNames || '')\n .split(' ')\n .map(className => {\n return styles.jsonDisplayStyles[className.trim()]\n })\n .filter(style => style)\n .reduce((allStyles, style) => {\n return {\n ...allStyles,\n ...style,\n }\n }, {})\n elements.push(\n \n {token}\n \n )\n }\n\n CodeMirror.runMode(\n json,\n {\n name: 'text/javascript',\n json: 'true',\n },\n (token, style) => {\n pushElement(token, style)\n }\n )\n\n return (\n
    \n \n \n \n
    \n
    \n \n
    {elements}
    \n
    \n \n )\n }\n}\n\nJSONDisplay.propTypes = {\n content: PropTypes.object,\n}\n\nexport default JSONDisplay\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { DropdownMenu } from 'reactstrap'\nimport _ from 'lodash'\n\n/**\n * as of reactstrap 8, if we pass the style property to DropdownMenu it will\n * break the application, so we can pass it using modifiers, but its cubmersome\n * to type out the whole modifiers object, so we can use this instead\n */\nexport class StyledReactstrapDropdownMenu extends Component {\n render() {\n const props = _.omit(this.props, ['style', 'modifiers'])\n\n let modifiers = this.props.modifiers || {}\n props.modifiers = modifiers\n\n if (this.props.style) {\n modifiers.setStyle = {\n enabled: true,\n order: 900,\n fn: data => ({\n ...data,\n styles: {\n ...data.styles,\n ...this.props.style,\n },\n }),\n }\n }\n return \n }\n}\n\nStyledReactstrapDropdownMenu.propTypes = {\n style: PropTypes.object,\n modifiers: PropTypes.object,\n}\n\nexport default StyledReactstrapDropdownMenu\n","export const ASSIGN_TO_ME = `app/containers/TicketDetails/ASSIGN_TO_ME`\nexport const ASSIGN_TO_ME_SUCCESS = `app/containers/TicketDetails/ASSIGN_TO_ME_SUCCESS`\nexport const ASSIGN_TO_ME_ERROR = `app/containers/TicketDetails/ASSIGN_TO_ME_ERROR`\n\nexport const FETCH_TICKET_DETAILS = `app/containers/TicketDetails/FETCH_TICKET_DETAILS`\nexport const FETCH_TICKET_DETAILS_SUCCESS = `app/containers/TicketDetails/FETCH_TICKET_DETAILS_SUCCESS`\nexport const FETCH_TICKET_DETAILS_ERROR = `app/containers/TicketDetails/FETCH_TICKET_DETAILS_ERROR`\n\nexport const FETCH_POLICY_PATH = `app/containers/TicketDetails/FETCH_POLICY_PATH`\nexport const FETCH_POLICY_PATH_SUCCESS = `app/containers/TicketDetails/FETCH_POLICY_PATH_SUCCESS`\nexport const FETCH_POLICY_PATH_ERROR = `app/containers/TicketDetails/FETCH_POLICY_PATH_ERROR`\n\nexport const CLOSE_TICKET = `app/containers/TicketDetails/CLOSE_TICKET`\nexport const CLOSE_TICKET_SUCCESS = `app/containers/TicketDetails/CLOSE_TICKET_SUCCESS`\nexport const CLOSE_TICKET_ERROR = `app/containers/TicketDetails/CLOSE_TICKET_ERROR`\n\nexport const REOPEN_TICKET = `app/containers/TicketDetails/REOPEN_TICKET`\nexport const REOPEN_TICKET_SUCCESS = `app/containers/TicketDetails/REOPEN_TICKET_SUCCESS`\nexport const REOPEN_TICKET_ERROR = `app/containers/TicketDetails/REOPEN_TICKET_ERROR`\n\nexport const SNOOZE_TICKET = `app/containers/TicketDetails/SNOOZE_TICKET`\nexport const SNOOZE_TICKET_SUCCESS = `app/containers/TicketDetails/SNOOZE_TICKET_SUCCESS`\nexport const SNOOZE_TICKET_ERROR = `app/containers/TicketDetails/SNOOZE_TICKET_ERROR`\n\nexport const ACCEPT_RISK_TICKET = `app/containers/TicketDetails/ACCEPT_RISK_TICKET`\nexport const ACCEPT_RISK_TICKET_SUCCESS = `app/containers/TicketDetails/ACCEPT_RISK_TICKET_SUCCESS`\nexport const ACCEPT_RISK_TICKET_ERROR = `app/containers/TicketDetails/ACCEPT_RISK_TICKET_ERROR`\n\nexport const REASSIGN_TO_USER = `app/containers/TicketDetails/REASSIGN_TO_USER`\nexport const REASSIGN_TO_USER_SUCCESS = `app/containers/TicketDetails/REASSIGN_TO_USER_SUCCESS`\nexport const REASSIGN_TO_USER_ERROR = `app/containers/TicketDetails/REASSIGN_TO_USER_ERROR`\n\nexport const FETCH_TICKET_COMMENTS =\n 'app/containers/TicketDetails/FETCH_TICKET_COMMENTS'\nexport const FETCH_TICKET_COMMENTS_SUCCESS =\n 'app/containers/TicketDetails/FETCH_TICKET_COMMENTS_SUCCESS'\nexport const FETCH_TICKET_COMMENTS_ERROR =\n 'app/containers/TicketDetails/FETCH_TICKET_COMMENTS_ERROR'\n\nexport const ADD_COMMENT = 'app/containers/TicketDetails/ADD_COMMENT'\nexport const ADD_COMMENT_SUCCESS =\n 'app/containers/TicketDetails/ADD_COMMENT_SUCCESS'\nexport const ADD_COMMENT_ERROR =\n 'app/containers/TicketDetails/ADD_COMMENT_ERROR'\n\nexport const FETCH_SIMILAR_TICKETS = `app/containers/TicketDetails/FETCH_SIMILAR_TICKETS`\nexport const FETCH_SIMILAR_TICKETS_ERROR = `app/containers/TicketDetails/FETCH_SIMILAR_TICKETS_ERROR`\nexport const FETCH_SIMILAR_TICKETS_SUCCESS = `app/containers/TicketDetails/FETCH_SIMILAR_TICKETS_SUCCESS`\nexport const CHANGE_SIMILAR_TICKETS_FILTERS = `app/containers/TicketDetails/CHANGE_SIMILAR_TICKETS_FILTERS`\n\nexport const FETCH_TICKET_HISTORY =\n 'app/containers/TicketDetails/FETCH_TICKET_HISTORY'\nexport const FETCH_TICKET_HISTORY_SUCCESS =\n 'app/containers/TicketDetails/FETCH_TICKET_HISTORY_SUCCESS'\nexport const FETCH_TICKET_HISTORY_ERROR =\n 'app/containers/TicketDetails/FETCH_TICKET_HISTORY_ERROR'\n\nexport const FETCH_ACTIVITY_TICKET_ACTIONS = `app/containers/TicketDetails/FETCH_ACTIVITY_TICKET_ACTIONS`\nexport const FETCH_ACTIVITY_TICKET_ACTIONS_SUCCESS = `app/containers/TicketDetails/FETCH_ACTIVITY_TICKET_ACTIONS_SUCCESS`\nexport const FETCH_ACTIVITY_TICKET_ACTIONS_ERROR = `app/containers/TicketDetails/FETCH_ACTIVITY_TICKET_ACTIONS_ERROR`\n\nexport const FETCH_POLICY_EVIDENCE_LEGACY = `app/containers/TicketDetail/FETCH_POLICY_EVIDENCE_LEGACY`\nexport const FETCH_POLICY_EVIDENCE_LEGACY_SUCCESS = `app/containers/TicketDetail/FETCH_POLICY_EVIDENCE_LEGACY_SUCCESS`\nexport const FETCH_POLICY_EVIDENCE_LEGACY_ERROR = `app/containers/TicketDetail/FETCH_POLICY_EVIDENCE_LEGACY_ERROR`\n\nexport const TICKET_STATUS_CHANGE_SUCCESS =\n 'app/constainers/TicketDetailsData/TICKET_STATUS_CHANGE_SUCCESS'\n\nexport const CLOSE_TICKETS = 'app/containers/TicketDetailsData/CLOSE_TICKETS'\nexport const CLOSE_TICKETS_SUCCESS =\n 'app/containers/TicketDetailsData/CLOSE_TICKETS_SUCCESS'\n\nexport const BULK_ACTION_START =\n 'app/containers/TicketDetailsData/BULK_ACTION_START'\nexport const BULK_ACTION_COMPLETE =\n 'app/containers/TicketDetailsData/BULK_ACTION_COMPLETE'\n\nexport const ASSIGN_TICKETS = 'app/containers/TicketDetailsData/ASSIGN_TICKETS'\nexport const ACCEPT_RISK_TICKETS =\n 'app/containers/TicketDetailsData/ACCEPT_RISK_TICKETS'\nexport const SNOOZE_TICKETS = 'app/containers/TicketDetailsData/SNOOZE_TICKETS'\nexport const BULK_COMMENT = 'app/containers/TicketDetailsData/BULK_COMMENT'\nexport const BULK_TAG = 'app/containers/TicketDetailsData/BULK_TAG'\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { Set } from 'immutable'\nimport CodeMirror from 'codemirror'\nimport 'codemirror/addon/runmode/runmode'\nimport 'codemirror/mode/javascript/javascript'\nimport { Table } from 'reactstrap'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport CopyToClipBoard from 'components/CopyToClipboard'\nimport Icon from 'components/Icon'\nimport SearchInput from 'components/SearchInput'\nimport {\n metadataToObj,\n metdataNestedObject,\n unescapeJSONObject,\n} from 'utils/sonraiUtils'\n// display mode, either key-value or json\nexport const DISPKV = 'DISPKV'\nexport const DISPJSON = 'DISPJSON'\n\n// settings for the position of the search box in this component\nexport const SEARCH_NONE = 'search/none'\nexport const SEARCH_INLINE = 'search/inline'\nexport const SEARCH_HEADER = 'search/header'\n\nconst styles = {\n displayModeButton: {\n background: 'none',\n border: 'none',\n color: '#9a9a9a',\n },\n jsonDisplayContainer: {\n border: '1px solid #eee',\n padding: '10px',\n },\n jsonDisplayControlsContainer: {\n padding: '0px 0px 8px 0px',\n textAlign: 'right',\n },\n jsonDisplayText: {\n fontFamily: '\"Lucida Console\", Monaco, monospace',\n fontSize: '11.5px',\n },\n jsonDisplayStyles: {\n filterMatch: {\n fontWeight: 'bold',\n backgroundColor: '#ffc1075e',\n },\n property: {\n color: 'black',\n },\n string: {\n color: '#007ad9',\n },\n },\n tableCellCopyButtonContainer: {\n height: '12px',\n width: '24px',\n cursor: 'pointer',\n // make it go in the RHS of cell\n float: 'right',\n // it looks nicer if it's moved a little bit\n position: 'relative',\n right: '8px',\n top: '-4px',\n },\n tableCellText: {\n display: 'inline-block',\n width: 'calc(100% - 24px)',\n wordBreak: 'break-all',\n },\n}\n\nclass NodeViewDetailMetadataBody extends PureComponent {\n constructor(props) {\n super(props)\n this.state = {\n cellsShowCopy: Set(),\n displayMode: DISPKV,\n filterText: '',\n search: false,\n }\n }\n\n setFilterText = ({ target: { value } }) =>\n this.setState({ filterText: value })\n\n /**\n * this method actualy returns the style to display in a table cell\n * if the text matches the filterText\n */\n isMatch = key => {\n let keyText = key.toLowerCase()\n let filterText = this.state.filterText.toLowerCase()\n if (filterText !== '') {\n if (keyText.includes(filterText)) {\n return {\n backgroundColor: this.props.theme.highlight,\n }\n }\n return {\n color: 'rgba(171, 171, 171, 0.51)',\n }\n }\n return {}\n }\n\n changeDisplayMode = displayMode => {\n this.setState({ displayMode })\n }\n\n toggleSearchBar = () => {\n this.setState(oldState => ({ search: !oldState.search }))\n }\n\n onMouseEnterTableCell = cellId => {\n // I made it a Set here in case we want to show the copy on multiple\n // cells at some point\n this.setState({ cellsShowCopy: Set().add(cellId) })\n }\n\n onMouseLeaveMetadataTable = () => {\n this.setState({ cellsShowCopy: Set() })\n }\n\n /**\n * this renders the bit of the body if the display mode is for json\n */\n renderJSONBody = () => {\n // create JSON for the body\n const medatadataObj = metdataNestedObject(this.props.value)\n const unescapedMedatadaObj = unescapeJSONObject(medatadataObj)\n const json = JSON.stringify(unescapedMedatadaObj, null, 2)\n\n // we're going to be creating elements for the json display after codemirror\n // parses the text using this function\n const elements = []\n let index = 0\n const pushElement = (token, classNames) => {\n // decide which classes the cell should have\n const tokenStyles = (classNames || '')\n .split(' ')\n .map(className => {\n return styles.jsonDisplayStyles[className.trim()]\n })\n .filter(style => style)\n .reduce((allStyles, style) => {\n return {\n ...allStyles,\n ...style,\n }\n }, {})\n\n // if the text matches the search text, add an additional class\n let filterText = this.state.filterText.toLowerCase()\n if (\n token &&\n filterText !== '' &&\n token.toLowerCase().includes(filterText)\n ) {\n Object.assign(tokenStyles, styles.jsonDisplayStyles.filterMatch)\n }\n\n // put the elemnt in the list of elements\n elements.push(\n \n {token}\n \n )\n }\n\n // parse and tokenize the JSON\n CodeMirror.runMode(\n json,\n {\n name: 'text/javascript',\n json: 'true',\n },\n // for each token, create an element\n (token, style) => {\n pushElement(token, style)\n }\n )\n return (\n
    \n \n \n \n \n \n {/* button to change the display mode */}\n this.changeDisplayMode(DISPKV)}\n >\n \n \n \n
    \n \n \n
    {elements}
    \n \n \n )\n }\n\n /**\n * this method renders the table view\n */\n renderTableBody = () => {\n const metaObject = metadataToObj(this.props.value)\n const keysToDisplay = Object.keys(metaObject)\n return (\n \n \n \n \n \n \n \n \n \n \n {/* button to change display mode */}\n this.changeDisplayMode(DISPJSON)}\n >\n { JSON View }\n \n \n \n \n \n \n {keysToDisplay.map(key => {\n // cells have a hoverover function (show copy icon), these are the\n // keys to keep track of which cell the mouse is on top of\n const keyId = `k_${key}`\n const valueId = `v_${key}`\n return (\n \n {/* the cell with the key in it: */}\n this.onMouseEnterTableCell(keyId)}\n >\n
    {key}
    \n \n {this.state.cellsShowCopy.includes(keyId) && (\n \n )}\n \n \n\n {/* the cell with the value in it: */}\n this.onMouseEnterTableCell(valueId)}\n >\n
    {metaObject[key]}
    \n \n {this.state.cellsShowCopy.includes(valueId) && (\n \n )}\n \n \n
    \n )\n })}\n \n
    KeyValue
    \n )\n }\n\n /**\n * the component has two display modes, a table vie wnad a JSON view\n */\n renderBody = () => {\n switch (this.state.displayMode) {\n case DISPJSON:\n return this.renderJSONBody()\n case DISPKV:\n default:\n return this.renderTableBody()\n }\n }\n\n render() {\n return (\n
    \n {this.state.search && (\n
    \n \n
    \n )}\n {this.renderBody()}\n
    \n )\n }\n}\n\nNodeViewDetailMetadataBody.defaultProps = {\n search: SEARCH_HEADER,\n}\n\nNodeViewDetailMetadataBody.propTypes = {\n theme: themeShape,\n value: PropTypes.string,\n}\n\nexport default themeable(NodeViewDetailMetadataBody)\n","import {\n SET_CHANGE_DETECTION_DATA,\n ADD_CHANGE_DETECTION_PROPERTIES,\n ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS,\n REMOVE_CHANGE_DETECTION_PROPERTIES,\n REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS,\n UPDATE_CHANGE_DETECTION_PROPERTY,\n UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS,\n} from './constants'\n\nimport { createAction } from 'redux-actions'\n\nexport const setChangeDetectionData = createAction(SET_CHANGE_DETECTION_DATA)\n\nexport const addChangeDetectionProperties = createAction(\n ADD_CHANGE_DETECTION_PROPERTIES\n)\nexport const addChangeDetectionPropertiesSuccess = createAction(\n ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS\n)\n\nexport const removeChangeDetectionProperties = createAction(\n REMOVE_CHANGE_DETECTION_PROPERTIES\n)\n\nexport const removeChangeDetectionPropertiesSuccess = createAction(\n REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS\n)\n\nexport const updateChangeDetectionProperty = createAction(\n UPDATE_CHANGE_DETECTION_PROPERTY\n)\n\nexport const updateChangeDetectionPropertySuccess = createAction(\n UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS\n)\n","import { createSelector } from 'reselect'\nimport { List, Map } from 'immutable'\nimport _ from 'lodash'\nimport qs from 'query-string'\n\nexport const selectQueryStringTicketSrn = (state, props) => {\n return qs.parse(_.get(props, ['location', 'search'], '')).ticketSrn\n}\n\nconst selectRapSheetDomain = state => state.get('rapSheet') || Map()\n\nexport const selectResourcesLoading = createSelector(selectRapSheetDomain, sc =>\n sc.get('resourcesLoading')\n)\n\nexport const selectResources = createSelector(\n selectRapSheetDomain,\n sc => sc.get('resources') || Map()\n)\n\nexport const selectAlertListLoading = createSelector(selectRapSheetDomain, sc =>\n sc.get('alertListLoading')\n)\n\nexport const selectSelectedResourceAlerts = createSelector(\n selectRapSheetDomain,\n sc => sc.get('selectedResourceAlerts') || List()\n)\n\nexport const selectCategoryRollupData = createSelector(\n selectRapSheetDomain,\n sc => sc.get('categoryRollupData') || List()\n)\n\nexport const selectCategoryRollupLoading = createSelector(\n selectRapSheetDomain,\n sc => sc.get('categoryRollupLoading')\n)\n\nexport const selectIsSunburstViewMulti = createSelector(\n selectRapSheetDomain,\n sc => sc.get('isSunburstViewMulti')\n)\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".DateRangePickerInput {\\n display: flex;\\n background-color: transparent;\\n}\\n\\n.DateRangePickerInput_arrow {\\n margin: 6px 5px 0px 5px;\\n}\\n\\n.access-activity-list-card-link {\\n font-weight: 300;\\n}\\n\\n.show-path-modal-metadata-container table tr td {\\n font-size: 12px;\\n padding: 8px 4px;\\n}\\n\", \"\"]);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".center-sunburst {\\n margin: auto auto;\\n}\\n\", \"\"]);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./gridStyles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./gridStyles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./gridStyles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".splitter-layout-grid.splitter-layout {\\n display: grid;\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n grid-template-columns: auto auto 1fr;\\n}\\n\\n.splitter-layout-grid .layout-pane > div {\\n height: 100%;\\n}\\n\", \"\"]);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".splitter-layout {\\n position: inherit;\\n}\\n\", \"\"]);\n","module.exports = __webpack_public_path__ + \"favicon.ico\";","module.exports = __webpack_public_path__ + \"icon-72x72.png\";","module.exports = __webpack_public_path__ + \"icon-96x96.png\";","module.exports = __webpack_public_path__ + \"icon-128x128.png\";","module.exports = __webpack_public_path__ + \"icon-144x144.png\";","module.exports = __webpack_public_path__ + \"icon-152x152.png\";","module.exports = __webpack_public_path__ + \"icon-192x192.png\";","module.exports = __webpack_public_path__ + \"icon-384x384.png\";","module.exports = __webpack_public_path__ + \"icon-512x512.png\";","import { Map, List } from 'immutable'\nimport { getFieldsForType, getFullType } from 'query-builder'\nimport {\n getGenericNodeQuery,\n getGenericNodeQueryFieldsOnly,\n} from 'static-queries'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getCurrentOrg } from 'auth/current-org'\n\nexport const getTypeFromSrn = srn => {\n if (srn) {\n if (srn.startsWith('srn:kubernetes')) {\n const srnWithoutPreamble = srn.split('::')\n if (srnWithoutPreamble.length > 1) {\n srn = srnWithoutPreamble[1]\n }\n }\n\n if (srn.includes('srn:sonrai::')) {\n const parts = srn.split('::')\n const typeAndIdentifier = parts[1]\n const idParts = typeAndIdentifier.split('/')\n return idParts[0]\n } else {\n const parts = srn.split('/')\n if (parts[1]) {\n return parts[1]\n } else {\n return ''\n }\n }\n }\n\n return ''\n}\n\nexport const getCloudTypeFromSRN = srn => {\n if (srn) {\n const parts = srn.split(':')\n if (parts.length > 1) {\n return parts[1]\n }\n }\n}\n\n// If query-builder is not up to date - use this\n// export const getFieldsForType = (type, types) => {\n// const acceptableTypes = ['SCALAR', 'LIST']\n// const objectType = type.charAt(0).toUpperCase() + type.slice(1)\n// const nodeDefinition = types.get(objectType, Map())\n\n// const fields = nodeDefinition\n// .get('fields', List())\n// .filter(field => acceptableTypes.includes(field.getIn(['type', 'kind'])))\n\n// return fields\n// }\n\nexport const getNodeInfoQuery = (nodeId, queryNames, queryTypes) => {\n const config = getNodeInfo(nodeId, queryNames, queryTypes)\n\n const nodeProperties = getAllFields(nodeId, queryTypes)\n if (\n nodeProperties\n .find(property => property.get('name') === 'isIn', null, Map())\n .getIn(['type', 'name']) === 'ResourceEdgeRelation'\n ) {\n return gql`\n ${getGenericNodeQuery(config.nodeType, config.fields)}\n `\n } else {\n return gql`\n ${getGenericNodeQueryFieldsOnly(config.nodeType, config.fields)}\n `\n }\n}\n\nexport const getGraphEndpoint = () => {\n const config = window.config || {}\n let orgName = getCurrentOrg()\n\n if (config.graph_host_template !== undefined) {\n if (config.graph_host_template.includes('__ORGNAME__')) {\n if (orgName) {\n return config.graph_host_template.replace('__ORGNAME__', orgName)\n } else {\n //eslint-disable-next-line no-console\n console.error(\n 'Adam, there was an error while building graphQL endpoint: No org_name is present in localstorage or redux'\n )\n //eslint-disable-next-line no-console\n console.log(\n 'per the error above, we dont know what to do so setting the host to: ',\n config.graph_host_template\n )\n return config.graph_host_template\n }\n } else {\n return config.graph_host_template\n }\n } else {\n //TODO: use users profile value from redux, not localstorage...\n let domain = config.environment_domain\n\n if (process.env.NODE_ENV !== 'production') {\n if (config.local_dev_graph_host) {\n return config.local_dev_graph_host\n }\n\n if (!orgName) {\n orgName = 'dev'\n }\n\n if (!domain) {\n domain = 's.sonraisecurity.com'\n }\n }\n\n if (orgName === undefined) {\n //eslint-disable-next-line no-console\n console.log(\n 'Error while building graphQL endpoint: No org_name is present in localstorage. '\n )\n return setTimeout(getGraphEndpoint, 1000)\n }\n\n //eslint-disable-next-line no-console\n console.warn(\n 'No graph_host_template found in config.json. Building graphql endpoint from default template \"https://${orgName}-graphql-server.${domain}/\"'\n )\n\n return `https://${orgName}.${domain}/`\n }\n}\n\nexport const getAllFields = (nodeId, types) => {\n const type = getTypeFromSrn(nodeId).toLowerCase()\n const nodeType = getFullType(type).replace('EdgeRelation', '')\n\n const definition = types.get(nodeType, Map())\n const fields = definition.get('fields', List())\n return fields\n}\n\nexport const getNodeInfo = (nodeId, queryNames, types) => {\n const type = getTypeFromSrn(nodeId).toLowerCase() || ''\n const nodeType = getFullType(type)\n\n const queryName = queryNames.get(nodeType, Map()).get('name', 'Resources')\n\n const SKIP_PROPERTIES = [\n 'observedDate',\n 'loadId',\n 'createdBy',\n 'content',\n 'relations',\n 'taggedBy',\n 'relationsToParent',\n ]\n\n let fields = getFieldsForType(type, types)\n .map(field => field.get('name'))\n .filter(field => !SKIP_PROPERTIES.includes(field))\n\n let finalNodeType = queryName\n if (!nodeType) {\n finalNodeType = 'Resources'\n }\n\n return {\n nodeType: finalNodeType,\n fields: fields,\n nodeId: nodeId,\n }\n}\n\nexport const getSwimlaneFields = (nodeId, queryNames, types) => {\n const type = getTypeFromSrn(nodeId).toLowerCase() || ''\n const nodeType = getFullType(type)\n\n // check if has swimlane prop\n const checkMeForSwimmi =\n types.get(type.charAt(0).toUpperCase() + type.slice(1)) || Map()\n\n let fields = List()\n const queryName = queryNames.get(nodeType, Map()).get('name', 'Resources')\n if (\n checkMeForSwimmi.get('fields').filter(field => {\n return field.get('name') === 'swimlane'\n }).size > 0\n ) {\n const swimmy = `swimlane {\n items {\n title\n defaultImportance\n srn\n }\n }\n `\n fields = fields.push(swimmy)\n } else if (queryName === 'Identities') {\n const swimmy = `...on Resource {\n swimlane {\n items {\n srn\n title\n }\n }\n }\n `\n fields = fields.push(swimmy)\n }\n return fields\n}\n\nexport const formatUpdateSwimlaneTags = arr => {\n const { add, remove } = arr\n let updateAdd = add.map(tag => {\n if (hasBeenStarred(tag)) {\n return tag\n }\n return `*${tag}*`\n })\n let updateRemove = remove.map(tag => {\n if (hasBeenStarred(tag)) {\n return tag\n }\n return `*${tag}*`\n })\n return { add: updateAdd, remove: updateRemove }\n}\n\nexport const formatCreateSwimlaneTags = tags => {\n if (!_.isEmpty(tags)) {\n return tags.map(tag => {\n if (!hasBeenStarred(tag)) {\n return `*${tag}*`\n }\n return tag\n })\n }\n return tags\n}\n\nconst hasBeenStarred = tag => {\n if (tag) {\n const arr = tag.split('')\n if (_.first(arr) === '*' || _.last(arr) === '*') {\n return true\n }\n }\n return false\n}\n\n// search nested relationships for label type\nexport const dudeWheresMyType = (dude, relation, type) => {\n if (!dude || !relation || !type) {\n return []\n }\n if (dude.items && dude.items.length > 0) {\n for (let item of dude.items) {\n if (item.label && item.label === type) {\n return item\n } else if (item[relation]) {\n return dudeWheresMyType(item[relation], relation, type)\n } else {\n return []\n }\n }\n } else {\n return []\n }\n}\n\n//field - immutable map\nexport const getTypeFromDefinition = field => {\n return field\n .getIn(['definition', 'type', 'name'], '')\n .replace('EdgeRelation', '')\n}\n","module.exports = __webpack_public_path__ + \"favicon-32x32.png\";","module.exports = __webpack_public_path__ + \"favicon-16x16.png\";","module.exports = __webpack_public_path__ + \"apple-touch-icon.png\";","module.exports = __webpack_public_path__ + \"safari-pinned-tab.svg\";","module.exports = __webpack_public_path__ + \"browserconfig.xml\";","module.exports = __webpack_public_path__ + \".htaccess.bin\";","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n title: {\n id: 'app.components.ChooseOrgModal.title',\n defaultMessage: 'Choose Organization',\n },\n buttonText: {\n id: 'app.components.ChooseOrgModal.buttonText',\n defaultMessage: 'Confirm',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nimport Select from 'react-select'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\n\nimport messages from './messages'\n\nconst ModalOverlay = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n height: 100vh;\n width: 100vw;\n`\nconst ModalContainer = styled.div`\n position: absolute;\n height: 300px;\n width: 300px;\n background: white;\n top: calc(50% - 185px);\n left: calc(50% - 150px);\n box-shadow: rgb(17, 17, 24) 0px 0px 40px 4px;\n border-radius: 5px;\n`\n\nconst TopPartContainer = styled.div`\n height: 121px;\n background: rgba(241, 241, 241, 0.8);\n font-size: 22px;\n text-align: center;\n border-radius: 5px;\n`\n\nconst ControlContainer = styled.div`\n font-size: 12px;\n padding: 20px;\n`\n\nconst BigButton = styled.button`\n border: none;\n cursor: pointer;\n color: white;\n font-size: 15px;\n font-weight: 400;\n background-color: green;\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n padding: 20px;\n position: absolute;\n bottom: 0;\n height: 80px;\n width: 100%;\n text-align: center;\n\n transition: font-size 0.1s, padding 0.1s;\n &:hover {\n padding: 19px;\n font-size: 16px;\n }\n &:focus {\n text-decoration: underline;\n }\n`\n\nexport default class ChooseOrgModal extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n error: null,\n value: null,\n }\n }\n\n onConfirm = () => {\n if (this.state.value) {\n this.props.onConfirm(this.state.value)\n } else {\n this.setState({ error: true })\n }\n }\n\n onButtonKeyUp = event => {\n if (event.keyCode === 13) {\n event.preventDefault()\n this.onConfirm()\n }\n }\n\n setValue = ({ value }) => this.setState({ value, error: false })\n\n render() {\n const options = this.props.allowedOrgs.map(org => {\n return { label: org, value: org }\n })\n\n return (\n \n \n \n \n
    \n \n
    \n
    \n \n \n \n \n )\n }\n}\n\nSearchInput.propTypes = {\n style: PropTypes.object,\n quickFilter: PropTypes.bool,\n}\n\nexport default SearchInput\n","export default {\n noBorderButton: {\n border: 'none',\n margin: '0',\n padding: '0',\n backgroundColor: 'inherit',\n boxShadow: 'none',\n whiteSpace: 'nowrap',\n ':focus': {\n border: 'none',\n backgroundColor: 'inherit',\n boxShadow: 'none',\n outline: 'none',\n },\n ':active': {\n border: 'none',\n backgroundColor: 'inherit',\n boxShadow: 'none',\n outline: 'none',\n },\n },\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Button } from 'reactstrap'\nimport { Link } from 'react-router-dom'\n\nimport styles from './styles'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport class BorderlessButton extends React.PureComponent {\n getColor = () => {\n if (this.props.disabled) {\n return this.props.theme.neutralMedium\n }\n\n if (this.props.color === 'primary') {\n return this.props.theme.primary\n }\n\n if (this.props.color === 'secondary') {\n return this.props.theme.secondary\n }\n }\n\n render() {\n const {\n children,\n style,\n theme, //eslint-disable-line no-unused-vars\n className,\n typeColors, //eslint-disable-line no-unused-vars\n ...pprops\n } = this.props\n\n if (this.props.to) {\n return (\n \n \n {this.props.children}\n \n \n )\n }\n\n return (\n \n {children}\n \n )\n }\n}\n\nBorderlessButton.defaultProps = {\n className: '',\n}\n\nBorderlessButton.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n color: PropTypes.string,\n disabled: PropTypes.bool,\n theme: themeShape,\n typeColors: PropTypes.object,\n to: PropTypes.shape({\n pathname: PropTypes.string,\n search: PropTypes.string,\n state: PropTypes.any,\n }),\n style: PropTypes.object,\n}\n\nexport default themeable(BorderlessButton)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Button as ReactstrapButton } from 'reactstrap'\nimport Color from 'color'\nimport { Link } from 'react-router-dom'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport class Button extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n base: {\n boxShadow: 'none',\n cursor: 'pointer',\n },\n }\n }\n\n getStyle = () => {\n let style = {\n color: this.props.theme.neutralMedium,\n backgroundColor: '#ffffff',\n borderColor: this.props.theme.neutralMedium,\n borderWidth: '1px',\n }\n\n if (this.props.color === 'primary' || this.props.themeColor === 'primary') {\n style = {\n color: this.props.outline ? this.props.theme.primary : '#ffffff',\n backgroundColor: this.props.outline ? '#fff' : this.props.theme.primary,\n borderColor: this.props.theme.primary,\n }\n }\n\n if (this.props.color === 'success' || this.props.themeColor === 'success') {\n style = {\n color: this.props.outline ? this.props.theme.success : '#ffffff',\n backgroundColor: this.props.outline ? '#fff' : this.props.theme.success,\n borderColor: this.props.theme.success,\n }\n }\n\n if (\n this.props.color === 'secondary' ||\n this.props.themeColor === 'secondary'\n ) {\n style = {\n color: this.props.outline ? this.props.theme.secondary : '#ffffff',\n backgroundColor: this.props.outline\n ? '#fff'\n : this.props.theme.secondary,\n borderColor: this.props.theme.secondary,\n }\n }\n\n if (this.props.color === 'danger' || this.props.themeColor === 'danger') {\n style = {\n color: this.props.outline ? this.props.theme.fail : '#ffffff',\n backgroundColor: this.props.outline ? '#fff' : this.props.theme.fail,\n borderColor: this.props.theme.fail,\n }\n }\n\n return style\n }\n\n getDisabledStyle = inStyle => {\n let style = { ...inStyle }\n if (this.props.disabled) {\n style.backgroundColor = Color(style.backgroundColor)\n .desaturate(0.5)\n .darken(0.01)\n .hex()\n style.color = Color(style.color).desaturate(0.2).darken(0.3).hex()\n style.borderColor = Color(style.borderColor).darken(0.25)\n style.boxShadow = `inset 0px 0px 2px 0px ${style.borderColor}`\n return style\n }\n }\n\n render() {\n const {\n children,\n style,\n theme, //eslint-disable-line no-unused-vars\n typeColors, //eslint-disable-line no-unused-vars\n to,\n newTab,\n onClick,\n ...pprops\n } = this.props\n\n const finalStyle = {\n ...this.styles.base,\n ...this.getStyle(),\n ...style,\n ...this.getDisabledStyle(this.getStyle()),\n }\n\n const finalOnClick = this.props.disabled ? undefined : onClick\n\n if (to) {\n return (\n \n \n {children}\n \n \n )\n }\n\n return (\n \n {children}\n \n )\n }\n}\n\nButton.propTypes = {\n children: PropTypes.node,\n color: PropTypes.string,\n disabled: PropTypes.bool,\n outline: PropTypes.bool,\n onClick: PropTypes.func,\n theme: themeShape,\n typeColors: PropTypes.object,\n newTab: PropTypes.bool,\n to: PropTypes.shape({\n pathname: PropTypes.string,\n search: PropTypes.string,\n state: PropTypes.any,\n }),\n //When using Button as the tag for reactstrap DropdownAnchor, reactstrap is stripping the \"color\" prop. Added this alternative color prop so it gets passed through\n themeColor: PropTypes.string,\n style: PropTypes.object,\n}\n\nexport default themeable(Button)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\n\nimport IconDivider from 'components/IconDivider'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\n\nexport class Expandable extends React.Component {\n constructor(props) {\n super(props)\n this.styles = {\n expanded: {\n height: 'auto',\n overflow: 'visible',\n },\n content: {\n wordBreak: 'break-word',\n wordWrap: 'break-word', //Needed for Firefox\n overflow: 'hidden',\n position: 'relative',\n },\n expandButton: {\n fontSize: '0.8em',\n },\n }\n\n this.state = {\n expanded: false,\n contentOverflows: true,\n }\n\n this.containerRef = React.createRef()\n }\n\n componentDidMount() {\n const element = this.containerRef.current\n if (element) {\n this.setState({\n contentOverflows: element.scrollHeight > element.clientHeight,\n })\n }\n }\n\n componentDidUpdate() {\n if (this.props.autoUpdate) {\n const element = this.containerRef.current\n if (element) {\n if (element.scrollHeight <= Number.parseInt(this.props.height)) {\n if (this.state.contentOverflows) {\n this.setState({ contentOverflows: false })\n }\n } else {\n if (!this.state.contentOverflows) {\n this.setState({ contentOverflows: true })\n }\n }\n }\n }\n }\n\n toggleExpand = () => {\n this.setState(oldState => ({\n expand: !oldState.expand,\n }))\n }\n\n render() {\n return (\n \n \n {this.props.children}\n \n\n {this.state.contentOverflows && (\n \n \n {this.state.expand ? (\n \n Show Less\n \n ) : (\n \n Show More\n \n )}\n \n \n )}\n \n )\n }\n}\n\nExpandable.defaultProps = {\n height: '1.7em',\n style: {},\n}\n\nExpandable.propTypes = {\n children: PropTypes.node,\n height: PropTypes.string,\n style: PropTypes.object,\n autoUpdate: PropTypes.bool,\n scale: PropTypes.bool,\n}\n\nexport default Expandable\n","import { createAction } from 'redux-actions'\n\nimport {\n ASSIGN_TO_ME,\n ASSIGN_TO_ME_ERROR,\n ASSIGN_TO_ME_SUCCESS,\n FETCH_TICKET_DETAILS,\n FETCH_TICKET_DETAILS_SUCCESS,\n FETCH_TICKET_DETAILS_ERROR,\n ACCEPT_RISK_TICKET,\n ACCEPT_RISK_TICKET_ERROR,\n ACCEPT_RISK_TICKET_SUCCESS,\n CLOSE_TICKET,\n CLOSE_TICKET_ERROR,\n CLOSE_TICKET_SUCCESS,\n REOPEN_TICKET,\n REOPEN_TICKET_ERROR,\n REOPEN_TICKET_SUCCESS,\n SNOOZE_TICKET,\n SNOOZE_TICKET_ERROR,\n SNOOZE_TICKET_SUCCESS,\n FETCH_TICKET_COMMENTS,\n FETCH_TICKET_COMMENTS_SUCCESS,\n FETCH_TICKET_COMMENTS_ERROR,\n ADD_COMMENT,\n ADD_COMMENT_SUCCESS,\n ADD_COMMENT_ERROR,\n FETCH_SIMILAR_TICKETS,\n FETCH_SIMILAR_TICKETS_ERROR,\n FETCH_SIMILAR_TICKETS_SUCCESS,\n CHANGE_SIMILAR_TICKETS_FILTERS,\n REASSIGN_TO_USER,\n REASSIGN_TO_USER_SUCCESS,\n REASSIGN_TO_USER_ERROR,\n FETCH_TICKET_HISTORY,\n FETCH_TICKET_HISTORY_SUCCESS,\n FETCH_TICKET_HISTORY_ERROR,\n FETCH_ACTIVITY_TICKET_ACTIONS,\n FETCH_ACTIVITY_TICKET_ACTIONS_SUCCESS,\n FETCH_ACTIVITY_TICKET_ACTIONS_ERROR,\n FETCH_POLICY_EVIDENCE_LEGACY,\n FETCH_POLICY_EVIDENCE_LEGACY_ERROR,\n FETCH_POLICY_EVIDENCE_LEGACY_SUCCESS,\n FETCH_POLICY_PATH,\n FETCH_POLICY_PATH_SUCCESS,\n FETCH_POLICY_PATH_ERROR,\n TICKET_STATUS_CHANGE_SUCCESS,\n CLOSE_TICKETS,\n CLOSE_TICKETS_SUCCESS,\n BULK_ACTION_START,\n BULK_ACTION_COMPLETE,\n ASSIGN_TICKETS,\n ACCEPT_RISK_TICKETS,\n SNOOZE_TICKETS,\n BULK_COMMENT,\n BULK_TAG,\n} from './constants'\n\nexport const assignToMe = createAction(ASSIGN_TO_ME)\nexport const assignToMeError = createAction(ASSIGN_TO_ME_ERROR)\nexport const assignToMeSuccess = createAction(ASSIGN_TO_ME_SUCCESS)\n\nexport const fetchPolicyPath = createAction(FETCH_POLICY_PATH)\nexport const fetchPolicyPathSuccess = createAction(FETCH_POLICY_PATH_SUCCESS)\nexport const fetchPolicyPathError = createAction(FETCH_POLICY_PATH_ERROR)\n\nexport const fetchTicketDetails = createAction(FETCH_TICKET_DETAILS)\nexport const fetchTicketDetailsSuccess = createAction(\n FETCH_TICKET_DETAILS_SUCCESS\n)\nexport const fetchTicketDetailsError = createAction(FETCH_TICKET_DETAILS_ERROR)\n\nexport const acceptRiskTicket = createAction(ACCEPT_RISK_TICKET)\nexport const acceptRiskTicketSuccess = createAction(ACCEPT_RISK_TICKET_SUCCESS)\nexport const acceptRiskTicketError = createAction(ACCEPT_RISK_TICKET_ERROR)\n\nexport const closeTicket = createAction(CLOSE_TICKET)\nexport const closeTicketSuccess = createAction(CLOSE_TICKET_SUCCESS)\nexport const closeTicketError = createAction(CLOSE_TICKET_ERROR)\n\nexport const reopenTicket = createAction(REOPEN_TICKET)\nexport const reopenTicketError = createAction(REOPEN_TICKET_ERROR)\nexport const reopenTicketSucces = createAction(REOPEN_TICKET_SUCCESS)\n\nexport const snoozeTicket = createAction(SNOOZE_TICKET)\nexport const snoozeTicketSuccess = createAction(SNOOZE_TICKET_SUCCESS)\nexport const snoozeTicketError = createAction(SNOOZE_TICKET_ERROR)\n\nexport const fetchTicketComments = createAction(FETCH_TICKET_COMMENTS)\nexport const fetchTicketCommentsSuccess = createAction(\n FETCH_TICKET_COMMENTS_SUCCESS\n)\nexport const fetchTicketCommentsError = createAction(\n FETCH_TICKET_COMMENTS_ERROR\n)\n\nexport const addComment = createAction(ADD_COMMENT)\nexport const addCommentSuccess = createAction(ADD_COMMENT_SUCCESS)\nexport const addCommentError = createAction(ADD_COMMENT_ERROR)\n\nexport const fetchSimilarTickets = createAction(FETCH_SIMILAR_TICKETS)\nexport const fetchSimilarTicketsError = createAction(\n FETCH_SIMILAR_TICKETS_ERROR\n)\nexport const fetchSimilarTicketsSuccess = createAction(\n FETCH_SIMILAR_TICKETS_SUCCESS\n)\n\nexport const changeSimilarTicketsFilters = createAction(\n CHANGE_SIMILAR_TICKETS_FILTERS\n)\n\nexport const reassignToUser = createAction(REASSIGN_TO_USER)\nexport const reassignToUserSuccess = createAction(REASSIGN_TO_USER_SUCCESS)\nexport const reassignToUserError = createAction(REASSIGN_TO_USER_ERROR)\n\nexport const fetchTicketHistory = createAction(FETCH_TICKET_HISTORY)\nexport const fetchTicketHistorySuccess = createAction(\n FETCH_TICKET_HISTORY_SUCCESS\n)\nexport const fetchTicketHistoryError = createAction(FETCH_TICKET_HISTORY_ERROR)\n\nexport const fetchActivityTicketActions = createAction(\n FETCH_ACTIVITY_TICKET_ACTIONS\n)\nexport const fetchActivityTicketActionsSuccess = createAction(\n FETCH_ACTIVITY_TICKET_ACTIONS_SUCCESS\n)\nexport const fetchActivityTicketActionsError = createAction(\n FETCH_ACTIVITY_TICKET_ACTIONS_ERROR\n)\n\nexport const fetchPolicyEvidenceLegacy = createAction(\n FETCH_POLICY_EVIDENCE_LEGACY\n)\nexport const fetchPolicyEvidenceLegacyError = createAction(\n FETCH_POLICY_EVIDENCE_LEGACY_ERROR\n)\nexport const fetchPolicyEvidenceLegacySuccess = createAction(\n FETCH_POLICY_EVIDENCE_LEGACY_SUCCESS\n)\n\nexport const ticketStatusChangeSuccess = createAction(\n TICKET_STATUS_CHANGE_SUCCESS\n)\n\nexport const closeTickets = createAction(CLOSE_TICKETS)\nexport const closeTicketsSuccess = createAction(CLOSE_TICKETS_SUCCESS)\nexport const bulkActionStart = createAction(BULK_ACTION_START)\nexport const bulkActionComplete = createAction(BULK_ACTION_COMPLETE)\nexport const assignTickets = createAction(ASSIGN_TICKETS)\nexport const acceptRiskTickets = createAction(ACCEPT_RISK_TICKETS)\nexport const snoozeTickets = createAction(SNOOZE_TICKETS)\nexport const bulkComment = createAction(BULK_COMMENT)\nexport const bulkTag = createAction(BULK_TAG)\n","/**\n *\n * ProfileIcon\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ReactTooltip from 'react-tooltip'\nimport Icon from 'components/Icon'\nclass ProfileIcon extends React.PureComponent {\n styles = {\n base: {},\n userIcon: {\n width: this.props.width ? this.props.width : '40px',\n height: this.props.height ? this.props.height : '40px',\n borderRadius: '20px',\n marginRight: '0.5em',\n },\n defaultIcon: {\n marginRight: '0.5em',\n },\n }\n render() {\n if (this.props.img) {\n return [\n ,\n ,\n ]\n } else {\n return (\n
    \n \n
    \n )\n }\n }\n}\n\nProfileIcon.propTypes = {\n img: PropTypes.string,\n name: PropTypes.string,\n height: PropTypes.string,\n width: PropTypes.string,\n style: PropTypes.object,\n}\n\nexport default ProfileIcon\n","export default {\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n detail: {},\n key: {\n fontSize: '0.95rem',\n color: '#485460',\n fontWeight: 400,\n },\n code: {\n fontFamily: 'monospace',\n fontSize: '1.1rem',\n },\n codeBlock: {\n backgroundColor: '#fafafa',\n fontFamily: 'monospace',\n fontSize: '1.1rem',\n marginBottom: '0.5em',\n },\n emptyCard: {\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n}\n","import conformsTo from 'lodash/conformsTo'\nimport isFunction from 'lodash/isFunction'\nimport isObject from 'lodash/isObject'\nimport invariant from 'invariant'\n\n/**\n * Validate the shape of redux store\n */\nexport default function checkStore(store) {\n const shape = {\n dispatch: isFunction,\n subscribe: isFunction,\n getState: isFunction,\n replaceReducer: isFunction,\n injectedReducers: isObject,\n }\n invariant(\n conformsTo(store, shape),\n '(app/utils...) injectors: Expected a valid redux store'\n )\n}\n","import _ from 'lodash'\n\nlet authDB\nexport function getAuthDB() {\n return authDB\n}\n\nexport function setAuthDB(_it_) {\n authDB = _it_\n}\n\nexport const MAX_STORAGE_SIZE = 1_000_000 // ~1MB\n\nexport function cleanupOldAuthDBs() {\n const start = new Date().getTime()\n const authDB = getAuthDB()\n if (!authDB) {\n return\n }\n\n const allDBs = authDB.getAllDBs()\n\n const storageSize = {}\n for (let db of allDBs) {\n const key = authDB.makeLocalStorageKey(db.tab)\n const dbRaw = localStorage.getItem(key)\n storageSize[key] = dbRaw.length\n }\n\n let totalSize = Object.values(storageSize).reduce(\n (acc, curr) => acc + curr,\n 0\n )\n\n let cleanupCount = 0\n if (totalSize > MAX_STORAGE_SIZE) {\n const dbsOldestToNewest = _.sortBy(allDBs, 'time')\n while (totalSize > MAX_STORAGE_SIZE) {\n cleanupCount++\n const db = dbsOldestToNewest.shift()\n const key = authDB.makeLocalStorageKey(db.tab)\n localStorage.removeItem(key)\n totalSize -= storageSize[key]\n }\n }\n\n const end = new Date().getTime()\n // eslint-disable-next-line no-console\n console.debug(`cleaned up ${cleanupCount} old DBs in ${end - start}ms`)\n}\n\nexport default function startCleanup(authDB) {\n setAuthDB(authDB)\n return setInterval(() => {\n cleanupOldAuthDBs()\n }, 30_000)\n}\n","import uuid from 'uuid/v4'\nimport _ from 'lodash'\nimport moment from 'moment'\nimport jwt from 'jsonwebtoken'\nimport startCleanup from './auth-db-cleanup'\n\nconst LS_PREFIX = 'authDB_'\nexport const UIEXPCLAIM = 'https://sonraisecurity.com/uiexp'\n\nconst EventTypes = {\n TOKEN_FETCH: 't',\n LOGOUT: 'l',\n}\n\nexport const TokenFetchType = {\n INITIAL: 'i',\n REFETCH: 'r',\n}\n\nexport const LogoutEventType = {\n EXPIRE_TIMEOUT: 'e',\n UNAUTH_RESP: 'u',\n}\n\nconst DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSS Z'\nexport function formatDateTime(value) {\n if (!value) {\n return ''\n }\n return moment(value).format(DATE_FORMAT)\n}\n\nexport function parseDateTime(value) {\n return moment(value, DATE_FORMAT).valueOf()\n}\n\nexport function isTelemetryEnabled(user) {\n const env = user['https://sonraisecurity.com/env']\n const meta = user['https://sonraisecurity.com/userMeta']\n if (meta && meta[env]) {\n const envMeta = meta[env]\n return envMeta.sessionTelemetryEnabled || false\n }\n}\n\nexport default class AuthDB {\n constructor(user) {\n // this is the auth0 ID token as an object:\n // e.g. { name: \"albert1@sonraisecurity.com\", sub: \"auth0|728...\", ...etc }\n this.user = user\n this.enabled = isTelemetryEnabled(user)\n\n // each time the user navigates to the page, their tab gets an ID\n this.tab = uuid()\n\n this.localStorageKey = this.makeLocalStorageKey(this.tab)\n this.events = []\n this.db = {\n tab: this.tab,\n at: new Date().getTime(),\n active: true,\n events: this.events,\n }\n\n window.onbeforeunload = () => {\n try {\n this.db.active = false\n this.flushDB()\n } catch {\n // eslint-disable-next-line no-empty\n }\n return null\n }\n\n startCleanup(this)\n }\n\n /**\n * Flush the events to localstorage\n */\n flushDB() {\n if (this.enabled) {\n localStorage.setItem(this.localStorageKey, JSON.stringify(this.db))\n }\n }\n\n /**\n * when a new token is fetched, call this method\n */\n tokenFetchEvent(token, type) {\n try {\n const event = this.makeEvent(EventTypes.TOKEN_FETCH, type, token)\n\n // eslint-disable-next-line no-console\n console.debug(\n `[TOKEN_FETCH]: tab=${this.tab} eventType=${event.type} keyId=${\n event.kid\n } iat=${event.iat}`\n )\n this.events.push(event)\n this.flushDB()\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('error happen tokenFetchEvent', e)\n }\n }\n\n logoutEvent(type, token = window.aat) {\n try {\n const event = this.makeEvent(EventTypes.LOGOUT, type, token)\n // eslint-disable-next-line no-console\n console.debug(\n `[LOGOUT]: tab=${this.tab} eventType=${event.type} keyId=${\n event.kid\n } iat=${event.iat}`\n )\n this.events.push(event)\n this.db.active = false\n this.flushDB()\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('error happen logoutEvent', e)\n }\n }\n\n makeEvent(evt, type, token) {\n const time = new Date().getTime()\n let tokenClaims\n try {\n tokenClaims = jwt.decode(token)\n } catch (e) {\n tokenClaims = {}\n }\n const event = {\n evt,\n type,\n at: time,\n env: this.user['https://sonraisecurity.com/env'],\n sub: this.user.sub,\n exp: tokenClaims.exp,\n iat: tokenClaims.iat,\n uiexp: tokenClaims[UIEXPCLAIM],\n }\n return event\n }\n\n getAllDBs() {\n const allDBs = Object.keys(localStorage)\n .filter(key => key.startsWith(LS_PREFIX))\n .map(key => {\n try {\n return JSON.parse(localStorage.getItem(key))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('invalid content in DB: ' + key)\n return null\n }\n })\n .filter(db => db)\n return allDBs\n }\n\n clearAll() {\n for (let db of this.getAllDBs()) {\n this.clearDB(db)\n }\n }\n\n clearDB(db) {\n const { tab } = db\n if (tab) {\n localStorage.removeItem(this.makeLocalStorageKey(tab))\n }\n }\n\n /**\n * user could call this from the console window to get their session logs\n */\n getSessionLogs(filter = {}) {\n let allEvents = []\n for (let db of this.getAllDBs()) {\n const { tab, active, at, events } = db\n if (events) {\n for (let event of events) {\n const prettyEvent = {\n tab,\n active,\n tabOpen: formatDateTime(at),\n ...this.getPrettyEvent(event),\n }\n if (this.filterEvent(prettyEvent, filter)) {\n allEvents.push(prettyEvent)\n }\n }\n }\n }\n\n allEvents.sort((a, b) => {\n return parseDateTime(b.time) - parseDateTime(a.time)\n })\n return allEvents\n }\n\n filterEvent(event, filter = {}) {\n for (let key of Object.keys(filter)) {\n if (event[key] != filter[key]) {\n return false\n }\n }\n return true\n }\n\n /**\n * get a more human readable version of the event stored in the DB\n */\n getPrettyEvent(event) {\n const prettyEvent = {\n time: formatDateTime(event.at),\n sub: event.sub,\n env: event.env,\n iat: formatDateTime(event.iat * 1000),\n exp: formatDateTime(event.exp * 1000),\n uiexp: formatDateTime(event.uiexp * 1000),\n }\n\n if (event.evt === 't') {\n prettyEvent.eventType = 'TOKEN_FETCH'\n if (event.type === 'i') {\n prettyEvent.type = 'INITIAL'\n }\n if (event.type === 'r') {\n prettyEvent.type = 'REFETCH'\n }\n }\n\n if (event.evt === 'l') {\n prettyEvent.eventType = 'LOGOUT'\n if (event.type === 'e') {\n prettyEvent.type = 'EXPIRE_TIMEOUT'\n }\n if (event.type === 'u') {\n prettyEvent.type = 'UNAUTH_RESP'\n }\n }\n return prettyEvent\n }\n\n /**\n * get all the session logs formatted as a CSV\n */\n sessionLogsCSV(filter, logs = this.getSessionLogs(filter)) {\n const fields = [\n 'time',\n 'tab',\n 'active',\n 'tabOpen',\n 'eventType',\n 'type',\n 'sub',\n 'env',\n 'iat',\n 'exp',\n 'uiexp',\n ]\n const lines = [fields.join(',')]\n for (let log of logs) {\n lines.push(Object.values(_.pick(log, fields, undefined)).join(','))\n }\n return lines.join('\\n')\n }\n\n makeLocalStorageKey(tab) {\n return LS_PREFIX + tab\n }\n}\n","export default {\n container: {\n width: '100%',\n height: '100%',\n position: 'relative',\n },\n borderedCard: {\n width: '100%',\n height: '100%',\n display: 'grid',\n gridTemplateRows: 'auto 1fr auto',\n gridTemplateAreas: '\"top-title\" \"widget-content\" \"bottom-title\"',\n },\n leftHeader: { \n position: 'absolute',\n padding: '0.25em',\n top: '1px',\n left: '1px' \n },\n rightHeader: {\n display: 'flex',\n position: 'absolute',\n padding: '0.25em',\n top: '1px',\n right: '1px'\n },\n topTitle: {\n gridArea: 'top-title',\n },\n bottomTitle: {\n gridArea: 'bottom-title',\n textAlign: 'center',\n },\n body: {\n gridArea: 'widget-content',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n closeButton: {\n marginRight: '0.3em',\n },\n toolbarButton: {\n fontSize: '16px',\n cursor: 'pointer',\n margin: '0.25em',\n },\n filterIcon: {\n fontSize: '16px',\n margin: '0.25em 0 0.25em 0.25em',\n },\n hidden: {\n height: 0,\n width: 0,\n display: 'none',\n },\n error: {\n textAlign: 'center',\n gridArea: 'widget-content',\n },\n moreButton: {\n padding: '0 0.3em',\n border: 'none',\n display: 'inline',\n boxShadow: 'none',\n backgroundColor: 'transparent',\n },\n link: {\n display: 'block',\n width: '100%',\n marginBottom: '0.5em',\n paddingTop: '0.25em',\n paddingBottom: '0.25em',\n paddingLeft: '1em',\n paddingRight: '1em',\n textAlign: 'left',\n },\n loading: {\n height: '100%',\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n gridArea: 'widget-content',\n textAlign: 'center',\n },\n loadingTitle: {\n paddingTop: '0.5em',\n },\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './styles'\n\nclass TopTitle extends React.PureComponent {\n render() {\n return (\n \n {this.props.children}\n \n )\n }\n}\n\nTopTitle.propTypes = {\n style: PropTypes.object,\n children: PropTypes.node,\n onClick: PropTypes.func,\n}\n\nexport default TopTitle\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './styles'\n\nclass TopTitle extends React.PureComponent {\n render() {\n return (\n
    \n {this.props.children}\n
    \n )\n }\n}\n\nTopTitle.propTypes = {\n children: PropTypes.node,\n style: PropTypes.object,\n}\n\nexport default TopTitle\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './styles'\n\nclass CardBody extends React.PureComponent {\n render() {\n return (\n \n {this.props.children}\n \n )\n }\n}\n\nCardBody.propTypes = {\n style: PropTypes.object,\n children: PropTypes.node,\n}\n\nexport default CardBody\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Fade, Dropdown, DropdownToggle } from 'reactstrap'\n\nimport Icon from 'components/Icon'\nimport DropdownMenu from 'components/StyledReactstrapDropdownMenu'\nimport styles from './styles'\n\nexport class Toolbar extends React.Component {\n state = {\n dropdownExpanded: false,\n }\n\n toggleDropdown = () => {\n this.setState(currentState => ({\n dropdownExpanded: !currentState.dropdownExpanded,\n }))\n }\n\n renderLeftToolbar = () => {\n return (\n
    \n {this.props.leftToolbarButtons.map((button, index) => {\n return (\n \n {button}\n \n )\n })}\n
    \n )\n }\n\n renderRightToolbar = () => {\n return (\n
    \n {this.props.rightToolbarButtons.map((button, index) => {\n return (\n \n {button}\n \n )\n })}\n\n {this.props.statusButtons}\n {this.renderDropdown()}\n
    \n )\n }\n\n renderDropdown = () => {\n if (this.props.dropdownActions.length > 0) {\n return (\n \n \n \n \n \n {this.props.dropdownActions}\n
    \n \n )\n }\n }\n\n render() {\n return (\n \n {this.renderLeftToolbar()}\n {this.renderRightToolbar()}\n \n )\n }\n}\n\nToolbar.defaultProps = {\n style: {},\n leftToolbarButtons: [],\n rightToolbarButtons: [],\n dropdownActions: [],\n statusButtons: [],\n}\n\nToolbar.propTypes = {\n hovered: PropTypes.bool,\n leftToolbarButtons: PropTypes.array,\n rightToolbarButtons: PropTypes.array,\n dropdownActions: PropTypes.array,\n style: PropTypes.object,\n statusButtons: PropTypes.node,\n}\n\nexport default Toolbar\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { injectIntl } from 'react-intl'\nimport { compose } from 'redux'\nimport BorderedCard from 'components/BorderedCard'\nimport styles from './styles'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nexport class Card extends React.PureComponent {\n state = {\n hover: false,\n }\n\n onHover = () => {\n this.setState({\n hover: true,\n })\n }\n\n onLeave = () => {\n this.setState({\n hover: false,\n })\n }\n\n getCard = () => {\n if (this.props.loading) {\n let toolbar = null\n React.Children.forEach(this.props.children, child => {\n if (child && child.type.name === 'Toolbar') {\n toolbar = child\n }\n })\n return (\n \n {toolbar}\n \n {this.props.title}\n \n )\n }\n\n return React.Children.map(this.props.children, child => {\n if (child && typeof child.type === 'function') {\n return React.cloneElement(child, { hovered: this.state.hover })\n } else {\n return child\n }\n })\n }\n\n render() {\n return (\n \n \n {this.getCard()}\n \n \n )\n }\n}\n\nCard.defaultProps = {\n style: {},\n containerStyle: {},\n}\n\nCard.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n containerStyle: PropTypes.object,\n style: PropTypes.object,\n loading: PropTypes.bool,\n title: PropTypes.node,\n}\n\nexport default compose(injectIntl)(Card)\n\nexport { default as TopTitle } from './TopTitle' // eslint-disable-line\nexport { default as BottomTitle } from './BottomTitle' // eslint-disable-line\nexport { default as CardBody } from './CardBody' // eslint-disable-line\nexport { default as Toolbar } from './Toolbar' // eslint-disable-line\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\nexport const selectEscalationsDataDomain = state =>\n state.get('escalationData', Map())\n\nexport const selectEscalations = createSelector(\n selectEscalationsDataDomain,\n state => state.get('escalations') || Map()\n)\n\nexport const selectCreatingEscalation = createSelector(\n selectEscalationsDataDomain,\n state => state.get('creatingEscalation')\n)\n\nexport const selectCreatingEscalationError = createSelector(\n selectEscalationsDataDomain,\n state => state.get('creatingEscalationError')\n)\n\nexport const selectDeletingEscalations = createSelector(\n selectEscalationsDataDomain,\n state => state.get('deletingEscalations') || Map()\n)\n\nexport const selectUpdatingEscalation = createSelector(\n selectEscalationsDataDomain,\n state => state.get('updatingEscalation')\n)\n\nexport const selectUpdatingEscalationError = createSelector(\n selectEscalationsDataDomain,\n state => state.get('updatingEscalationError')\n)\n\nexport const selectEscalationsLoading = createSelector(\n selectEscalationsDataDomain,\n state => state.get('escalationsLoading')\n)\n\nexport const selectEscalationFilterOptions = createSelector(\n selectEscalationsDataDomain,\n state => state.get('escalationFilterOptions') || List()\n)\n\nexport const selectEscalationFilterOptionsLoading = createSelector(\n selectEscalationsDataDomain,\n state => state.get('escalationFilterOptionsLoading')\n)\n\nexport const selectUpdatingEscalationInvalidSwimlaneForTickets = createSelector(\n selectEscalationsDataDomain,\n state => state.get('updatingEscalationInvalidSwimlaneForTickets')\n)\n","/*\n *\n * NodeSolutionCenter constants\n *\n */\n\nexport const DEFAULT_RAPSHEET_ALERTS_DAYS = 1\n\nexport const GET_DATA = 'app/NodeSolutionCenter/GET_DATA'\n\nexport const SET_SWIMLANE_DATA_LOADING =\n 'app/NodeSolutionCenter/SET_SWIMLANE_DATA_LOADING'\n\nexport const GET_SWIMLANE_DATA_SUCCESS =\n 'app/NodeSolutionCenter/GET_SWIMLANE_DATA_SUCCESS'\n\nexport const GET_SWIMLANE_DATA_FAILURE =\n 'app/NodeSolutionCenter/GET_SWIMLANE_DATA_FAILURE'\n\nexport const SET_SWIMLANE_DATA_FAILURE =\n 'app/NodeSolutionCenter/SET_SWIMLANE_DATA_FAILURE'\n\nexport const GET_DATA_SUCCESS = 'app/NodeSolutionCenter/GET_DATA_SUCCESS'\n\nexport const GET_CRM_DATA_SUCCESS =\n 'app/NodeSolutionCenter/GET_CRM_DATA_SUCCESS'\n\nexport const REMAINING_TAG_SEARCH =\n 'app/NodeSolutionCenter/REMAINING_TAG_SEARCH'\n\nexport const CLEAR_DATA = 'app/NodeSolutionCenter/CLEAR_DATA'\n\nexport const GET_TAG_OPTIONS = 'app/NodeSolutionCenter/GET_TAG_OPTIONS'\n\nexport const GET_TAG_OPTIONS_SUCCESS =\n 'app/NodeSolutionCenter/GET_TAG_OPTIONS_SUCCESS'\n\nexport const SKIP_PROPERTIES = [\n 'observedDate',\n 'loadId',\n 'createdBy',\n 'content',\n 'relations',\n 'relationsToParent',\n 'sonraiConfig',\n 'taggedBy',\n]\n\n// CRM\n\nexport const SET_RESOURCE_MONITORING =\n 'app/NodeSolutionCenter/SET_RESOURCE_MONITORING'\nexport const TOGGLE_RESOURCE_MONITORING =\n 'app/ChangeDetectionManager/TOGGLE_RESOURCE_MONITORING'\n\nexport const GET_CRM_TICKETS = 'app/NodeSolutionCenter/GET_CRM_TICKETS'\nexport const SET_CRM_TICKETS = 'app/NodeSolutionCenter/SET_CRM_TICKETS'\nexport const GET_TICKET_COUNT = 'app/NodeSolutionCenter/GET_TICKET_COUNT'\nexport const SET_TICKET_COUNT = 'app/NodeSolutionCenter/SET_TICKET_COUNT'\n\nexport const FETCH_RESOURCE_GROUPS =\n 'app/NodeSolutionCenter/FETCH_RESOURCE_GROUPS'\nexport const FETCH_RESOURCE_GROUPS_SUCCESS =\n 'app/NodeSolutionCenter/FETCH_RESOURCE_GROUPS_SUCCESS'\nexport const SET_SHOULD_UPDATE_NODE_SWIMLANES =\n 'app/NodeSolutionCenter/SET_SHOULD_UPDATE_NODE_SWIMLANES'\nexport const RELOAD_SWIMLANES = 'app/NodeSolutionCenter/RELOAD_SWIMLANES'\nexport const FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR =\n 'app/NodeSolutionCenter/FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR'\nexport const FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR_SUCCESS =\n 'app/NodeSolutionCenter/FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR_SUCCESS'\nexport const FETCH_UBER_POLICY = 'app/NodeSolutionCenter/FETCH_UBER_POLICY'\nexport const FETCH_UBER_POLICY_ERROR =\n 'app/NodeSolutionCenter/FETCH_UBER_POLICY_ERROR'\nexport const FETCH_UBER_POLICY_SUCCESS =\n 'app/NodeSolutionCenter/FETCH_UBER_POLICY_SUCCESS'\n","export const CREATE_POLICY = 'app/ControlFrameworkData/CREATE_POLICY'\nexport const CREATE_POLICY_SUCCESS =\n 'app/ControlFrameworkData/CREATE_POLICY_SUCCESS'\nexport const UPDATE_CONTROL_GROUP_SUCCESS =\n 'app/ControlFrameworkData/UPDATE_CONTROL_GROUP_SUCCESS'\nexport const UPDATE_CONTROL_GROUP =\n 'app/ControlFrameworkData/UPDATE_CONTROL_GROUP'\nexport const FETCH_POLICIES = 'app/ControlFrameworkData/FETCH_POLICIES'\nexport const SET_POLICIES = 'app/ControlFrameworkData/SET_POLICIES'\nexport const FETCH_CONTROL_GROUPS =\n 'app/ControlFrameworkData/FETCH_CONTROL_GROUPS'\nexport const SET_CONTROL_GROUPS = 'app/ControlFrameworkData/SET_CONTROL_GROUPS'\nexport const CREATE_CONTROL_GROUP =\n 'app/ControlFrameworkData/CREATE_CONTROL_GROUP'\nexport const CREATE_CONTROL_GROUP_SUCCESS =\n 'app/ControlFrameworkData/CREATE_CONTROL_GROUP_SUCCESS'\nexport const DELETE_CONTROL_GROUP =\n 'app/ControlFrameworkData/DELETE_CONTROL_GROUP'\nexport const DELETE_CONTROL_GROUP_SUCCESS =\n 'app/ControlFrameworkData/DELETE_CONTROL_GROUP_SUCCESS'\nexport const DELETE_POLICY = 'app/ControlFrameworkData/DELETE_POLICY'\nexport const DELETE_POLICY_SUCCESS =\n 'app/ControlFrameworkData/DELETE_POLICY_SUCCESS'\nexport const UPDATE_POLICY = 'app/ControlFrameworkData/UPDATE_POLICY'\nexport const UPDATE_POLICY_SUCCESS =\n 'app/ControlFrameworkData/UPDATE_POLICY_SUCCESS'\nexport const ADD_POLICY = 'app/ControlFrameworkData/ADD_POLICY'\nexport const ADD_POLICY_SUCCESS = 'app/ControlFrameworkData/ADD_POLICY_SUCCESS'\nexport const SET_POLICY_ERROR = 'app/ControlFrameworkData/SET_POLICY_ERROR'\nexport const REMOVE_POLICY = 'app/ControlFrameworkData/REMOVE_POLICY'\nexport const REMOVE_POLICY_SUCCESS =\n 'app/ControlFrameworkData/REMOVE_POLICY_SUCCESS'\nexport const CLONE_FRAMEWORK = 'app/ControlFrameworkData/CLONE_FRAMEWORK'\nexport const CLONE_FRAMEWORK_SUCCESS =\n 'app/ControlFrameworkData/CLONE_FRAMEWORK_SUCCESS'\nexport const SET_FRAMEWORK_ENABLED =\n 'app/ControlFrameworkData/SET_FRAMEWORK_ENABLED'\nexport const SET_FRAMEWORK_ENABLED_SUCCESS =\n 'app/ControlFrameworkData/SET_FRAMEWORK_ENABLED_SUCCESS'\n\nexport const TOGGLE_ENABLED_ON_SWIMLANES =\n 'app/ControlFrameworkData/TOGGLE_ENABLED_ON_SWIMLANES'\nexport const TOGGLE_ENABLED_ON_SWIMLANES_SUCCESS =\n 'app/ControlFrameworkData/TOGGLE_ENABLED_ON_SWIMLANES_SUCCESS'\nexport const TOGGLE_SWIMLANE_ON_CFS =\n 'app/ControlFrameworkData/TOGGLE_SWIMLANE_ON_CFS'\nexport const TOGGLE_SWIMLANE_ON_CFS_SUCCESS =\n 'app/ControlFrameworkData/TOGGLE_SWIMLANE_ON_CFS_SUCCESS'\nexport const TOGGLE_SWIMLANE_ON_CFS_ERROR =\n 'app/ControlFrameworkData/TOGGLE_SWIMLANE_ON_CFS_ERROR'\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\nimport { getNameFromSrn } from 'utils/sonraiUtils'\nimport CloudAccount from 'components/CloudAccount'\nimport NodeViewDetailMetadataBody, {\n SEARCH_INLINE,\n} from 'components/NodeView/NodeViewDetailMetadataBody'\nimport TextLink from 'components/TextLink'\nimport JSONDisplay from 'components/JSONDisplay'\nimport { FlatPathWidget } from 'components/PathWidget'\nimport { selectCanAccessPathsLoading } from './selectors'\nimport Button from 'components/Button'\n\nclass ShowPathModal extends Component {\n styles = {\n titleName: {\n fontWeight: 500,\n },\n titleDetailsContainer: {\n paddingTop: '8px',\n },\n titleDetailsFieldKey: {\n fontWeight: 500,\n paddingRight: '5px',\n },\n titleDetailsFieldValue: {\n fontWeight: 300,\n },\n titleDetailsRow: {\n fontSize: '14px',\n paddingTop: '5px',\n },\n titleDetailsMetadataRow: {\n borderTop: '1px solid #eee',\n fontSize: '12px',\n },\n titleDetialsMetadata: {\n marginTop: '5px',\n width: '100%',\n },\n titleDetailsMetadataKey: {\n paddingTop: '5px',\n paddingBottom: '5px',\n paddingRight: '8px',\n },\n titleDetailsMetadataValue: {\n paddingTop: '5px',\n paddingBottom: '5px',\n },\n }\n\n state = {\n selectedTab: 0,\n }\n\n renderPolicyJSONView = () => {\n const content = JSON.parse(this.props.pathEndItem.json)\n return \n }\n\n renderMetadataView = () => {\n return (\n \n \n \n )\n }\n\n renderJSONViews = () => {\n if (!this.props.pathEndItem.json) {\n return (\n
    \n \n Metadata\n \n\n {this.renderMetadataView()}\n
    \n )\n }\n return (\n
    \n \n this.setState({ selectedTab: 0 })}\n >\n Policy JSON\n \n this.setState({ selectedTab: 1 })}\n >\n Metadata\n \n
    \n {this.state.selectedTab === 0\n ? this.renderPolicyJSONView()\n : this.renderMetadataView()}\n \n )\n }\n\n getTitleDetailsKeyName = key => {\n return key\n .replace('zzmetadata_', '')\n .split(/(?=[A-Z\\\\.])/)\n .map(segment => segment.replace('.', ''))\n .map(_.capitalize)\n .join(' ')\n }\n\n getFieldValueText = ({ key, value, item }) => {\n if (key === 'account') {\n const cloudType = item.cloudType\n const accountNumber = item.account\n const accountSRN = `srn:${cloudType}:account::${accountNumber}/Account/${accountNumber}`\n return \n } else {\n return {value}\n }\n }\n\n getTitleDetails = () => {\n if (!this.props.pathEndItem) {\n return \n }\n\n const fields = Object.keys(this.props.pathEndItem)\n .filter(key => {\n if ('conditions' === key || 'path' === key || '__typename' === key) {\n return false\n }\n\n const value = this.props.pathEndItem[key]\n if (\n _.isArray(value) ||\n _.isObject(value) ||\n _.isFunction(value) ||\n _.isEmpty(value)\n ) {\n return false\n }\n return true\n })\n .reduce((fields, key) => {\n return Object.assign({ [key]: this.props.pathEndItem[key] }, fields)\n }, {})\n\n if (this.props.pathEndItem.rbac) {\n let name = this.props.pathEndItem.isRoot\n ? `(Root) ${this.props.pathEndItem.rbac.resourcePath}`\n : this.props.pathEndItem.rbac.resourcePath\n fields[\n this.props.pathEndItem.rbac.resourceType === 'directResource'\n ? this.props.pathEndItem.rbac.resourceType\n : this.props.pathEndItem.rbac.resourceType.slice(\n 0,\n this.props.pathEndItem.rbac.resourceType.length - 1\n )\n ] = name\n }\n\n return (\n
    \n {Object.keys(fields)\n .sort()\n .map((key, index) => {\n const value = fields[key]\n return (\n \n \n {this.getTitleDetailsKeyName(key)}\n \n \n {this.getFieldValueText({\n key,\n value,\n item: this.props.pathEndItem,\n })}\n \n
    \n )\n })}\n {this.renderJSONViews()}\n \n )\n }\n\n getPath = () => {\n if (this.props.leaveItBeFFS) {\n return this.props.paths\n } else {\n return this.props.paths.map(path => {\n return path.push(\n this.props.actionableByMode\n ? this.props.sourceId\n : this.props.resourceId\n )\n })\n }\n }\n\n render() {\n const { isOpen, toggle } = this.props\n\n // give a little mote room if don't need to show title details\n let modalBodyHeight = '600px'\n if (this.props.pathEndItem) {\n if (this.props.pathEndItem.metadata) {\n modalBodyHeight = '300px' // leave extra vertical height for metadata\n } else {\n modalBodyHeight = '450px'\n }\n }\n\n return (\n \n \n
    \n {this.props.actionableByMode ? (\n \n \n {this.props.classification}\n {' '}\n Access Paths from{' '}\n \n {getNameFromSrn(this.props.resourceId)}\n {' '}\n to{' '}\n \n {this.props.sourceName}\n \n \n ) : (\n \n \n {this.props.classification}\n {' '}\n Access Paths from{' '}\n \n {this.props.sourceName}\n {' '}\n to{' '}\n \n {getNameFromSrn(this.props.resourceId)}\n \n \n )}\n
    \n {this.getTitleDetails()}\n \n \n {\n \n }\n \n \n \n Close\n \n \n \n )\n }\n}\n\nShowPathModal.propTypes = {\n actionableByMode: PropTypes.bool,\n leaveItBeFFS: PropTypes.bool,\n classification: PropTypes.string,\n paths: ImmutablePropTypes.list.isRequired,\n canAccessPathsLoading: PropTypes.bool,\n canAccessPathsError: PropTypes.bool,\n resourceId: PropTypes.string,\n toggle: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n pathEndItem: PropTypes.object,\n sourceName: PropTypes.string.isRequired,\n sourceId: PropTypes.string.isRequired,\n skipLoading: PropTypes.bool,\n onDoubleClick: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n canAccessPathsLoading: selectCanAccessPathsLoading,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default compose(withConnect)(ShowPathModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ReactTooltip from 'react-tooltip'\nimport Hoverable from 'components/Hoverable'\nimport uuid from 'uuid/v4'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport { truncateMiddle } from 'utils/sonraiUtils'\n\nclass NodeViewDetailSrn extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '30px',\n },\n textStyle: {\n width: '370px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n clipboardButton: { margin: '0px 0px 5px 5px', width: '32px' },\n }\n\n this.uuid = uuid()\n }\n\n render() {\n return (\n
    \n (\n
    \n
    \n {truncateMiddle(this.props.value, 40, 19)}\n
    \n {hovered ? (\n
    \n \n
    \n ) : (\n
    \n )}\n
    \n )}\n />\n \n {this.props.value}\n \n
    \n )\n }\n}\n\nNodeViewDetailSrn.propTypes = {\n value: PropTypes.string,\n}\n\nexport default NodeViewDetailSrn\n","module.exports = __webpack_public_path__ + \"4bd91c46e9b5e2d45d47127d028debc0.png\";","/**\n *\n * BounceLoadingAnimation\n *\n */\n\nimport React from 'react'\n\nclass BounceLoadingAnimation extends React.PureComponent {\n render() {\n return (\n
    \n
    \n
    \n
    \n )\n }\n}\n\nBounceLoadingAnimation.propTypes = {}\n\nexport default BounceLoadingAnimation\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport CloudAccount from 'components/CloudAccount'\nimport { getAccountFromSrn } from 'utils/sonraiUtils'\nclass NodeViewDetailAccount extends React.PureComponent {\n hasLink = () => {\n const { __typename, srn } = this.props.nodeData\n if (__typename === 'Account') {\n if (getAccountFromSrn(srn) === this.props.accountId) {\n return false\n }\n }\n return true\n }\n render() {\n return (\n
    \n \n
    \n )\n }\n}\n\nNodeViewDetailAccount.propTypes = {\n accountId: PropTypes.string.isRequired,\n nodeData: PropTypes.object,\n}\n\nexport default NodeViewDetailAccount\n","/**\n *\n * IconDivider\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nimport Icon from 'components/Icon'\n\nconst styles = {\n wrapper: {\n display: 'flex',\n },\n line: {\n width: '100%',\n margin: '1em 0.3em',\n },\n}\n\nclass IconDivider extends React.PureComponent {\n render() {\n let lineStyle = { ...styles.line }\n lineStyle.borderBottom = `1px solid ${this.props.color}`\n\n return (\n
    \n
    \n {this.props.iconName ? (\n \n ) : (\n this.props.children\n )}\n\n
    \n
    \n )\n }\n}\n\nIconDivider.defaultProps = {\n color: '#eeeeee',\n}\n\nIconDivider.propTypes = {\n children: PropTypes.node,\n color: PropTypes.string,\n iconName: PropTypes.string,\n}\n\nexport default IconDivider\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\n\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport { exists } from 'utils/sonraiUtils'\nimport CenterContent from 'components/CenterContent'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { GRAPHQL_TIMEOUT } from 'appConstants'\nexport class TimeoutLoader extends React.Component {\n state = {\n loadingMessage: null,\n hideLoader: false,\n }\n\n constructor(props) {\n super(props)\n\n this.timer = _.delay(this.setFirstMessage, 8000)\n\n this.styles = {\n loading: {\n margin: '1rem',\n padding: '0rem 25%',\n },\n loadingContainer: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n loadingMessageContainer: {\n display: 'flex',\n justifyContent: 'center',\n flexDirection: 'column',\n alignItems: 'center',\n color: props.theme.neutralDark,\n },\n }\n }\n\n componentWillUnmount() {\n if (this.timer) {\n clearTimeout(this.timer)\n }\n }\n\n setFirstMessage = () => {\n this.setState({\n loadingMessage: this.props.firstMessage,\n })\n\n this.timer = _.delay(this.setFinalMessage, GRAPHQL_TIMEOUT - 8000)\n }\n\n setFinalMessage = () => {\n this.setState({\n loadingMessage: this.props.finalMessage,\n hideLoader: true,\n })\n }\n\n render() {\n const { loadingMessage } = this.state\n\n if (!exists(loadingMessage)) {\n return (\n \n \n \n )\n } else {\n return (\n \n {!this.state.hideLoader && }\n
    \n
    \n {this.state.loadingMessage}\n
    \n
    \n
    \n )\n }\n }\n}\n\nTimeoutLoader.propTypes = {\n firstMessage: PropTypes.node,\n finalMessage: PropTypes.node,\n theme: themeShape,\n}\n\nexport default themeable(TimeoutLoader)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n addPrivateKeyModalTitle: {\n id: 'app.containers.DataClassification.addPrivateKeyModalTitle',\n defaultMessage: 'Add Decryption Key',\n },\n addPrivateKeyBoldInstructionsPart1Bold: {\n id: 'app.containers.DataClassification.addPrivateKeyBoldPart1',\n defaultMessage:\n 'The classification result samples returned to Sonrai have been encrypted and cannot be displayed without the appropriate encryption key.',\n },\n addPrivateKeyInstructionsPart2NotBold: {\n id: 'app.containers.DataClassification.addPrivateKeyPart2NotBold',\n defaultMessage:\n 'To view your results, please enter the matching key that was used when submitting the classification job.',\n },\n addPrivateKeyInstructionsPart3Bold: {\n id: 'app.containers.DataClassification.addPrivateKeyInstructionsPart3Bold',\n defaultMessage:\n 'Your private key is used only in this browser session for decryption and is not transmitted or stored in any way.',\n },\n addPrivateKeyInstructionsPart4NotBold: {\n id: 'app.containers.DataClassification.addPrivateKeyInstructionsPart3Bold',\n defaultMessage:\n 'Incorrect keys will not return any results. If you misplace your private key, you cannot retrieve these encrypted results, however you can choose to rerun the classification job again with a new public key to retrieve a new set of results.',\n },\n submitFormCustomClassifierLabel: {\n id: 'app.containers.DataClassification.submitFormCustomClassifierLabel',\n defaultMessage: 'Custom Classifiers',\n },\n dataClassificationTableSectionHeading: {\n id:\n 'app.containers.DataClassification.dataClassificationTableSectionHeading',\n defaultMessage: 'Data Classification Results',\n },\n dataClassificationTableHeadingText: {\n id: 'app.containers.DataClassification.dataClassificationTableHeadingText',\n defaultMessage:\n 'The data has been found to contain this information by the classification job.',\n },\n dataClassificationNoSamplesText: {\n id: 'app.containers.DataClassification.dataClassificationNoSamplesText',\n defaultMessage:\n 'This classification job was configured not to return samples. Only counts of classified data were found. If you would like to have samples of the classified data, please run classification job with included samples.',\n },\n dataTableClassifierName_ADDRESS: {\n id: 'app.containers.DataClassification.dataTableClassifierName_ADDRESS',\n defaultMessage: 'Address',\n },\n dataTableClassifierName_CREDITCARD: {\n id: 'app.containers.DataClassification.dataTableClassifierName_CREDITCARD',\n defaultMessage: 'Credit Card',\n },\n dataTableClassifierName_DATE: {\n id: 'app.containers.DataClassification.dataTableClassifierName_DATE',\n defaultMessage: 'Date',\n },\n dataTableClassifierName_DOB: {\n id: 'app.containers.DataClassification.dataTableClassifierName_DOB',\n defaultMessage: 'Date of Birth',\n },\n dataTableClassifierName_EMAIL: {\n id: 'app.containers.DataClassification.dataTableClassifierName_EMAIL',\n defaultMessage: 'Email',\n },\n dataTableClassifierName_FULLNAME: {\n id: 'app.containers.DataClassification.dataTableClassifierName_FULLNAME',\n defaultMessage: 'Full Name',\n },\n dataTableClassifierName_PASSPORTNUMBER: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_PASSPORTNUMBER',\n defaultMessage: 'Passport Number',\n },\n dataTableClassifierName_BANKACCOUNTNUMBER: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_BANKACCOUNTNUMBER',\n defaultMessage: 'Bank Account Number',\n },\n dataTableClassifierName_PHONENUMBER: {\n id: 'app.containers.DataClassification.dataTableClassifierName_PHONENUMBER',\n defaultMessage: 'Phone Number',\n },\n dataTableClassifierName_PHONENUMBER_CANADA: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_PHONENUMBER_CANADA',\n defaultMessage: 'Phone Number',\n },\n dataTableClassifierName_PHONENUMBER_USA: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_PHONENUMBER_USA',\n defaultMessage: 'Phone Number',\n },\n dataTableClassifierName_PHONENUMBER_UK: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_PHONENUMBER_UK',\n defaultMessage: 'Phone Number',\n },\n dataTableClassifierName_POSTCODE: {\n id: 'app.containers.DataClassification.dataTableClassifierName_POSTCODE',\n defaultMessage: 'Postal Code',\n },\n dataTableClassifierName_SIN: {\n id: 'app.containers.DataClassification.dataTableClassifierName_SIN',\n defaultMessage: 'Social Insurance Number',\n },\n dataTableClassifierName_SSN: {\n id: 'app.containers.DataClassification.dataTableClassifierName_SSN',\n defaultMessage: 'Social Security Number',\n },\n dataTableClassifierName_TAXNUMBER: {\n id: 'app.containers.DataClassification.dataTableClassifierName_TAXNUMBER',\n defaultMessage: 'Tax Number',\n },\n dataTableClassifierName_ZIPCODE: {\n id: 'app.containers.DataClassification.dataTableClassifierName_SSN',\n defaultMessage: 'ZIP Code',\n },\n dataTableClassifierName_AWSACCESSKEY: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_AWSACCESSKEY',\n defaultMessage: 'AWS Access Key',\n },\n dataTableClassifierName_AWSSECRETKEY: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_AWSSECRETKEY',\n defaultMessage: 'AWS Secret Key',\n },\n dataTableClassifierName_AZURESTORAGEACCOUNTKEY: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_AZURESTORAGEACCOUNTKEY',\n defaultMessage: 'Azure Storage Account Key',\n },\n dataTableClassifierName_AZURECLIENTSECRET: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_AZURECLIENTSECRET',\n defaultMessage: 'Azure Client Secret',\n },\n dataTableClassifierName_AZURESAS: {\n id: 'app.containers.DataClassification.dataTableClassifierName_AZURESAS',\n defaultMessage: 'Azure Access Signature',\n },\n dataTableClassifierName_DRIVERSLICENSE: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_DRIVERSLICENSE',\n defaultMessage: 'Drivers License',\n },\n dataTableClassifierName_ENCRYPTIONKEY: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_ENCRYPTIONKEY',\n defaultMessage: 'Encryption Key',\n },\n dataTableClassifierName_GCPAPIKEY: {\n id: 'app.containers.DataClassification.dataTableClassifierName_GCPAPIKEY',\n defaultMessage: 'GCP API Key',\n },\n dataTableClassifierName_GCPSERVICEACCOUNTKEY: {\n id:\n 'app.containers.DataClassification.dataTableClassifierName_GCPSERVICEACCOUNTKEY',\n defaultMessage: 'GCP Service Account Key',\n },\n noClassificationsInfo: {\n id: 'app.containers.DataClassification.noClassificationsInfo',\n defaultMessage: 'There are no classifications.',\n },\n noClassificationsCreateText: {\n id: 'app.containers.DataClassification.noClassificationsCreateText',\n defaultMessage: 'Click here to create classifications job',\n },\n manageCustomDataClassifiers: {\n id: 'app.containers.DataClassification.manageCustomDataClassifiers',\n defaultMessage: '(Manage Custom Data Classifiers)',\n },\n suggestUnencryptionLinkMessage: {\n id: 'app.containers.DataClassification.suggestUnencryptionLinkMessage',\n defaultMessage: 'Add decryption key',\n },\n scheduleAnotherClassification: {\n id: 'app.containers.DataClassification.scheduleAnotherClassification',\n defaultMessage: 'Run another classification job',\n },\n submitFormHeader: {\n id: 'app.containers.DataClassification.submitFormHeader',\n defaultMessage: 'Create New Classification Job',\n },\n submitFormHeaderText: {\n id: 'app.containers.DataClassification.submitFormHeaderText',\n defaultMessage:\n 'Please enter the values below to configure a new job to classify this data.',\n },\n submitFormClassifiersLabel: {\n id: 'app.containers.DataClassification.submitFormClassifiersLabel',\n defaultMessage: 'Classifiers',\n },\n submitFormClassifiersInstruction: {\n id: 'app.containers.DataClassification.submitFormClassifiersInstruction',\n defaultMessage:\n 'Classifiers allow for different classes of sensitive data to be identified, such as names, email addresses or credit card numbers. Choose one or more of the classifier options below to use when scanning your resource. ',\n },\n submitFormPhoneNumberLabel: {\n id: 'app.containers.DataClassification.submitFormPhoneNumberLabel',\n defaultMessage: 'Phone Numbers',\n },\n submitFormPhoneNumberAllCountries: {\n id: 'app.containers.DataClassification.submitFormPhoneNumberAllCountries',\n defaultMessage: 'All Countries',\n },\n submitFormScanModeNumberLabel: {\n id: 'app.containers.DataClassification.submitFormScanModeNumberLabel',\n defaultMessage: 'Scan Mode',\n },\n submitFormScanModeInstructions: {\n id: 'app.containers.DataClassification.submitFormScanModeInstructions',\n defaultMessage: 'Choose from one of the available scan modes',\n },\n submitFormScanModeFullLabel: {\n id: 'app.containers.DataClassification.submitFormScanModeFullLabel',\n defaultMessage: 'Full Scan',\n },\n submitFormScanModeFullDescription: {\n id: 'app.containers.DataClassification.submitFormScanModeFullLabel',\n defaultMessage:\n 'Scan all files in the storage resource. A maximum of 1000 items are included in the report, with up to 50 samples per classifier.',\n },\n submitFormScanModePartialLabel: {\n id: 'app.containers.DataClassification.submitFormScanModePartialLabel',\n defaultMessage: 'Partial Scan',\n },\n submitFormScanModePartialDescription: {\n id: 'app.containers.DataClassification.submitFormScanModeFullLabel',\n defaultMessage:\n 'Scans 25% of the files in the storage resource. A maximum of 1000 items are included in the report, with up to 20 samples per classifier.',\n },\n submitFormScanModeQuickLabel: {\n id: 'app.containers.DataClassification.submitFormScanModeQuickLabel',\n defaultMessage: 'Quick Scan',\n },\n submitFormScanModeQuickDescription: {\n id: 'app.containers.DataClassification.submitFormScanModeQuickLabel',\n defaultMessage:\n 'Scans 5% of the files in the storage resource. A maximum of 10 objects are included in the report, with up to 10 samples per classifier.',\n },\n submitFormAuthenticationLabel: {\n id: 'app.containers.DataClassification.submitFormAuthenticationLabel',\n defaultMessage: 'Authentication',\n },\n submitFormAuthenticationInstructions: {\n id:\n 'app.containers.DataClassification.submitFormAuthenticationInstructions',\n defaultMessage:\n 'Please provide the following information to allow the classification job to acces the database.',\n },\n submitFormAuthenticationUsernameInstructions: {\n id: 'app.containers.DataClassification.submitFormAuthenticationUsername',\n defaultMessage:\n 'Database Username - Username for which to access the database',\n },\n submitFormAuthenticationSecretsManagerArnInstructions: {\n id:\n 'app.containers.DataClassification.submitFormAuthenticationSecretsManagerArnInstructions',\n defaultMessage:\n 'Secrets Manager Secret ARN - ARN of a secret in AWS Secrets Manager containing the password to access the database',\n },\n submitFormAuthenticationSecretsManagerPathInstructions: {\n id:\n 'app.containers.DataClassification.submitFormAuthenticationSecretsManagerPathInstructions',\n defaultMessage:\n 'Secrets Manager Secret Path - Key in Secret JSON Document for which the value is the database password',\n },\n submitFormAuthenticationKVNameInstructions: {\n id: 'app.containers.DataClassification.submitFormAuthenticationKVPath',\n defaultMessage:\n 'Key Vault Name - Name of the Key Vault that holds the database password',\n },\n submitFormAuthenticationKVPathInstructions: {\n id: 'app.containers.DataClassification.submitFormAuthenticationKVPath',\n defaultMessage:\n 'Key Vault Path - Key in Secret JSON Document for which the value is the database password',\n },\n submitFormAuthenticationUsername: {\n id: 'app.containers.DataClassification.submitFormAuthenticationUsername',\n defaultMessage: 'Database Username',\n },\n submitFormAuthenticationKVName: {\n id: 'app.containers.DataClassification.submitFormAuthenticationKVName',\n defaultMessage: 'Key Vault Name',\n },\n submitFormAuthenticationKVPath: {\n id: 'app.containers.DataClassification.submitFormAuthenticationKVPath',\n defaultMessage: 'Key Vault Path',\n },\n submitFormAuthenticationSecretName: {\n id: 'app.containers.DataClassification.submitFormAuthenticationSecretName',\n defaultMessage: 'Secrets Manager Secret ARN',\n },\n submitFormAuthenticationSecretPath: {\n id: 'app.containers.DataClassification.submitFormAuthenticationSecretPath',\n defaultMessage: 'Secrets Manager Secret Path',\n },\n submitFormMaxSamplesPerClassifierLabel: {\n id:\n 'app.containers.DataClassification.submitFormMaxSamplesPerClassifierLabel',\n defaultMessage: 'Max Samples Per Classifier',\n },\n submitFormMaxSamplesPerClassifierInstructions: {\n id:\n 'app.containers.DataClassification.submitFormMaxSamplesPerClassifierInstructions',\n defaultMessage:\n 'Maximum number of data samples reported per classifier. Minimum = 1, Maximum = 100',\n },\n submitFormOutputLabel: {\n id: 'app.containers.DataClassification.submitFormOutputLabel',\n defaultMessage: 'Output Mode',\n },\n submitFormOutputInstructions: {\n id: 'app.containers.DataClassification.submitFormOutputInstructions',\n defaultMessage: 'Choose from one of the available output modes',\n },\n submitFormOutputLimitLabel: {\n id: 'app.containers.DataClassification.submitFormOutputLimitLabel',\n defaultMessage: 'Output Limit',\n },\n submitFormOutputLimitInstructions: {\n id: 'app.containers.DataClassification.submitFormOutputLimitInstructions',\n defaultMessage:\n 'Maximum number of output records generated during scanning. Minimum = 1, Maximum = 1000',\n },\n submitFormColumnSampleSizeLabel: {\n id: 'app.containers.DataClassification.submitFormColumnSampleSizeLabel',\n defaultMessage: 'Column Sample Size',\n },\n submitFormColumnSampleSizeInstructions: {\n id:\n 'app.containers.DataClassification.submitFormColumnSampleSizeInstructions',\n defaultMessage:\n 'Number of values in each column that will be scanned for data to classify. Minimum = 300, Maximum = 3000',\n },\n submitFormOutputRecommend: {\n id: 'app.containers.DataClassification.submitFormOutputRecommend',\n defaultMessage: 'Recommended',\n },\n submitFormOutputFingerLabel: {\n id: 'app.containers.DataClassification.submitFormOutputFingerLabel',\n defaultMessage: 'Finger Print',\n },\n submitFormOutputFingerInstructions: {\n id: 'app.containers.DataClassification.submitFormOutputFingerInstructions',\n defaultMessage: 'in concise form with outputs per Fingerprints',\n },\n submitFormOutputDOLabel: {\n id: 'app.containers.DataClassification.submitFormOutputDOLabel',\n defaultMessage: 'Data Object',\n },\n submitFormOutputDOInstructions: {\n id: 'app.containers.DataClassification.submitFormOutputDOInstructions',\n defaultMessage:\n 'Outputs can be produced in detailed form with counts and samples of data found per DataObject',\n },\n submitFormIncludeSamplesLabel: {\n id: 'app.containers.DataClassification.submitFormIncludeSamplesLabel',\n defaultMessage: 'Include Samples',\n },\n submitFormIncludeSamplesInstructions: {\n id:\n 'app.containers.DataClassification.submitFormIncludeSamplesInstructions',\n defaultMessage:\n 'Choose whether to include samples of the data found by the classification job in results. If not selected, only counts of the classifications will be returned',\n },\n submitFormIncludeEncryptionLabel: {\n id: 'app.containers.DataClassification.submitFormIncludeEncryptionLabel',\n defaultMessage: 'Encryption',\n },\n submitFormIncludeEncryptionInstructions: {\n id:\n 'app.containers.DataClassification.submitFormIncludeEncryptionInstructions',\n defaultMessage:\n 'Choose whether the samples returned from from the job will be encrypted. You will be prompted ot enter a public key to use for encryption. When the samples are found and loaded, you can use your private key to decrypt them and view them in the browser.',\n },\n submitFormIncludeEncryptSamplesLabel: {\n id:\n 'app.containers.DataClassification.submitFormIncludeEncryptSamplesLabel',\n defaultMessage: 'Encrypted Samples',\n },\n submitFormIncludePublicKeyLabel: {\n id: 'app.containers.DataClassification.submitFormIncludePublicKeyLabel',\n defaultMessage: 'Public Key',\n },\n submitFormIncludeValidPemWarning: {\n id: 'app.containers.DataClassification.submitFormIncludeValidPemWarning',\n defaultMessage: 'Must be valid PEM format',\n },\n submitFormSubmit: {\n id: 'app.containers.DataClassification.submitFormSubmit',\n defaultMessage: 'Submit',\n },\n submitFormCancel: {\n id: 'app.containers.DataClassification.submitFormCancel',\n defaultMessage: 'Cancel',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport { getColorByTimePassed } from 'utils/sonraiUtils'\n\nclass NodeViewDetailAccessKeys extends React.PureComponent {\n styles = {\n container: {},\n title: {\n fontSize: '0.8em',\n fontWeight: '400',\n marginTop: '2px',\n },\n value: {},\n group: {\n display: 'grid',\n gridTemplateColumns: '65px auto',\n },\n }\n\n render() {\n if (this.props.value && Array.isArray(this.props.value)) {\n return (\n
    \n {this.props.value.map((value, index) => {\n const created = value.createdDate\n ? moment(value.createdDate).format('LLL')\n : '-'\n const lastUsed = value.lastUsed\n ? moment(value.lastUsed).format('LLL')\n : '-'\n\n return (\n
    \n
    Name:
    \n
    {value.name}
    \n
    Created:
    \n
    {created}
    \n
    Last Used:
    \n {lastUsed === '-' ? (\n
    {lastUsed}
    \n ) : (\n \n {lastUsed}\n
    \n )}\n
    \n )\n })}\n
    \n )\n } else {\n return
    -
    \n }\n }\n}\n\nNodeViewDetailAccessKeys.propTypes = {\n value: PropTypes.arrayOf(PropTypes.object),\n}\n\nexport default NodeViewDetailAccessKeys\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n blockStorageEncrypted: {\n id: 'app.container.NodeView.blockStorageEncrypted',\n defaultMessage: 'Encrypted',\n },\n blockStorageUnencrypted: {\n id: 'app.container.NodeView.blockStorageUnencrypted',\n defaultMessage: 'Unencrypted',\n },\n classificationsNone: {\n id: 'app.container.NodeView.classificationsNone',\n defaultMessage: 'This resource has no classifications.',\n },\n classificationFound: {\n id: 'app.container.NodeView.classificationFound',\n defaultMessage: 'Data was found with the following classifications:',\n },\n classificationsNoneFound: {\n id: 'app.container.NodeView.classificationsNoneFound',\n defaultMessage: 'No data data was found with classifiers',\n },\n classificationsConfigJob: {\n id: 'app.container.NodeView.classificationsNone',\n defaultMessage: 'Click here to configure it.',\n },\n})\n","import React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { Modal as DataClassificationModal } from 'containers/DataClassification'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\n\nimport dataClassificationMessages from 'containers/DataClassification/messages'\nimport messages from './messages'\n\nimport permissionChecker from 'containers/PermissionChecker'\nimport { isClassificationSupported } from 'containers/DataClassification/utils'\n\nexport class NodeViewDetailsClassification extends Component {\n constructor(props) {\n super(props)\n this.state = {\n modalOpen: false,\n }\n }\n\n closeModal = () => {\n this.setState({ modalOpen: false })\n }\n\n openModal = () => {\n this.setState({ modalOpen: true })\n }\n\n /**\n * Classifications look like:\n * .=\n * eg: EMAIL.sample=chafferty@eprime.com\n */\n desconstructSample = classifcation => {\n const segments = classifcation.split('=')\n const [classifier, sampleType] = segments.shift().split('.')\n const sample = segments.join('=')\n return { classifier, sampleType, sample }\n }\n\n renderBodyForEmpty = () => {\n const classificationSupported = isClassificationSupported(\n this.props.nodeData\n )\n const hasPermission = this.props.userHasPermission({\n permissionName: 'edit.dataclassificationconfig',\n swimlanes: [...this.props.nodeData.swimlaneSRNs],\n })\n return (\n \n
    \n \n
    \n {hasPermission && classificationSupported && (\n \n
    \n \n
    \n
    \n )}\n
    \n )\n }\n\n renderBodyForSamples = () => {\n if (this.props.value.length == 0) {\n return \n }\n\n /**\n * Create an object like of classifiers plus count of values found:\n * {\n * EMAIL: 2,\n * FULLNAME: 3,\n * }\n */\n const classifierCounts = this.props.value\n .map(this.desconstructSample)\n .filter(({ sampleType }) => 'count' === sampleType)\n .reduce((acc, cur) => {\n const { classifier, sample } = cur\n if (undefined === acc[classifier]) {\n acc[classifier] = 0\n }\n return { ...acc, [classifier]: acc[classifier] + Number(sample) }\n }, {})\n\n const lis = Object.keys(classifierCounts)\n .sort()\n .map(key => {\n return (\n
  • \n \n {dataClassificationMessages[`dataTableClassifierName_${key}`] ? (\n \n ) : (\n {key}\n )}\n \n ({classifierCounts[key]})\n
  • \n )\n })\n\n return (\n
    \n
      {lis}
    \n
    \n )\n }\n\n render() {\n return (\n
    \n \n {this.props.value\n ? this.renderBodyForSamples()\n : this.renderBodyForEmpty()}\n
    \n )\n }\n}\n\nNodeViewDetailsClassification.propTypes = {\n nodeData: PropTypes.object.isRequired,\n value: PropTypes.arrayOf(PropTypes.string),\n userHasPermission: PropTypes.func.isRequired,\n}\n\nexport default permissionChecker(NodeViewDetailsClassification)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport TextLink from 'components/TextLink'\nimport { getNodeViewPushParams, getNameFromSrn } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport ReactTooltip from 'react-tooltip'\nimport Hoverable from 'components/Hoverable'\nimport uuid from 'uuid/v4'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport { truncateMiddle } from 'utils/sonraiUtils'\n\nclass NodeViewSrn extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n textStyle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '30px',\n },\n }\n\n this.uuid = uuid()\n }\n\n formatSrn = value => {\n const name = truncateMiddle(\n value.name || value.friendlyName || getNameFromSrn(value.srn || value),\n this.props.start || 40,\n this.props.end || 19\n )\n if (name.length === value.srn ? value.srn.length : value.length) {\n return truncateMiddle(value.srn || value) || '-'\n }\n return name || '-'\n }\n\n render() {\n const { value } = this.props\n return (\n
    \n (\n
    \n \n \n {this.formatSrn(value)}\n \n \n {hovered ? (\n
    \n \n
    \n ) : null}\n
    \n )}\n />\n \n {value.srn || value}\n \n
    \n )\n }\n}\n\nNodeViewSrn.propTypes = {\n value: PropTypes.string,\n start: PropTypes.number,\n end: PropTypes.number,\n}\n\nexport default NodeViewSrn\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Hoverable from 'components/Hoverable'\nimport TextLink from 'components/TextLink'\nimport NodeViewMiniPopout from 'containers/NodeViewMiniPopout'\n\nimport messages from './messages'\n\nconst styles = {\n clipboardButton: {\n float: 'right',\n position: 'relative',\n top: '-8px',\n },\n encrypted: {\n color: 'black',\n },\n unencrypted: {\n color: 'red',\n },\n}\n\nexport default class NodeViewDetailBlockStorage extends Component {\n constructor(props) {\n super(props)\n this.state = {\n miniNodeViewOpen: false,\n miniNodeViewNodeId: '',\n }\n }\n\n closeMiniNodeView = () => {\n this.setState({\n miniNodeViewOpen: false,\n miniNodeViewNodeId: '',\n })\n }\n\n openMiniNodeView = nodeId => {\n this.setState({\n miniNodeViewOpen: true,\n miniNodeViewNodeId: nodeId,\n })\n }\n\n render() {\n return (\n
    \n {this.props.value.length > 0 ? (\n this.props.value.map((blockStorage, index) => (\n (\n
    \n this.openMiniNodeView(blockStorage.srn)}\n >\n {blockStorage.name}\n {' '}\n (\n {blockStorage.encryptionEnabled ? (\n \n \n \n ) : (\n \n \n \n )}\n {hovered ? (\n
    \n \n
    \n ) : (\n
    \n )}\n )\n
    \n )}\n />\n ))\n ) : (\n
    -
    \n )}\n \n
    \n )\n }\n}\n\nNodeViewDetailBlockStorage.propTypes = {\n value: PropTypes.arrayOf(PropTypes.object).isRequired,\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport Hoverable from 'components/Hoverable'\nimport TextLink from 'components/TextLink'\nimport NodeViewMiniPopout from 'containers/NodeViewMiniPopout'\n\nconst styles = {\n clipboardButton: {\n float: 'right',\n position: 'relative',\n top: '-8px',\n },\n}\n\nexport default class NodeViewDetailPublicKey extends Component {\n constructor(props) {\n super(props)\n this.state = {\n miniNodeViewOpen: false,\n miniNodeViewNodeId: '',\n }\n }\n\n closeMiniNodeView = () => {\n this.setState({\n miniNodeViewOpen: false,\n miniNodeViewNodeId: '',\n })\n }\n\n openMiniNodeView = nodeId => {\n this.setState({\n miniNodeViewOpen: true,\n miniNodeViewNodeId: nodeId,\n })\n }\n\n render() {\n return (\n
    \n {this.props.value.length > 0 ? (\n this.props.value.map((publicKey, index) => (\n (\n
    \n this.openMiniNodeView(publicKey.srn)}\n >\n {publicKey.name}\n {hovered ? (\n
    \n \n
    \n ) : (\n
    \n )}\n \n
    \n )}\n />\n ))\n ) : (\n
    -
    \n )}\n \n
    \n )\n }\n}\n\nNodeViewDetailPublicKey.propTypes = {\n value: PropTypes.arrayOf(PropTypes.object).isRequired,\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass MFADevice extends React.PureComponent {\n getColor = () => {\n if (this.props.value === 'Virtual' || this.props.value === 'Hardware') {\n return { color: this.props.theme.success }\n } else {\n return { color: this.props.theme.fail }\n }\n }\n\n render() {\n if (this.props.value === 'Loading...') {\n return
    {this.props.value}
    \n } else {\n return
    {this.props.value}
    \n }\n }\n}\n\nMFADevice.propTypes = {\n value: PropTypes.string,\n theme: themeShape,\n}\n\nexport default themeable(MFADevice)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { getPrincipalType } from 'utils/sonraiUtils'\n\nclass ServicePrincipal extends React.PureComponent {\n styles = {}\n\n render() {\n const principalString = this.props.value\n .map((principal, index) => {\n if (index < this.props.value.length - 1) {\n return `${getPrincipalType(principal.srn)} | `\n } else {\n return `${getPrincipalType(principal.srn)}`\n }\n })\n .join('')\n\n return
    {principalString}
    \n }\n}\n\nServicePrincipal.propTypes = {\n value: PropTypes.array,\n}\n\nexport default ServicePrincipal\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass ConsoleEnabled extends React.PureComponent {\n render() {\n if (this.props.value === 'Loading...') {\n return
    {this.props.value}
    \n } else {\n return (\n \n {this.props.value ? `True` : `False`}\n
    \n )\n }\n }\n}\n\nConsoleEnabled.propTypes = {\n value: PropTypes.bool,\n theme: themeShape,\n}\n\nexport default themeable(ConsoleEnabled)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport { injectIntl } from 'react-intl'\nimport Color from 'color'\nimport { Table } from 'reactstrap'\nimport qs from 'query-string'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Tooltip from 'components/Tooltip'\nimport Icon from 'components/Icon'\nimport SectionHeader from 'components/SectionHeader'\nimport NodeViewDetailString from './NodeViewDetailString'\nimport NodeViewDetailDate from './NodeViewDetailDate'\nimport NodeViewDetailBool from './NodeViewDetailBool'\nimport NodeViewDetailAccessKeys from './NodeViewDetailAccessKeys'\nimport NodeViewDetailAccount from './NodeViewDetailAccount'\nimport NodeViewDetailSrn from './NodeViewDetailSrn'\nimport NodeViewDetailCode from './NodeViewDetailCode'\nimport NodeViewDetailClassification from './NodeViewDetailsClassification'\nimport NodeViewSrn from './NodeViewSrn'\nimport NodeViewDetailInt from './NodeViewDetailInt'\nimport IconDivider from 'components/IconDivider'\nimport BorderlessButton from 'components/BorderlessButton'\nimport messages from 'globalTranslations'\nimport NodeViewDetailLabel from './NodeViewDetailLabel'\nimport NodeViewDetailMetadata from './NodeViewDetailMetadata'\nimport NodeViewDetailBlockStorage from './NodeViewDetailBlockStorage'\nimport NodeViewDetailPublicKey from './NodeViewDetailPublicKey'\nimport SwimlaneDisplay from 'components/SwimlaneDisplay'\nimport TextLink from 'components/TextLink'\nimport MFADevice from 'components/MFADevice'\nimport ServicePrincipal from 'components/ServicePrincipal'\nimport ConsoleEnabled from 'components/ConsoleEnabled'\nimport { exists } from 'utils/sonraiUtils'\nimport { getMappedBoolLabel } from 'utils/widgetUtils'\nimport { HAS_COPY } from 'appConstants'\n\nclass NodeViewDetailsSection extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n highlight: {\n backgroundColor: Color(props.theme.emphasis)\n .lighten(0.4)\n .rotate(10)\n .hex(),\n },\n detail: {\n padding: '0.5em 0',\n },\n label: {\n display: 'flex',\n },\n detailCard: {\n margin: '2.5em 0 0 0 ',\n },\n expandButton: {\n fontSize: '0.8rem',\n },\n }\n this.state = {\n expand: false,\n }\n }\n\n getFieldCount = (type, value) => {\n if (type === 'LIST') {\n if (Array.isArray(value)) {\n return `(${value.length || '-'})`\n }\n }\n return\n }\n\n getLabel = (fieldName, label, count) => {\n if (fieldName === 'sid') {\n label = 'Image ID'\n }\n\n if (fieldName === 'swimlaneSRNs') {\n label = 'Swimlanes'\n }\n\n if (count) {\n if (label !== 'Classification Set') {\n label = `${label} ${count}`\n }\n }\n const propOfInterest = this.getPropOfInterestMatches(fieldName)\n\n if (propOfInterest.length > 0) {\n return (\n
    \n {label} \n \n }\n tooltipContent={propOfInterest.map((prop, index) => (\n
    {prop.message}
    \n ))}\n />\n
    \n )\n }\n\n return label\n }\n\n toggleExpand = () => {\n this.setState(oldState => ({\n expand: !oldState.expand,\n }))\n }\n\n renderDetail = field => {\n const node = this.props.nodeData\n const propOfInterest = this.getPropOfInterestMatches(field.name)\n const value = node[field.name]\n const mappedLabel = getMappedBoolLabel(field.name, value)\n const translatedLabel = messages.fields[field.name]\n ? this.props.intl.formatMessage(messages.fields[field.name])\n : _.startCase(field.name)\n const finalLabel = mappedLabel || translatedLabel\n const type = field.type.name || field.type.kind\n const count = this.getFieldCount(type, value)\n const label = this.getLabel(field.name, finalLabel, count)\n\n return (\n 0 ? this.styles.highlight : {}),\n }}\n >\n {label}\n {mappedLabel ? null : this.renderHeaderField(field, node)}\n
    \n )\n }\n\n renderHeaderField = (field, profile) => {\n const value = profile[field.name] || field.value\n const type = field.type.name || field.type.kind\n\n return this.renderField(field.name, value, type)\n }\n\n renderField = (fieldName, value, type) => {\n if (!exists(value) && fieldName != 'classificationSet') {\n return '-'\n }\n\n const props = {\n key: `content-${fieldName}`,\n value: value,\n fieldName: fieldName,\n }\n\n if (fieldName === 'classificationSet') {\n return (\n \n )\n }\n\n if (fieldName === 'account') {\n return (\n \n )\n }\n\n if (fieldName === 'isOwnedBy') {\n const ownedBy = _.get(value, ['items', 0])\n if (ownedBy) {\n return (\n \n {ownedBy.name}\n \n )\n } else {\n return
    -
    \n }\n }\n\n if (fieldName === 'swimlaneSRNs') {\n if (type === 'LIST') {\n return (\n \n \n {value.map((val, index) => (\n \n \n \n ))}\n \n
    \n {this.renderField(fieldName, val, 'String')}\n
    \n )\n }\n return \n }\n\n if (fieldName === 'mfaDevice') {\n return \n }\n\n if (fieldName === 'consoleEnabled') {\n return \n }\n\n if (fieldName === 'metadata') {\n return (\n \n )\n }\n\n if (fieldName === 'srn' || fieldName === 'resourceId') {\n return \n }\n\n if (fieldName === 'blockStorage') {\n return \n }\n\n if (fieldName === 'publicKeys') {\n return \n }\n\n if (fieldName.startsWith('srcIP')) {\n if (Array.isArray(value)) {\n return \n } else {\n return \n }\n }\n\n if (fieldName === 'accessKeys') {\n return \n }\n\n if (fieldName === 'servicePrincipals') {\n return \n }\n\n if (Array.isArray(value) && !HAS_COPY.includes(fieldName)) {\n if (value.length <= 3) {\n return value.map((val, index) => (\n \n {this.renderField(fieldName, val, 'String')}\n {value.length > 1 && index < value.length - 1 && ', '}\n
    \n ))\n } else {\n return (\n \n \n {value.map((val, index) => (\n \n \n \n ))}\n \n
    \n {this.renderField(fieldName, val, 'String')}\n
    \n )\n }\n } else if (Array.isArray(value) && HAS_COPY.includes(fieldName)) {\n if (value.length >= 4) {\n const hide = value.slice(0, 4)\n return (\n
    \n {!this.state.expand\n ? hide.map((item, i) => )\n : value.map((item, i) => )}\n \n \n {this.state.expand ? (\n
    \n Hide\n
    \n ) : (\n
    \n Show All (\n {value.length >= 100 ? '100+' : value.length})\n
    \n )}\n \n
    \n
    \n )\n }\n return value.map((item = '', i) =>\n item.srn ? (\n \n ) : (\n \n )\n )\n }\n\n switch (type) {\n case 'String':\n if (_.isObject(value)) {\n const stringVal = value.friendlyName || value.name || value.srn || ''\n return (\n \n )\n }\n if (value && value.startsWith('srn')) {\n return \n }\n\n if (value && fieldName.startsWith('userAgent')) {\n return \n }\n\n return \n case 'Boolean':\n return \n case 'DateTime':\n return \n case 'Int':\n return \n default:\n return null\n }\n }\n\n getPropOfInterestMatches = fieldName => {\n return this.props.propsOfInterest.filter(prop => prop.field === fieldName)\n }\n\n render() {\n return (\n
    \n
    \n {this.props.title && (\n {this.props.title}\n )}\n\n {this.props.cloudLink}\n {this.props.titleActions}\n
    \n {this.props.fields.map(this.renderDetail)}\n
    \n )\n }\n}\n\nNodeViewDetailsSection.defaultProps = {\n detailStyle: {},\n propsOfInterest: [],\n style: {},\n}\n\nNodeViewDetailsSection.propTypes = {\n fields: PropTypes.array.isRequired,\n nodeData: PropTypes.object.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func,\n }),\n theme: themeShape,\n detailStyle: PropTypes.object,\n style: PropTypes.object,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n title: PropTypes.node,\n titleActions: PropTypes.node,\n cloudLink: PropTypes.string,\n}\n\nexport default injectIntl(themeable(NodeViewDetailsSection))\n","/**\n *\n * NodeViewDetails\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { injectIntl } from 'react-intl'\nimport Color from 'color'\nimport _ from 'lodash'\n\nimport {\n groupNodeViewDetails,\n exists,\n getCloudFromSrn,\n buildAzureResourceLink,\n metadataToObj,\n metdataNestedObject,\n} from 'utils/sonraiUtils'\nimport { isClassificationSupported } from 'containers/DataClassification/utils'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Icon from 'components/Icon'\nimport IconDivider from 'components/IconDivider'\nimport BorderlessButton from 'components/BorderlessButton'\nimport NodeViewDetailsSection from './NodeViewDetailsSection'\nimport TextLink from 'components/TextLink'\nimport CloudBadge from '../CloudBadge'\n\nconst SKIP_FIELDS = [\n 'cloudType',\n 'friendlyName',\n 'highestAlertSeverity',\n 'importance',\n 'lastAlertDate',\n 'sonraiConfig',\n 'tagCount',\n 'tagSet',\n 'srcId',\n 'srcIds',\n 'swimlaneCount',\n 'policyJSON',\n]\n\nclass NodeViewDetails extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n highlight: {\n backgroundColor: Color(props.theme.emphasis)\n .lighten(0.4)\n .rotate(10)\n .hex(),\n },\n expandButton: {\n fontSize: '0.8em',\n },\n horizontalWrapper: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n }\n\n this.state = {\n expand: false,\n }\n }\n\n toggleExpand = () => {\n this.setState(oldState => ({\n expand: !oldState.expand,\n }))\n }\n\n getLinkToResource = () => {\n const noneOfTheseGuys = [\n 'PolicyVersion',\n 'PolicyEntry',\n 'PermissionList',\n 'Action',\n ]\n if (\n getCloudFromSrn(this.props.nodeData.srn) === 'azure' &&\n this.props.nodeData.active &&\n !noneOfTheseGuys.includes(this.props.nodeData.label)\n ) {\n return (\n \n \n Azure Portal\n \n )\n } else {\n return null\n }\n }\n\n getAccessKeys = () => {\n const keys = []\n\n const ownedBy = this.props.nodeData.ownedBy || []\n ownedBy.forEach(item => {\n if (item.type === 'AccessKey') {\n keys.push(item)\n }\n })\n return keys\n }\n\n getPerformedOnRegions = () => {\n const regions = []\n if (\n this.props.nodeData.performedOnValue &&\n Array.isArray(this.props.nodeData.performedOnValue)\n ) {\n this.props.nodeData.performedOnValue.forEach(value => {\n if (!regions.includes(value.region)) {\n regions.push(value.region)\n }\n })\n }\n return regions\n }\n\n getActionDetails = () => {\n const performedOnRegions = this.getPerformedOnRegions()\n\n const details = []\n details.push({\n name: 'srn',\n value: this.props.nodeData.srn,\n type: {\n name: 'String',\n },\n })\n\n details.push({\n name: 'resourceId',\n value: this.props.nodeData.resourceId,\n type: {\n name: 'String',\n },\n })\n\n details.push({\n name: 'type',\n value: this.props.nodeData.type,\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'createdDate',\n value: this.props.nodeData.createdDate,\n label: 'Time of Event',\n type: {\n name: 'DateTime',\n },\n })\n details.push({\n name: 'eventName',\n value: this.props.nodeData.eventName,\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'hasActionClassificationValue',\n value: this.props.nodeData.hasActionClassificationValue,\n type: {\n name: 'Array',\n },\n })\n details.push({\n name: 'hasServiceClassificationValue',\n value: this.props.nodeData.hasServiceClassificationValue,\n type: {\n name: 'Array',\n },\n })\n details.push({\n name: 'coalescedCount',\n value: this.props.nodeData.coalescedCount,\n type: {\n name: 'Int',\n },\n })\n details.push({\n name: 'userAgent',\n value: this.props.nodeData.userAgent,\n type: {\n name: 'Int',\n },\n })\n details.push({\n name: 'srcIPs',\n value: this.props.nodeData.srcIPs,\n type: {\n name: 'Array',\n },\n })\n details.push({\n name: 'performedAtCityValues',\n value: this.props.nodeData.performedAtCityValues,\n type: {\n name: 'Array',\n },\n })\n details.push({\n name: 'performedAtCountryValues',\n value: this.props.nodeData.performedAtCountryValues,\n type: {\n name: 'Array',\n },\n })\n details.push({\n name: 'performedOnRegions',\n value: performedOnRegions,\n type: {\n name: 'Array',\n },\n })\n details.push({\n name: 'timestamp',\n value: this.props.nodeData.timestamp,\n type: {\n name: 'String',\n },\n })\n\n return details\n }\n\n getComputeDetails = () => {\n const details = []\n const metadataObject = metadataToObj(this.props.nodeData.metadata)\n const metadataNestedObject = metdataNestedObject(\n this.props.nodeData.metadata\n )\n\n details.push({\n name: 'active',\n value: this.props.nodeData.active,\n type: {\n name: 'Boolean',\n },\n })\n\n details.push({\n name: 'srn',\n value: this.props.nodeData.srn,\n type: {\n name: 'String',\n },\n })\n\n details.push({\n name: 'resourceId',\n value: this.props.nodeData.resourceId,\n type: {\n name: 'String',\n },\n })\n\n details.push({\n name: 'runState',\n value: this.props.nodeData.runState,\n type: {\n name: 'String',\n },\n })\n\n details.push({\n name: 'launchTime',\n value: this.props.nodeData.launchTime,\n type: {\n name: 'String',\n },\n })\n\n const basedOn = _.get(this.props.nodeData, [\n 'basedOn',\n 'items',\n 0,\n 'ImageName',\n ])\n details.push({\n name: 'basedOn ', // don't delete this space after basedOn very important\n value: basedOn,\n type: {\n name: 'String',\n },\n })\n\n details.push({\n name: 'instanceType',\n value: metadataObject['instance.instanceType'],\n type: {\n name: 'String',\n },\n })\n\n const networkInterfaces = _.get(\n metadataNestedObject,\n ['instance', 'networkInterfaces'],\n []\n )\n\n for (let i = 0; i < networkInterfaces.length; i++) {\n const networkInterface = networkInterfaces[i]\n details.push({\n name: 'publicDns' + i,\n value: _.get(networkInterface, ['association', 'publicDnsName']),\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'publicIp' + i,\n value: _.get(networkInterface, ['association', 'publicIp']),\n type: {\n name: 'String',\n },\n })\n }\n\n for (let i = 0; i < networkInterfaces.length; i++) {\n const networkInterface = networkInterfaces[i]\n details.push({\n name: 'privateDns' + i,\n value: _.get(networkInterface, ['privateDnsName']),\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'privateIp' + i,\n value: _.get(networkInterface, ['privateIpAddress']),\n type: {\n name: 'String',\n },\n })\n }\n\n details.push({\n name: 'architecture',\n value: this.props.nodeData.architecture,\n type: {\n name: 'String',\n },\n })\n\n details.push({\n name: 'publicKeys',\n value: this.props.nodeData.accessedWith.items,\n type: {},\n })\n\n details.push({\n name: 'blockStorage',\n value: this.props.nodeData.isAttachedToBlockStorage.items,\n type: {},\n })\n\n details.push({\n name: 'metadata',\n value: this.props.nodeData.metadata,\n type: {},\n })\n details.push({\n name: 'timestamp',\n value: this.props.nodeData.timestamp,\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'createDate',\n value: this.props.nodeData.createDate,\n type: {\n name: 'String',\n },\n })\n return details\n }\n\n getNewDetails = () => {\n const details = []\n details.push({\n name: 'active',\n value: this.props.nodeData.active,\n type: {\n name: 'Boolean',\n },\n })\n if (this.props.nodeData.user) {\n const mfa = this.props.nodeData.user.content.toJS()\n if (this.props.nodeData.user.loading) {\n details.push({\n name: 'mfaDevice',\n value: 'Loading...',\n type: {\n name: 'String',\n },\n })\n } else {\n if (mfa.hasMFADevice.items.length > 0) {\n details.push({\n name: 'mfaDevice',\n value: mfa.hasMFADevice.items[0].type,\n type: {\n name: 'String',\n },\n })\n } else {\n details.push({\n name: 'mfaDevice',\n value: 'None',\n type: {\n name: 'String',\n },\n })\n }\n }\n }\n if (this.props.nodeData.label === 'User') {\n details.push({\n name: 'consoleEnabled',\n value: this.props.nodeData.isConsoleEnabled,\n type: {\n name: 'Boolean',\n },\n })\n details.push({\n name: 'passwordLastUsed',\n value: this.props.nodeData.passwordLastUsed,\n type: {\n name: 'DateTime',\n },\n })\n details.push({\n name: 'accessKeys',\n value: this.getAccessKeys(),\n type: {\n name: 'String',\n },\n })\n } else if (this.props.nodeData.label === 'Role') {\n details.push({\n name: 'servicePrincipals',\n value: this.props.nodeData.servicePrincipals,\n type: {\n name: 'String',\n },\n })\n\n details.push({\n name: 'modifiedDate',\n value: this.props.nodeData.modifiedDate,\n type: {\n name: 'String',\n },\n })\n }\n\n details.push({\n name: 'srn',\n value: this.props.nodeData.srn,\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'resourceId',\n value: this.props.nodeData.resourceId,\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'timestamp',\n value: this.props.nodeData.timestamp,\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'createDate',\n value: this.props.nodeData.createDate,\n type: {\n name: 'String',\n },\n })\n details.push({\n name: 'metadata',\n value: this.props.nodeData.metadata,\n type: {\n name: 'String',\n },\n })\n\n return details\n }\n\n getHeaderContent = () => {\n const displayFields = this.props.fields.filter(\n field => !SKIP_FIELDS.includes(field.name)\n )\n\n const nonNullFields = displayFields.filter(field =>\n exists(this.props.nodeData[field.name])\n )\n const nullFields = displayFields.filter(\n field => !exists(this.props.nodeData[field.name])\n )\n\n const noCoalesce =\n !this.props.nodeData.coalescedCount ||\n this.props.nodeData.coalescedCount === 1\n const detailGroups = groupNodeViewDetails(nonNullFields, noCoalesce)\n if (this.props.nodeData.label === 'AccessKey') {\n detailGroups.general.push({\n args: [],\n deprecationReason: null,\n description: null,\n isDeprecated: false,\n name: 'isOwnedBy',\n type: { kind: 'SCALAR', name: 'String', ofType: null },\n })\n }\n\n if (this.props.nodeData.label === 'PolicyVersion') {\n const versionIndex = detailGroups.other.findIndex(\n item => item.name === 'version'\n )\n detailGroups.other.splice(versionIndex, 1)\n }\n\n let commonProps = {\n propsOfInterest: this.props.propsOfInterest,\n nodeData: this.props.nodeData,\n detailStyle: this.props.detailStyle,\n style: this.props.horizontal\n ? { marginTop: 0, marginRight: '2em', minWidth: '150px' }\n : undefined,\n }\n\n let details = []\n\n if (\n this.props.nodeData.label === 'User' ||\n this.props.nodeData.label === 'Role'\n ) {\n details = this.getNewDetails()\n } else if (this.props.nodeData.label === 'Action') {\n details = this.getActionDetails()\n } else if (this.props.nodeData.label === 'Compute') {\n details = this.getComputeDetails()\n }\n\n const newNodeView = details.length > 0\n\n return (\n
    \n {newNodeView\n ? this.getSingleDetailGroup(details, commonProps)\n : this.getAllGroups(detailGroups, commonProps)}\n {nullFields.length > 0 && !newNodeView && (\n
    \n \n \n {this.state.expand ? (\n \n Hide Empty Properties\n \n ) : (\n \n Show Empty Properties\n \n )}\n \n \n\n {this.state.expand && (\n \n )}\n
    \n )}\n
    \n )\n }\n\n getSingleDetailGroup = (details, commonProps) => {\n return (\n \n
    \n \n\n {this.props.additionalHeaderDetails && (\n
    {this.props.additionalHeaderDetails}
    \n )}\n
    \n
    \n )\n }\n\n getAllGroups = (detailGroups, commonProps) => {\n const dataDetails = detailGroups.data\n if (\n isClassificationSupported(this.props.nodeData) ||\n this.props.nodeData.__typename === 'Dataobject'\n ) {\n if (!dataDetails.find(detail => detail.name === 'classificationSet')) {\n if (\n this.props.nodeData.cloudType === 'aws' &&\n this.props.nodeData.type === 'Bucket'\n ) {\n dataDetails.push({\n name: 'classificationSet',\n type: { name: 'String' },\n })\n }\n if (\n this.props.nodeData.cloudType === 'azure' &&\n this.props.nodeData.type === 'Container'\n ) {\n dataDetails.push({\n name: 'classificationSet',\n type: { name: 'String' },\n })\n }\n }\n }\n\n return (\n \n
    \n \n\n {this.props.additionalHeaderDetails && (\n
    {this.props.additionalHeaderDetails}
    \n )}\n
    \n {detailGroups.location.length > 0 && (\n \n )}\n {detailGroups.action.length > 0 && (\n \n )}\n {detailGroups.compute.length > 0 && (\n \n )}\n {detailGroups.coalesced.length > 0 && (\n \n )}\n {detailGroups.data.length > 0 && (\n \n )}\n {detailGroups.other.length > 0 && (\n \n )}\n
    \n )\n }\n\n render() {\n return (\n
    \n {this.getHeaderContent()}\n
    \n )\n }\n}\n\nNodeViewDetails.defaultProps = {\n style: {},\n detailStyle: {},\n propsOfInterest: [],\n}\n\nNodeViewDetails.propTypes = {\n detailsTag: PropTypes.node,\n horizontal: PropTypes.bool,\n fields: PropTypes.array.isRequired,\n nodeData: PropTypes.object.isRequired,\n additionalHeaderDetails: PropTypes.arrayOf(PropTypes.node),\n intl: PropTypes.shape({\n formatMessage: PropTypes.func,\n }),\n style: PropTypes.object,\n theme: themeShape,\n detailStyle: PropTypes.object,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nexport default injectIntl(themeable(NodeViewDetails))\n","/*\n *\n * ThemeManager actions\n *\n */\n\nimport { LOAD_THEME, GENERATE_TYPE_COLORS, SET_TYPE_COLORS } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const loadTheme = createAction(LOAD_THEME)\nexport const generateTypeColors = createAction(GENERATE_TYPE_COLORS)\nexport const setTypeColors = createAction(SET_TYPE_COLORS)\n","/**\n *\n * NodeViewDetail\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { HAS_COPY } from 'appConstants'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport Hoverable from 'components/Hoverable'\n\nclass NodeViewDetail extends React.PureComponent {\n styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '30px',\n },\n textStyle: {\n width: '370px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n clipboardButton: {\n marginBottom: '5px',\n width: '30px',\n },\n }\n\n render() {\n const { value, fieldName } = this.props\n const hasCopy = HAS_COPY.includes(fieldName)\n\n if (hasCopy) {\n const realValue =\n typeof value === 'object'\n ? value.name || value.friendlyName || value.srn || '-'\n : value\n return (\n
    \n (\n
    \n
    {realValue}
    \n {hovered ? (\n
    \n \n
    \n ) : (\n
    \n )}\n
    \n )}\n />\n
    \n )\n }\n return
    {value || '-'}
    \n }\n}\n\nNodeViewDetail.propTypes = {\n value: PropTypes.string,\n fieldName: PropTypes.string,\n}\n\nexport default NodeViewDetail\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './styles'\nimport { exists } from 'utils/sonraiUtils'\n\nclass NodeViewDetailCode extends React.PureComponent {\n render() {\n if (Array.isArray(this.props.value)) {\n return this.props.value.map((val, index) => (\n
    \n {val}\n
    \n ))\n }\n\n return (\n
    \n {this.props.value || '-'}\n
    \n )\n }\n}\n\nNodeViewDetailCode.propTypes = {\n value: PropTypes.string,\n}\n\nexport default NodeViewDetailCode\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport hoistNonReactStatics from 'hoist-non-react-statics'\n\nimport getInjectors from './reducerInjectors'\n\n/**\n * Dynamically injects a reducer\n *\n * @param {string} key A key of the reducer\n * @param {function} reducer A reducer that will be injected\n *\n */\nexport default ({ key, reducer }) => WrappedComponent => {\n class ReducerInjector extends React.Component {\n static WrappedComponent = WrappedComponent\n static contextTypes = {\n store: PropTypes.object.isRequired,\n }\n static displayName = `withReducer(${WrappedComponent.displayName ||\n WrappedComponent.name ||\n 'Component'})`\n\n constructor(props, context) {\n super(props, context)\n const injectors = getInjectors(this.context.store)\n const { injectReducer } = injectors\n injectReducer(key, reducer)\n }\n\n render() {\n return \n }\n }\n\n return hoistNonReactStatics(ReducerInjector, WrappedComponent)\n}\n","/*\n *\n * App constants\n *\n */\n\nexport const DEFAULT_LOCALE = 'en'\n","import { isImmutable } from 'immutable'\n\nconst convertToWildcardRegex = permissionName => {\n return new RegExp(\n '^' +\n permissionName\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*') +\n '$'\n )\n}\n\nconst scopesMatchTarget = ({ target, scopes }) => {\n const scopeValues = Object.keys(scopes)\n const matchingScopeValue = scopeValues.find(scopeValue =>\n target.match(convertToWildcardRegex(scopeValue))\n )\n return matchingScopeValue != undefined\n}\n\nconst scopesMatchSwimlanes = ({ swimlanes, scopes }) => {\n for (let swimlane of swimlanes) {\n const matchFound = scopesMatchTarget({ target: swimlane, scopes })\n if (matchFound) {\n return true\n }\n }\n return false\n}\n\n/**\n * used to check whether the user has a particular paermission\n *\n * @param {String} permissionName name of permission to check\n * @param {Object} permissions permissions the user might have in format\n * returned by the sonrai-users-permissions hook i.e.\n * {\n * loading: false,\n * error: false,\n * data: {\n * [permissionName]: { scopes: {...} }\n * }\n * }\n * @param {String} resourceId the resourceId we're asking if we have permission\n * for it. Optional - if not it will just return whether the user has this\n * permission for any resource\n * @param {String} swimlanes the swimlanes to check if the thing has permission\n * for it. Opptional - if not passed it will just return whether the user has\n * this permission for any resource\n */\nexport const userHasPermission = ({\n permissionName,\n permissions,\n resourceId,\n swimlanes,\n}) => {\n // handle case where we accidently pass immutable permissions\n if (isImmutable(permissions)) {\n return userHasPermission({\n permissionName,\n resourceId,\n permissions: permissions.toJS(),\n swimlanes,\n })\n }\n\n const permissionData = permissions.data || {}\n\n const permission = Object.keys(permissionData)\n .filter(name => permissionName.match(convertToWildcardRegex(name)))\n .map(name => permissionData[name])[0]\n\n if (!permission) {\n return false\n }\n\n const { scopes } = permission\n\n if (resourceId) {\n return scopesMatchTarget({ target: resourceId, scopes })\n }\n\n if (swimlanes) {\n return scopesMatchSwimlanes({ swimlanes, scopes })\n }\n\n return true\n}\n","export const SET_TICKET_LIST_FILTER_PANEL =\n 'app/TicketListFilterPanel/SET_TICKET_LIST_FILTER_PANEL'\nexport const CLEAR_TICKET_LIST_FILTER =\n 'app/TicketListFilterPanel/CLEAR_TICKET_LIST_FILTER'\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n nodata: {\n id: 'app.containers.AccessActivity.canAssumeRoles',\n defaultMessage: 'None',\n },\n error: {\n id: 'app.containers.AccessActivity.error',\n defaultMessage: 'An error ocurred fetching data',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport { FormattedMessage } from 'react-intl'\n\nimport BorderedCard from 'components/BorderedCard'\nimport { TopTitle, CardBody } from 'components/Card'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport TextLink from 'components/TextLink'\n\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\n\nimport messages from './messages'\n\nconst styles = {\n card: {\n height: '100%',\n },\n title: {\n fontSize: '14px',\n fontWeight: '300',\n borderBottom: '1px solid #eee',\n marginRight: '0px',\n },\n body: {\n alignItems: 'start',\n paddingTop: '5px',\n height: 'calc(100% - 10px)',\n background: 'none',\n },\n list: {\n fontSize: '12px',\n width: '100%',\n },\n listItem: {\n cursor: 'pointer',\n paddingBottom: '1px',\n },\n}\n\n/**\n * this component just shows a list of links in a bordered card. The linkswill\n * navigate to the node views\n */\nexport class ListCard extends React.Component {\n handleLinkClick = item => {\n if (this.props.handleLinkClick) {\n this.props.handleLinkClick(item)\n } else {\n const { srn, label } = item\n this.props.push(getNodeViewPushParams(srn, label))\n }\n }\n\n /**\n * users could pass their own custom link text generator, otherwise just use\n * the `name` property\n */\n getLinkText = item => {\n if (this.props.getItemText) {\n return this.props.getItemText(item)\n } else {\n if (item.name) {\n return item.name\n } else if (item.srn) {\n return item.srn\n } else {\n return ''\n }\n }\n }\n\n /**\n * this renders a TextLink inside an anchor tag b/c if you left-click it open\n * a modal, but if you right click you get the link menu that says \"open in\n * new tab\"\n */\n renderListItem = (item, index) => {\n const linkParams = getNodeViewPushParams(item.srn, item.label)\n return (\n this.handleLinkClick(item)}\n key={`listCardItem_${index}`}\n >\n {\n e.preventDefault()\n }\n }\n >\n {this.getLinkText(item)}\n \n \n )\n }\n\n renderCardBody = () => {\n // show the loading spinner if fetching not complete\n if (this.props.isLoading) {\n return (\n \n \n \n )\n }\n\n // show error if error fetching data\n if (this.props.error) {\n return (\n \n \n \n )\n }\n\n // if the data is null but we made it this far in method, our properties\n // are some invalid state so log a warning and show the error\n if (!this.props.data) {\n // eslint-disable-next-line\n console.warn('ListCard component did not recieve data as props')\n return (\n \n \n \n )\n }\n\n // if no data, display \"None\"\n if (this.props.data.length === 0) {\n return (\n \n \n \n )\n }\n\n // sort the items in alphabetical order based on what the text is\n const sortedData = _.sortBy(this.props.data, item =>\n this.getLinkText(item).toUpperCase()\n )\n\n // return our list\n return
      {sortedData.map(this.renderListItem)}
    \n }\n\n render() {\n return (\n \n {this.props.title}\n {this.renderCardBody()}\n \n )\n }\n}\n\nListCard.propTypes = {\n data: PropTypes.arrayOf(PropTypes.object),\n error: PropTypes.bool,\n getItemText: PropTypes.func,\n handleLinkClick: PropTypes.func,\n isLoading: PropTypes.bool,\n push: PropTypes.func.isRequired,\n title: PropTypes.node.isRequired,\n}\n\nexport default ListCard\n","import { defineMessages } from 'react-intl'\n\nexport default {\n pluralFields: {\n ...defineMessages({\n Account: {\n id: 'app.field.plural.Account',\n defaultMessage: 'Accounts',\n },\n Accesskey: {\n id: 'app.field.plural.Accesskey',\n defaultMessage: 'Access Keys',\n },\n Action: {\n id: 'app.field.plural.Action',\n defaultMessage: 'Actions',\n },\n Actionclassification: {\n id: 'app.field.plural.Actionclassification',\n defaultMessage: 'Action Classifications',\n },\n Actiontype: {\n id: 'app.field.plural.Actiontype',\n defaultMessage: 'Action Types',\n },\n Alert: {\n id: 'app.field.plural.Alert',\n defaultMessage: 'Alerts',\n },\n Audit: {\n id: 'app.field.plural.Audit',\n defaultMessage: 'Audits',\n },\n Alias: {\n id: 'app.field.plural.Alias',\n defaultMessage: 'Aliases',\n },\n Attribute: {\n id: 'app.field.plural.Attribute',\n defaultMessage: 'Attributes',\n },\n Availabilityzone: {\n id: 'app.field.plural.Availabilityzone',\n defaultMessage: 'Availability Zones',\n },\n Blockstorage: {\n id: 'app.field.plural.Blockstorage',\n defaultMessage: 'Block Storages',\n },\n Cert: {\n id: 'app.field.plural.Cert',\n defaultMessage: 'Certs',\n },\n Cidr: {\n id: 'app.field.plural.Cidr',\n defaultMessage: 'CIDRs',\n },\n CIDR: {\n id: 'app.field.plural.CIDR',\n defaultMessage: 'CIDRs',\n },\n City: {\n id: 'app.field.plural.City',\n defaultMessage: 'Cities',\n },\n Cloud: {\n id: 'app.field.plural.Cloud',\n defaultMessage: 'Clouds',\n },\n Cluster: {\n id: 'app.field.plural.Cluster',\n defaultMessage: 'Clusters',\n },\n Clusterparametergroup: {\n id: 'app.field.plural.Clusterparametergroup',\n defaultMessage: 'Cluster Parameter Groups',\n },\n Compute: {\n id: 'app.field.plural.Compute',\n defaultMessage: 'Computes',\n },\n Data: {\n id: 'app.field.plural.Data',\n defaultMessage: 'Data',\n },\n Dataclassification: {\n id: 'app.field.plural.Dataclassification',\n defaultMessage: 'Data Classifications',\n },\n Datacontainer: {\n id: 'app.field.plural.Datacontainer',\n defaultMessage: 'Data Containers',\n },\n Dataobject: {\n id: 'app.field.plural.Dataobject',\n defaultMessage: 'Data Objects',\n },\n Datastore: {\n id: 'app.field.plural.Datastores',\n defaultMessage: 'Data Stores',\n },\n Datastoreclassification: {\n id: 'app.field.plural.Datastoreclassification',\n defaultMessage: 'Data Store Classifications',\n },\n Datastoreversion: {\n id: 'app.field.plural.Datastoreversions',\n defaultMessage: 'Data Store Versions',\n },\n Datastoretype: {\n id: 'app.field.plural.Datastoretype',\n defaultMessage: 'Data Store Types',\n },\n Encryptionkey: {\n id: 'app.field.plural.Encryptionkey',\n defaultMessage: 'Encryption Keys',\n },\n Entity: {\n id: 'app.field.plural.Entity',\n defaultMessage: 'Entities',\n },\n Eventstream: {\n id: 'app.field.plural.Eventstream',\n defaultMessage: 'Event Streams',\n },\n msg: {\n id: 'app.field.plural.msg',\n defaultMessage: 'Message',\n },\n Group: {\n id: 'app.field.plural.Group',\n defaultMessage: 'Groups',\n },\n Identity: {\n id: 'app.field.plural.Identity',\n defaultMessage: 'Identities',\n },\n Identityprovider: {\n id: 'app.field.plural.Identityprovider',\n defaultMessage: 'Identity Providers',\n },\n Image: {\n id: 'app.field.plural.Image',\n defaultMessage: 'Images',\n },\n Infrastructure: {\n id: 'app.field.plural.Infrastructure',\n defaultMessage: 'Infrastructure',\n },\n Keystore: {\n id: 'app.field.plural.Keystore',\n defaultMessage: 'Key Stores',\n },\n Location: {\n id: 'app.field.plural.Location',\n defaultMessage: 'Locations',\n },\n Mfadevice: {\n id: 'app.field.plural.Mfadevice',\n defaultMessage: 'MFA Devices',\n },\n Network: {\n id: 'app.field.plural.Network',\n defaultMessage: 'Networks',\n },\n Networkinterface: {\n id: 'app.field.plural.Networkinterface',\n defaultMessage: 'Network Interfaces',\n },\n Networkpermission: {\n id: 'app.field.plural.Networkpermission',\n defaultMessage: 'Network Permissions',\n },\n Networkpolicy: {\n id: 'app.field.plural.Networkpolicy',\n defaultMessage: 'Network Policies',\n },\n Networkservice: {\n id: 'app.field.plural.Networkservice',\n defaultMessage: 'Network Services',\n },\n Networksubnet: {\n id: 'app.field.plural.Networksubnet',\n defaultMessage: 'Network Subnets',\n },\n Networkcomponent: {\n id: 'app.field.plural.Networkcomponent',\n defaultMessage: 'Network Components',\n },\n Networkgroup: {\n id: 'app.field.plural.Networkgroup',\n defaultMessage: 'Network Groups',\n },\n Networklistener: {\n id: 'app.field.plural.Networklistener',\n defaultMessage: 'Network Listeners',\n },\n Notification: {\n id: 'app.field.plural.Notification',\n defaultMessage: 'Notifications',\n },\n Option: {\n id: 'app.field.plural.Option',\n defaultMessage: 'Options',\n },\n Optiongroup: {\n id: 'app.field.plural.Optiongroup',\n defaultMessage: 'Option Groups',\n },\n Organization: {\n id: 'app.field.plural.Organization',\n defaultMessage: 'Organizations',\n },\n Organizationalunit: {\n id: 'app.field.plural.Organizationalunit',\n defaultMessage: 'Organizational Units',\n },\n Passwordpolicy: {\n id: 'app.field.plural.Passwordpolicy',\n defaultMessage: 'Password Policies',\n },\n Parameter: {\n id: 'app.field.plural.Parameters',\n defaultMessage: 'Parameters',\n },\n Parametergroup: {\n id: 'app.field.plural.Parametergroup',\n defaultMessage: 'Parameter Groups',\n },\n Permission: {\n id: 'app.field.plural.Permission',\n defaultMessage: 'Permissions',\n },\n Permissionlist: {\n id: 'app.field.plural.Permissionlist',\n defaultMessage: 'Permission Lists',\n },\n Policy: {\n id: 'app.field.plural.Policy',\n defaultMessage: 'Policies',\n },\n Policyentry: {\n id: 'app.field.plural.Policyentry',\n defaultMessage: 'Policy Entries',\n },\n Policyversion: {\n id: 'app.field.plural.Policyversion',\n defaultMessage: 'Policy Versions',\n },\n Portrange: {\n id: 'app.field.plural.Portrange',\n defaultMessage: 'Port Ranges',\n },\n Protection: {\n id: 'app.field.plural.Protection',\n defaultMessage: 'Protections',\n },\n Protocol: {\n id: 'app.field.plural.Protocol',\n defaultMessage: 'Protocols',\n },\n Publickey: {\n id: 'app.field.plural.Publickey',\n defaultMessage: 'Public Keys',\n },\n Region: {\n id: 'app.field.plural.Region',\n defaultMessage: 'Regions',\n },\n Resource: {\n id: 'app.field.plural.Resource',\n defaultMessage: 'Resources',\n },\n Resourcegroup: {\n id: 'app.field.plural.ResourceGroup',\n defaultMessage: 'Resource Groups',\n },\n Role: {\n id: 'app.field.plural.Role',\n defaultMessage: 'Roles',\n },\n Service: {\n id: 'app.field.plural.Service',\n defaultMessage: 'Services',\n },\n Serviceclassification: {\n id: 'app.field.plural.Serviceclassification',\n defaultMessage: 'Service Classifications',\n },\n Servicetag: {\n id: 'app.field.plural.Servicetag',\n defaultMessage: 'Service Tags',\n },\n Servicetype: {\n id: 'app.field.plural.Servicetype',\n defaultMessage: 'Service Types',\n },\n ServiceType: {\n id: 'app.field.plural.ServiceType',\n defaultMessage: 'Service Types',\n },\n Servercertificate: {\n id: 'app.field.plural.Servercertificate',\n defaultMessage: 'Server Certificates',\n },\n Signingcertificate: {\n id: 'app.field.plural.Signingcertificate',\n defaultMessage: 'Signing Certificates',\n },\n Sharedaccesspolicy: {\n id: 'app.field.plural.Sharedaccesspolicy',\n defaultMessage: 'Shared Access Policies',\n },\n Snapshot: {\n id: 'app.field.plural.Snapshot',\n defaultMessage: 'Snapshots',\n },\n Storageaccount: {\n id: 'app.field.plural.Storageaccount',\n defaultMessage: 'Storage Accounts',\n },\n Subdivision: {\n id: 'app.field.plural.Subdivision',\n defaultMessage: 'Subdivisions',\n },\n Subnetgroup: {\n id: 'app.field.plural.Subnetgroup',\n defaultMessage: 'Subnet Groups',\n },\n Subscription: {\n id: 'app.field.plural.Subscription',\n defaultMessage: 'Subscriptions',\n },\n Tag: {\n id: 'app.field.plural.Tag',\n defaultMessage: 'Tags',\n },\n User: {\n id: 'app.field.plural.User',\n defaultMessage: 'Users',\n },\n }),\n },\n fields: {\n ...defineMessages({\n // plural ones\n identities: {\n id: 'app.field.Identities',\n defaultMessage: 'Identities',\n },\n swimlaneSRNs: {\n id: 'app.field.swimlaneSRNs',\n defaultMessage: 'Swimlane',\n },\n Identities: {\n id: 'app.field.Identities',\n defaultMessage: 'Identities',\n },\n attributes: {\n id: 'app.field.Attributes',\n defaultMessage: 'Attributes',\n },\n Attributes: {\n id: 'app.field.Attributes',\n defaultMessage: 'Attributes',\n },\n actionTypes: {\n id: 'app.field.ActionTypes',\n defaultMessage: 'Action Types',\n },\n ActionTypes: {\n id: 'app.field.Attributes',\n defaultMessage: 'Action Types',\n },\n permissions: {\n id: 'app.field.Permissions',\n defaultMessage: 'Permissions',\n },\n Permissions: {\n id: 'app.field.Permissions',\n defaultMessage: 'Permissions',\n },\n services: {\n id: 'app.field.Services',\n defaultMessage: 'Services',\n },\n Services: {\n id: 'app.field.Services',\n defaultMessage: 'Services',\n },\n serviceTypes: {\n id: 'app.field.ServiceTypes',\n defaultMessage: 'Service Types',\n },\n ServiceTypes: {\n id: 'app.field.ServiceTypes',\n defaultMessage: 'Service Types',\n },\n alerts: {\n id: 'app.field.Alerts',\n defaultMessage: 'Alerts',\n },\n Alerts: {\n id: 'app.field.Alerts',\n defaultMessage: 'Alerts',\n },\n actions: {\n id: 'app.field.Actions',\n defaultMessage: 'Actions',\n },\n Actions: {\n id: 'app.field.Actions',\n defaultMessage: 'Actions',\n },\n Protections: {\n id: 'app.field.Protections',\n defaultMessage: 'Protections',\n },\n identity: {\n id: 'app.field.Identity',\n defaultMessage: 'Identity',\n },\n protection: {\n id: 'app.field.Protection',\n defaultMessage: 'Protection',\n },\n aliasSet: {\n id: 'app.field.aliasSet',\n defaultMessage: 'Alias Set',\n },\n availabilityZone: {\n id: 'app.field.availabilityZone',\n defaultMessage: 'Availability Zone',\n },\n Action: {\n id: 'app.field.Action',\n defaultMessage: 'Action',\n },\n ActionType: {\n id: 'app.field.ActionType',\n defaultMessage: 'ActionType',\n },\n Attribute: {\n id: 'app.field.Attribute',\n defaultMessage: 'Attribute',\n },\n Data: {\n id: 'app.field.Data',\n defaultMessage: 'Data',\n },\n Entity: {\n id: 'app.field.Entity',\n defaultMessage: 'Entity',\n },\n Identity: {\n id: 'app.field.Identity',\n defaultMessage: 'Identity',\n },\n Infrastructure: {\n id: 'app.field.Infrastructure',\n defaultMessage: 'Infrastructure',\n },\n Permission: {\n id: 'app.field.Permission',\n defaultMessage: 'Permission',\n },\n Protection: {\n id: 'app.field.Protection',\n defaultMessage: 'Protection',\n },\n Resource: {\n id: 'app.field.Resource',\n defaultMessage: 'Resource',\n },\n Service: {\n id: 'app.field.Service',\n defaultMessage: 'Service',\n },\n ServiceType: {\n id: 'app.field.ServiceType',\n defaultMessage: 'ServiceType',\n },\n isAttachedTo: {\n id: 'app.field.isAttachedto',\n defaultMessage: 'Is Attached To',\n },\n attachedEntities: {\n id: 'app.field.attachedEntities',\n defaultMessage: 'Attached Entitites',\n },\n isMemberOf: {\n id: 'app.field.isMemberOf',\n defaultMessage: 'Is Member Of',\n },\n members: {\n id: 'app.field.members',\n defaultMessage: 'Members',\n },\n removed: {\n id: 'app.field.removed',\n defaultMessage: 'Removed',\n },\n removedBy: {\n id: 'app.field.removedBy',\n defaultMessage: 'Removed By',\n },\n created: {\n id: 'app.field.created',\n defaultMessage: 'Created',\n },\n createdBy: {\n id: 'app.field.createdBy',\n defaultMessage: 'Created By',\n },\n isOwnerOf: {\n id: 'app.field.isOwnerOf',\n defaultMessage: 'Is Owner Of',\n },\n isOwnedBy: {\n id: 'app.field.isOwnedBy',\n defaultMessage: 'Is Owned By',\n },\n createdDate: {\n id: 'app.field.createdDate',\n defaultMessage: 'Created Date',\n },\n observedDate: {\n id: 'app.field.observedDate',\n defaultMessage: 'Observed Date',\n },\n active: {\n id: 'app.field.name',\n defaultMessage: 'Active',\n },\n account: {\n id: 'app.field.name',\n defaultMessage: 'Account',\n },\n label: {\n id: 'app.field.name',\n defaultMessage: 'Label',\n },\n __typename: {\n id: 'app.field.name',\n defaultMessage: 'Type',\n },\n name: {\n id: 'app.field.name',\n defaultMessage: 'Name',\n },\n resourceid: {\n id: 'app.field.resourceid',\n defaultMessage: 'Resource ID',\n },\n type: {\n id: 'app.field.type',\n defaultMessage: 'Type',\n },\n sid: {\n id: 'app.field.sid',\n defaultMessage: 'SID',\n },\n hasPolicyEntry: {\n id: 'app.field.hasPolicyEntry',\n defaultMessage: 'Has Policy Entry',\n },\n isPartOfPolicy: {\n id: 'app.field.isPartOfPolicy',\n defaultMessage: 'Is Part of Policy',\n },\n hasPolicyVersion: {\n id: 'app.field.hasPolicyVersion',\n defaultMessage: 'Has Policy Version',\n },\n isPartOfPolicyVersion: {\n id: 'app.field.isPartOfPolicyVersion',\n defaultMessage: 'Is Part of Policy Version',\n },\n hasMember: {\n id: 'app.field.hasMember',\n defaultMessage: 'Has Member',\n },\n hasAttached: {\n id: 'app.field.hasAttached',\n defaultMessage: 'Has Attached',\n },\n contains: {\n id: 'app.field.contains',\n defaultMessage: 'Contains',\n },\n isIn: {\n id: 'app.field.isIn',\n defaultMessage: 'Is In',\n },\n hasProperty: {\n id: 'app.field.hasProperty',\n defaultMessage: 'Has Attribute',\n },\n attributesTo: {\n id: 'app.field.attributesTo',\n defaultMessage: 'Attributes To',\n },\n performedOn: {\n id: 'app.field.performedOn',\n defaultMessage: 'Performed On',\n },\n isPartOfAction: {\n id: 'app.field.sid',\n defaultMessage: 'Is Part Of Action',\n },\n performed: {\n id: 'app.field.performed',\n defaultMessage: 'Performed',\n },\n performedBy: {\n id: 'app.field.performedBy',\n defaultMessage: 'Performed By',\n },\n allows: {\n id: 'app.field.allows',\n defaultMessage: 'Allows',\n },\n isAllowedBy: {\n id: 'app.field.isAllowedBy',\n defaultMessage: 'Is Allowed By',\n },\n denies: {\n id: 'app.field.denies',\n defaultMessage: 'Denies',\n },\n isDeniedBy: {\n id: 'app.field.isDeniedBy',\n defaultMessage: 'Is Denied By',\n },\n hasActionType: {\n id: 'app.field.hasActionType',\n defaultMessage: 'Has Action Type',\n },\n hasActionClassificationValue: {\n id: 'app.field.hasActionClassificationValue',\n defaultMessage: 'Has Action Classification Value',\n },\n isPartOfPermission: {\n id: 'app.field.isPartOfPermission',\n defaultMessage: 'Is Part Of Permission',\n },\n hasServiceType: {\n id: 'app.field.hasServiceType',\n defaultMessage: 'Has Service Type',\n },\n sonraiConfig: {\n id: 'app.field.sonraiConfig',\n defaultMessage: 'Sonrai Config',\n },\n appliesToPermission: {\n id: 'app.field.appliesToPermission',\n defaultMessage: 'Applies To Permission',\n },\n appliesToResource: {\n id: 'app.field.appliesToResource',\n defaultMessage: 'Applies to Resource',\n },\n appliesTo: {\n id: 'app.field.appliesTo',\n defaultMessage: 'Applies To',\n },\n isPartOfIdentity: {\n id: 'app.field.isPartOfIdentity',\n defaultMessage: 'Is Part Of Identity',\n },\n performedAtCityValue: {\n id: 'app.field.performedAtCityValue',\n defaultMessage: 'Performed At City Value',\n },\n performedAtCityValues: {\n id: 'app.field.performedAtCityValues',\n defaultMessage: 'Performed At City Values',\n },\n performedAtCountryValue: {\n id: 'app.field.performedAtCountryValue',\n defaultMessage: 'Performed At Country Value',\n },\n performedAtCountryValues: {\n id: 'app.field.performedAtCountryValues',\n defaultMessage: 'Performed At Country Values',\n },\n performedByValue: {\n id: 'app.field.performedByValue',\n defaultMessage: 'Performed By Value',\n },\n performedByLabel: {\n id: 'app.field.performedByLabel',\n defaultMessage: 'Performed By Label',\n },\n performedOnLabel: {\n id: 'app.field.performedByLabel',\n defaultMessage: 'Performed On Label',\n },\n performedOnValue: {\n id: 'app.field.performedOnValue',\n defaultMessage: 'Performed On Value',\n },\n srcId: {\n id: 'app.field.srcId',\n defaultMessage: 'Source ID',\n },\n srcIds: {\n id: 'app.field.srcIds',\n defaultMessage: 'Source IDs',\n },\n srcIP: {\n id: 'app.field.srcIP',\n defaultMessage: 'Source IP',\n },\n srcIPs: {\n id: 'app.field.srcIPs',\n defaultMessage: 'Source IPs',\n },\n region: {\n id: 'app.field.region',\n defaultMessage: 'Region',\n },\n regions: {\n id: 'app.field.regions',\n defaultMessage: 'Regions',\n },\n country: {\n id: 'app.field.country',\n defaultMessage: 'Country',\n },\n countries: {\n id: 'app.field.countries',\n defaultMessage: 'Countries',\n },\n coalescedCount: {\n id: 'app.field.coalescedCount',\n defaultMessage: 'Coalesced Count',\n },\n userAgent: {\n id: 'app.field.userAgent',\n defaultMessage: 'User Agent',\n },\n userAgents: {\n id: 'app.field.userAgents',\n defaultMessage: 'User Agents',\n },\n cookieName: {\n id: 'app.field.cookieName',\n defaultMessage: 'Cookie Name',\n },\n isConsoleEnabled: {\n id: 'app.field.isConsoleEnabled',\n defaultMessage: 'Is Console Enabled',\n },\n cookieExpiration: {\n id: 'app.field.cookieExpiration',\n defaultMessage: 'Cookie Expiration',\n },\n dnsName: {\n id: 'app.field.dnsName',\n defaultMessage: 'DNS',\n },\n disabledSettings: {\n id: 'app.field.disabledSettings',\n defaultMessage: 'Disabled Settings',\n },\n enabledSettings: {\n id: 'app.field.enabledSettings',\n defaultMessage: 'Enabled Settings',\n },\n instanceSet: {\n id: 'app.field.instanceSet',\n defaultMessage: 'Instance Set',\n },\n ipSet: {\n id: 'app.field.ipSet',\n defaultMessage: 'IPs',\n },\n isGlobal: {\n id: 'app.field.isGlobal',\n defaultMessage: 'Is Global',\n },\n isOrganizational: {\n id: 'app.field.isOrganizational',\n defaultMessage: 'Is Organizational',\n },\n port: {\n id: 'app.field.port',\n defaultMessage: 'port',\n },\n prefix: {\n id: 'app.field.prefix',\n defaultMessage: 'Prefix',\n },\n protocol: {\n id: 'app.field.protocol',\n defaultMessage: 'Protocol',\n },\n privateIPSet: {\n id: 'app.field.privateIPSet',\n defaultMessage: 'Private IP',\n },\n privateDnsName: {\n id: 'app.field.privateDnsName',\n defaultMessage: 'Private DNS',\n },\n publicIPSet: {\n id: 'app.field.publicIPSet',\n defaultMessage: 'Public IP Set',\n },\n serverlessSet: {\n id: 'app.field.serverlessSet',\n defaultMessage: 'Serverless Set',\n },\n serviceType: {\n id: 'app.field.serviceType',\n defaultMessage: 'Service Type',\n },\n snsTopic: {\n id: 'app.field.snsTopic',\n defaultMessage: 'SNS Topic',\n },\n targetPrefix: {\n id: 'app.field.targetPrefix',\n defaultMessage: 'Target Prefix',\n },\n Entities: {\n id: 'app.components.QueryBlocksStart.Entities',\n defaultMessage: 'Entities',\n },\n Resources: {\n id: 'app.components.QueryBlocksStart.Resources',\n defaultMessage: 'Resources',\n },\n Accounts: {\n id: 'app.field.Accounts',\n defaultMessage: 'Accounts',\n },\n AccessKeys: {\n id: 'app.field.AccessKeys',\n defaultMessage: 'Access Keys',\n },\n Alias: {\n id: 'app.field.Alias',\n defaultMessage: 'Alias',\n },\n Aliases: {\n id: 'app.field.Aliases',\n defaultMessage: 'Aliases',\n },\n Audit: {\n id: 'app.field.Audit',\n defaultMessage: 'Audit',\n },\n Audits: {\n id: 'app.field.Audits',\n defaultMessage: 'Audits',\n },\n Alert: {\n id: 'app.field.Alert',\n defaultMessage: 'Alert',\n },\n BlockStorage: {\n id: 'app.field.BlockStorage',\n defaultMessage: 'Block Storage',\n },\n BlockStorages: {\n id: 'app.field.BlockStorages',\n defaultMessage: 'Block Storages',\n },\n Cert: {\n id: 'app.field.Cert',\n defaultMessage: 'Cert',\n },\n Certs: {\n id: 'app.field.Certs',\n defaultMessage: 'Certs',\n },\n CIDR: {\n id: 'app.field.CIDR',\n defaultMessage: 'CIDR',\n },\n CIDRs: {\n id: 'app.field.CIDRs',\n defaultMessage: 'CIDRs',\n },\n Cloud: {\n id: 'app.field.Cloud',\n defaultMessage: 'Cloud',\n },\n Clouds: {\n id: 'app.field.Clouds',\n defaultMessage: 'Clouds',\n },\n Cluster: {\n id: 'app.field.Cluster',\n defaultMessage: 'Cluster',\n },\n Clusters: {\n id: 'app.field.Clusters',\n defaultMessage: 'Clusters',\n },\n ClusterParameterGroup: {\n id: 'app.field.ClusterParameterGroup',\n defaultMessage: 'Cluster Parameter Group',\n },\n ClusterParameterGroups: {\n id: 'app.field.ClusterParameterGroups',\n defaultMessage: 'Cluster Parameter Groups',\n },\n Compute: {\n id: 'app.field.Compute',\n defaultMessage: 'Compute',\n },\n Computes: {\n id: 'app.field.Computes',\n defaultMessage: 'Computes',\n },\n DataContainer: {\n id: 'app.field.DataContainer',\n defaultMessage: 'Data Container',\n },\n DataContainers: {\n id: 'app.field.DataContainers',\n defaultMessage: 'Data Containers',\n },\n DataObject: {\n id: 'app.field.DataObject',\n defaultMessage: 'Data Object',\n },\n DataObjects: {\n id: 'app.field.DataObjects',\n defaultMessage: 'Data Objects',\n },\n DataStore: {\n id: 'app.field.DataStore',\n defaultMessage: 'Data Store',\n },\n DataStores: {\n id: 'app.field.DataStores',\n defaultMessage: 'Data Stores',\n },\n EncryptionKey: {\n id: 'app.field.EncryptionKey',\n defaultMessage: 'Encryption Key',\n },\n EncryptionKeys: {\n id: 'app.field.EncryptionKeys',\n defaultMessage: 'Encryption Keys',\n },\n EventStream: {\n id: 'app.field.EventStream',\n defaultMessage: 'Event Stream',\n },\n EventStreams: {\n id: 'app.field.EventStreams',\n defaultMessage: 'Event Streams',\n },\n Group: {\n id: 'app.field.Group',\n defaultMessage: 'Group',\n },\n Groups: {\n id: 'app.field.Groups',\n defaultMessage: 'Groups',\n },\n Image: {\n id: 'app.field.Image',\n defaultMessage: 'Image',\n },\n Images: {\n id: 'app.field.Images',\n defaultMessage: 'Images',\n },\n KeyStore: {\n id: 'app.field.KeyStore',\n defaultMessage: 'Key Store',\n },\n KeyStores: {\n id: 'app.field.KeyStores',\n defaultMessage: 'Key Stores',\n },\n MFADevice: {\n id: 'app.field.MFADevice',\n defaultMessage: 'MFA Device',\n },\n MFADevices: {\n id: 'app.field.MFADevices',\n defaultMessage: 'MFA Devices',\n },\n Network: {\n id: 'app.field.Network',\n defaultMessage: 'Network',\n },\n Networks: {\n id: 'app.field.Networks',\n defaultMessage: 'Networks',\n },\n NetworkInterface: {\n id: 'app.field.NetworkInterface',\n defaultMessage: 'Network Interface',\n },\n NetworkInterfaces: {\n id: 'app.field.NetworkInterfaces',\n defaultMessage: 'Network Interfaces',\n },\n NetworkPermission: {\n id: 'app.field.NetworkPermission',\n defaultMessage: 'Network Permission',\n },\n NetworkPermissions: {\n id: 'app.field.NetworkPermissions',\n defaultMessage: 'Network Permissions',\n },\n NetworkPolicy: {\n id: 'app.field.NetworkPolicy',\n defaultMessage: 'Network Policy',\n },\n NetworkPolicies: {\n id: 'app.field.NetworkPolicies',\n defaultMessage: 'Network Policies',\n },\n NetworkService: {\n id: 'app.field.NetworkService',\n defaultMessage: 'Network Service',\n },\n NetworkServices: {\n id: 'app.field.NetworkServices',\n defaultMessage: 'Network Services',\n },\n NetworkSubnet: {\n id: 'app.field.NetworkSubnet',\n defaultMessage: 'Network Subnet',\n },\n NetworkSubnets: {\n id: 'app.field.NetworkSubnets',\n defaultMessage: 'Network Subnets',\n },\n NetworkComponents: {\n id: 'app.field.NetworkComponents',\n defaultMessage: 'Network Components',\n },\n NetworkListeners: {\n id: 'app.field.NetworkListeners',\n defaultMessage: 'Network Listeners',\n },\n NetworkGroups: {\n id: 'app.field.NetworkGroups',\n defaultMessage: 'Network Groups',\n },\n Networkcomponent: {\n id: 'app.field.Networkcomponent',\n defaultMessage: 'Network Component',\n },\n Networklistener: {\n id: 'app.field.Networklistener',\n defaultMessage: 'Network Listener',\n },\n Networkgroup: {\n id: 'app.field.Networkgroup',\n defaultMessage: 'Network Group',\n },\n Option: {\n id: 'app.field.Option',\n defaultMessage: 'Option',\n },\n Options: {\n id: 'app.field.Options',\n defaultMessage: 'Options',\n },\n OptionGroup: {\n id: 'app.field.OptionGroup',\n defaultMessage: 'Option Group',\n },\n OptionGroups: {\n id: 'app.field.OptionGroups',\n defaultMessage: 'Option Groups',\n },\n Organization: {\n id: 'app.field.Organization',\n defaultMessage: 'Organization',\n },\n Organizations: {\n id: 'app.field.Organizations',\n defaultMessage: 'Organizations',\n },\n PasswordPolicy: {\n id: 'app.field.PasswordPolicy',\n defaultMessage: 'Password Policy',\n },\n PasswordPolicies: {\n id: 'app.field.PasswordPolicies',\n defaultMessage: 'Password Policies',\n },\n Parameter: {\n id: 'app.field.plural.Parameter',\n defaultMessage: 'Parameter',\n },\n Parameters: {\n id: 'app.field.Parameters',\n defaultMessage: 'Parameters',\n },\n ParameterGroup: {\n id: 'app.field.ParameterGroup',\n defaultMessage: 'Parameter Group',\n },\n ParameterGroups: {\n id: 'app.field.ParameterGroups',\n defaultMessage: 'Parameter Groups',\n },\n PermissionList: {\n id: 'app.field.PermissionList',\n defaultMessage: 'Permission List',\n },\n PermissionLists: {\n id: 'app.field.PermissionLists',\n defaultMessage: 'Permission Lists',\n },\n Policy: {\n id: 'app.field.Policy',\n defaultMessage: 'Policy',\n },\n Policies: {\n id: 'app.field.Policies',\n defaultMessage: 'Policies',\n },\n PolicyEntry: {\n id: 'app.field.PolicyEntry',\n defaultMessage: 'Policy Entry',\n },\n PolicyEntries: {\n id: 'app.field.PolicyEntries',\n defaultMessage: 'Policy Entries',\n },\n PolicyVersion: {\n id: 'app.field.PolicyVersion',\n defaultMessage: 'Policy Version',\n },\n PolicyVersions: {\n id: 'app.field.PolicyVersions',\n defaultMessage: 'Policy Versions',\n },\n PortRange: {\n id: 'app.field.PortRange',\n defaultMessage: 'Port Range',\n },\n PortRanges: {\n id: 'app.field.PortRanges',\n defaultMessage: 'Port Ranges',\n },\n Protocol: {\n id: 'app.field.Protocol',\n defaultMessage: 'Protocol',\n },\n Protocols: {\n id: 'app.field.Protocols',\n defaultMessage: 'Protocols',\n },\n PublicKey: {\n id: 'app.field.PublicKey',\n defaultMessage: 'Public Key',\n },\n PublicKeys: {\n id: 'app.field.PublicKeys',\n defaultMessage: 'Public Keys',\n },\n ResourceGroup: {\n id: 'app.field.ResourceGroup',\n defaultMessage: 'Resource Group',\n },\n ResourceGroups: {\n id: 'app.field.ResourceGroups',\n defaultMessage: 'Resource Groups',\n },\n Role: {\n id: 'app.field.Role',\n defaultMessage: 'Role',\n },\n Roles: {\n id: 'app.field.Roles',\n defaultMessage: 'Roles',\n },\n ServiceTag: {\n id: 'app.field.ServiceTag',\n defaultMessage: 'Service Tag',\n },\n ServiceTags: {\n id: 'app.field.ServiceTags',\n defaultMessage: 'Service Tags',\n },\n ServerCertificate: {\n id: 'app.field.ServerCertificate',\n defaultMessage: 'Server Certificate',\n },\n ServerCertificates: {\n id: 'app.field.ServerCertificates',\n defaultMessage: 'Server Certificates',\n },\n SigningCertificate: {\n id: 'app.field.SigningCertificate',\n defaultMessage: 'Signing Certificate',\n },\n SigningCertificates: {\n id: 'app.field.SigningCertificates',\n defaultMessage: 'Signing Certificates',\n },\n SharedAccessPolicy: {\n id: 'app.field.SharedAccessPolicy',\n defaultMessage: 'Shared Access Policy',\n },\n SharedAccessPolicies: {\n id: 'app.field.SharedAccessPolicies',\n defaultMessage: 'Shared Access Policies',\n },\n Snapshot: {\n id: 'app.field.Snapshot',\n defaultMessage: 'Snapshot',\n },\n Snapshots: {\n id: 'app.field.Snapshots',\n defaultMessage: 'Snapshots',\n },\n SubnetGroup: {\n id: 'app.field.SubnetGroup',\n defaultMessage: 'Subnet Group',\n },\n SubnetGroups: {\n id: 'app.field.SubnetGroups',\n defaultMessage: 'Subnet Groups',\n },\n actionClassification: {\n id: 'app.global.field.actionClassification',\n defaultMessage: 'Action Classification',\n },\n activityCount: {\n id: 'app.global.field.activityCount',\n defaultMessage: 'Count',\n },\n allowUsersToChangePassword: {\n id: 'app.global.field.allowUsersToChangePassword',\n defaultMessage: 'Allow Users To Change Password',\n },\n Subscription: {\n id: 'app.field.Subscription',\n defaultMessage: 'Subscription',\n },\n encryption: {\n id: 'app.global.field.encryption',\n defaultMessage: 'Encryption Type',\n },\n Subscriptions: {\n id: 'app.field.Subscriptions',\n defaultMessage: 'Subscriptions',\n },\n cidrBlock: {\n id: 'app.global.field.cidrBlock',\n defaultMessage: 'CIDR',\n },\n User: {\n id: 'app.field.User',\n defaultMessage: 'User',\n },\n Users: {\n id: 'app.field.Users',\n defaultMessage: 'Users',\n },\n auditsTo: {\n id: 'app.global.relations.auditsTo',\n defaultMessage: 'Audits To',\n },\n notAuditsTo: {\n id: 'app.global.relations.notAuditsTo',\n defaultMessage: 'Does Not Audit To',\n },\n receivesAuditFrom: {\n id: 'app.global.relations.receivesAuditFrom',\n defaultMessage: 'Receives Audit From',\n },\n notReceivesAuditFrom: {\n id: 'app.global.relations.notReceivesAuditFrom',\n defaultMessage: 'Does Not Receive Audit From',\n },\n accessedBy: {\n id: 'app.global.relations.accessedBy',\n defaultMessage: 'Accessed By',\n },\n notAccessedBy: {\n id: 'app.global.relations.notAccessedBy',\n defaultMessage: 'Not Accessed By',\n },\n isRegisteredWith: {\n id: 'app.global.relations.isRegisteredWith',\n defaultMessage: 'Is Registered With',\n },\n notIsRegisteredWith: {\n id: 'app.global.relations.notIsRegisteredWith',\n defaultMessage: 'Is Not Registered With',\n },\n hasRegisteredNetworkGroup: {\n id: 'app.global.relations.hasRegisteredNetworkGroup',\n defaultMessage: 'Has Registered Network Group',\n },\n notHasRegisteredNetworkGroup: {\n id: 'app.global.relations.notHasRegisteredNetworkGroup',\n defaultMessage: 'Does Not Have Registered Network Group',\n },\n serves: {\n id: 'app.global.relations.serves',\n defaultMessage: 'Serves',\n },\n notServes: {\n id: 'app.global.relations.notServes',\n defaultMessage: 'Does Not Serve',\n },\n isServedBy: {\n id: 'app.global.relations.isServedBy',\n defaultMessage: 'Is Served By',\n },\n notIsServedBy: {\n id: 'app.global.relations.notIsServedBy',\n defaultMessage: 'Is Not Served By',\n },\n\n canBeAccessedBy: {\n id: 'app.global.relations.canBeAccessedBy',\n defaultMessage: 'Can Be Accessed By',\n },\n notCanBeAccessedBy: {\n id: 'app.global.relations.notCanBeAccessedBy',\n defaultMessage: 'Can Not Be Accessed By',\n },\n manages: {\n id: 'app.global.relations.manages',\n defaultMessage: 'Manages',\n },\n hasTag: {\n id: 'app.global.relations.hasTag',\n defaultMessage: 'Has Tag',\n },\n hasAlias: {\n id: 'app.global.relations.hasAlias',\n defaultMessage: 'Has Alias',\n },\n notHasAlias: {\n id: 'app.global.relations.notHasAlias',\n defaultMessage: 'Does Not Have Alias',\n },\n isAliasOf: {\n id: 'app.global.relations.isAliasOf',\n defaultMessage: 'Is Alias Of',\n },\n notIsAliasOf: {\n id: 'app.global.relations.notIsAliasOf',\n defaultMessage: 'Is Not Alias Of',\n },\n hasAudit: {\n id: 'app.global.relations.hasAudit',\n defaultMessage: 'Has Audit',\n },\n notHasAudit: {\n id: 'app.global.relations.notHasAudit',\n defaultMessage: 'Does Not Have Audit',\n },\n isClassificationOfAudit: {\n id: 'app.global.relations.isClassificationOfAudit',\n defaultMessage: 'Is Classification Of Audit',\n },\n notIsClassificationOfAudit: {\n id: 'app.global.relations.notIsClassificationOfAudit',\n defaultMessage: 'Is Not Classification Of Audit',\n },\n audits: {\n id: 'app.global.relations.audits',\n defaultMessage: 'Audits',\n },\n notAudits: {\n id: 'app.global.relations.notAudits',\n defaultMessage: 'Does Not Audit',\n },\n isAttachedToSubnet: {\n id: 'app.global.relations.isAttachedToSubnet',\n defaultMessage: 'Is Attached To Subnet',\n },\n isAttachedToInterface: {\n id: 'app.global.relations.isAttachedToInterface',\n defaultMessage: 'Is Attached To Interface',\n },\n includedInPolicy: {\n id: 'app.global.relations.includedInPolicy',\n defaultMessage: 'Included In Policy',\n },\n references: {\n id: 'app.global.relations.references',\n defaultMessage: 'References',\n },\n hasSnapshot: {\n id: 'app.global.relations.hasSnapshot',\n defaultMessage: 'Has Snapshot',\n },\n isAttachedToBlockStorage: {\n id: 'app.global.relations.isAttachedToBlockStorage',\n defaultMessage: 'Is Attached To Block Storage',\n },\n basedOn: {\n id: 'app.global.relations.basedOn',\n defaultMessage: 'Based On',\n },\n isDefinedBy: {\n id: 'app.global.relations.isDefinedBy',\n defaultMessage: 'Is Defined By',\n },\n hasClassification: {\n id: 'app.global.relations.hasClassification',\n defaultMessage: 'Has Classification',\n },\n isAttachedToNetwork: {\n id: 'app.global.relations.isAttachedToNetwork',\n defaultMessage: 'Is Attached To Network',\n },\n includedInNetwork: {\n id: 'app.global.relations.includedInNetwork',\n defaultMessage: 'Included In Network',\n },\n isPartOf: {\n id: 'app.global.relations.isPartOf',\n defaultMessage: 'Is Part Of',\n },\n isPartOfPolicyEntry: {\n id: 'app.field.isPartOfPolicyEntry',\n defaultMessage: 'Is Part of Policy Entry',\n },\n hasPermission: {\n id: 'app.global.relations.hasPermission',\n defaultMessage: 'Has Permission',\n },\n hasAccessToData: {\n id: 'app.global.relations.hasAccessToData',\n defaultMessage: 'Has Access To Data',\n },\n hasAttachedNetworkComponent: {\n id: 'app.global.relations.hasAttachedNetworkComponent',\n defaultMessage: 'Has Attached Network Component',\n },\n notHasAttachedNetworkComponent: {\n id: 'app.global.relations.notHasAttachedNetworkComponent',\n defaultMessage: 'Does Not Have Attached Network Component',\n },\n isAttachedToNetworkComponent: {\n id: 'app.global.relations.isAttachedToNetworkComponent',\n defaultMessage: 'Is Attached To Network Component',\n },\n notIsAttachedToNetworkComponent: {\n id: 'app.global.relations.notIsAttachedToNetworkComponent',\n defaultMessage: 'Is Not Attached To Network Component',\n },\n hasAttachedNetworkPolicy: {\n id: 'app.global.relations.hasAttachedNetworkPolicy',\n defaultMessage: 'Has Attached Network Policy',\n },\n notHasAttachedNetworkPolicy: {\n id: 'app.global.relations.notHasAttachedNetworkPolicy',\n defaultMessage: 'Does Not Have Attached Network Policy',\n },\n hasAttachedNetworkGroup: {\n id: 'app.global.relations.hasAttachedNetworkGroup',\n defaultMessage: 'Has Attached Network Group',\n },\n notHasAttachedNetworkGroup: {\n id: 'app.global.relations.notHasAttachedNetworkGroup',\n defaultMessage: 'Does Not Have Attached Network Group',\n },\n canBeAssumedBy: {\n id: 'app.global.relations.canBeAssumedBy',\n defaultMessage: 'Can Be Assumed By',\n },\n notCanBeAssumedBy: {\n id: 'app.global.relations.notCanBeAssumedBy',\n defaultMessage: 'Can Not Be Assumed By',\n },\n isAllowedByDestination: {\n id: 'app.global.relations.isAllowedByDestination',\n defaultMessage: 'Is Allowed By Destination',\n },\n notIsAllowedByDestination: {\n id: 'app.global.relations.notIsAllowedByDestination',\n defaultMessage: 'Is Not Allowed By Destination',\n },\n isAllowedBySource: {\n id: 'app.global.relations.isAllowedBySource',\n defaultMessage: 'Is Allowed By Source',\n },\n notIsAllowedBySource: {\n id: 'app.global.relations.notIsAllowedBySource',\n defaultMessage: 'Is Not Allowed By Source',\n },\n isDeniedBySource: {\n id: 'app.global.relations.isDeniedBySource',\n defaultMessage: 'Is Denied By Source',\n },\n notIsDeniedBySource: {\n id: 'app.global.relations.notIsDeniedBySource',\n defaultMessage: 'Is Not Denied By Source',\n },\n isDeniedByDestination: {\n id: 'app.global.relations.isDeniedByDestination',\n defaultMessage: 'Is Denied By Destination',\n },\n notIsDeniedByDestination: {\n id: 'app.global.relations.notIsDeniedByDestination',\n defaultMessage: 'Is Not Denied By Destination',\n },\n isSnapshotOfBlockStorage: {\n id: 'app.global.relations.isSnapshotOfBlockStorage',\n defaultMessage: 'Is Snapshot Of Block Storage',\n },\n notIsSnapshotOfBlockStorage: {\n id: 'app.global.relations.notIsSnapshotOfBlockStorage',\n defaultMessage: 'Is Not Snapshot Of Block Storage',\n },\n isSnapshotOfCluster: {\n id: 'app.global.relations.isSnapshotOfCluster',\n defaultMessage: 'Is Snapshot Of Cluster',\n },\n notIsSnapshotOfCluster: {\n id: 'app.global.relations.notIsSnapshotOfCluster',\n defaultMessage: 'Is Not Snapshot Of Cluster',\n },\n isSnapshotOfCompute: {\n id: 'app.global.relations.isSnapshotOfCompute',\n defaultMessage: 'Is Snapshot Of Compute',\n },\n notIsSnapshotOfCompute: {\n id: 'app.global.relations.notIsSnapshotOfCompute',\n defaultMessage: 'Is Not Snapshot Of Compute',\n },\n serviceIsIn: {\n id: 'app.global.relations.serviceIsIn',\n defaultMessage: 'Service Is In',\n },\n notServiceIsIn: {\n id: 'app.global.relations.notServiceIsIn',\n defaultMessage: 'Service Is Not In',\n },\n isUsedBy: {\n id: 'app.global.relations.isUsedBy',\n defaultMessage: 'Is Used By',\n },\n notIsUsedBy: {\n id: 'app.global.relations.notIsUsedBy',\n defaultMessage: 'Is Not Used By',\n },\n hasBlockStorage: {\n id: 'app.global.relations.hasBlockStorage',\n defaultMessage: 'Has Block Storage',\n },\n notHasBlockStorage: {\n id: 'app.global.relations.notHasBlockStorage',\n defaultMessage: 'Does Not Have Block Storage',\n },\n hasAttachedClusterParameterGroup: {\n id: 'app.global.relations.hasAttachedClusterParameterGroup',\n defaultMessage: 'Has Attached Cluster Parameter Group',\n },\n notHasAttachedClusterParameterGroup: {\n id: 'app.global.relations.notHasAttachedClusterParameterGroup',\n defaultMessage: 'Does Not Have Attached Cluster Parameter Group',\n },\n containsDataStore: {\n id: 'app.global.relations.containsDataStore',\n defaultMessage: 'Contains Data Store',\n },\n notContainsDataStore: {\n id: 'app.global.relations.notContainsDataStore',\n defaultMessage: 'Does Not Contain Data Store',\n },\n hasAttachedParameterGroup: {\n id: 'app.global.relations.hasAttachedParameterGroup',\n defaultMessage: 'Has Attached Parameter Group',\n },\n notHasAttachedParameterGroup: {\n id: 'app.global.relations.notHasAttachedParameterGroup',\n defaultMessage: 'Does Not Have Attached Parameter Group',\n },\n hasAttachedSubnetGroup: {\n id: 'app.global.relations.hasAttachedSubnetroup',\n defaultMessage: 'Has Attached Subnet Group',\n },\n notHasAttachedSubnetGroup: {\n id: 'app.global.relations.notHasAttachedSubnetGroup',\n defaultMessage: 'Does Not Have Attached Subnet Group',\n },\n hasAttachedOptionGroup: {\n id: 'app.global.relations.hasAttachedOptionGroup',\n defaultMessage: 'Has Attached Option Group',\n },\n notHasAttachedOptionGroup: {\n id: 'app.global.relations.notHasAttachedOptionGroup',\n defaultMessage: 'Does Not Have Attached Option Group',\n },\n assumedBy: {\n id: 'app.global.relations.assumedBy',\n defaultMessage: 'Assumed By',\n },\n notAssumedBy: {\n id: 'app.global.relations.notAssumedBy',\n defaultMessage: 'Not Assumed By',\n },\n hasAttachedPasswordPolicy: {\n id: 'app.global.relations.hasAttachedPasswordPolicy',\n defaultMessage: 'Has Attached Password Policy',\n },\n notHasAttachedPasswordPolicy: {\n id: 'app.global.relations.notHasAttachedPasswordPolicy',\n defaultMessage: 'Does Not Have Attached Password Policy',\n },\n hasAttachedAccessPolicy: {\n id: 'app.global.relations.hasAttachedAccessPolicy',\n defaultMessage: 'Has Attached Access Policy',\n },\n notHasAttachedAccessPolicy: {\n id: 'app.global.relations.notHasAttachedAccessPolicy',\n defaultMessage: 'Does Not Have Attached Access Policy',\n },\n hasAttachedSharedAccessPolicy: {\n id: 'app.global.relations.hasAttachedSharedAccessPolicy',\n defaultMessage: 'Has Attached Shared Access Policy',\n },\n notHasAttachedSharedAccessPolicy: {\n id: 'app.global.relations.notHasAttachedSharedAccessPolicy',\n defaultMessage: 'Does Not Have Attached Shared Access Policy',\n },\n isProtectedBy: {\n id: 'app.global.relations.isProtectedBy',\n defaultMessage: 'Is Protected By',\n },\n notIsProtectedBy: {\n id: 'app.global.relations.notIsProtectedBy',\n defaultMessage: 'Is Not Protected By',\n },\n baseOf: {\n id: 'app.global.relations.baseOf',\n defaultMessage: 'Base Of',\n },\n notBaseOf: {\n id: 'app.global.relations.notBaseOf',\n defaultMessage: 'Not Base Of',\n },\n hasAttachedCompute: {\n id: 'app.global.relations.hasAttachedCompute',\n defaultMessage: 'Has Attached Compute',\n },\n notHasAttachedCompute: {\n id: 'app.global.relations.notHasAttachedCompute',\n defaultMessage: 'Does Not Have Attached Compute',\n },\n hasRouteTable: {\n id: 'app.global.relations.hasRouteTable',\n defaultMessage: 'Has Route Table',\n },\n notHasRouteTable: {\n id: 'app.global.relations.notHasRouteTable',\n defaultMessage: 'Does Not Have Route Table',\n },\n includes: {\n id: 'app.global.relations.includes',\n defaultMessage: 'Includes',\n },\n notIncludes: {\n id: 'app.global.relations.notIncludes',\n defaultMessage: 'Does Not Include',\n },\n hasSubnet: {\n id: 'app.global.relations.hasSubnet',\n defaultMessage: 'Has Subnet',\n },\n notHasSubnet: {\n id: 'app.global.relations.notHasSubnet',\n defaultMessage: 'Does Not Have Subnet',\n },\n includesCompute: {\n id: 'app.global.relations.includesCompute',\n defaultMessage: 'Includes Compute',\n },\n notIncludesCompute: {\n id: 'app.global.relations.notIncludesCompute',\n defaultMessage: 'Does Not Include Compute',\n },\n includesInterface: {\n id: 'app.global.relations.includesInterface',\n defaultMessage: 'Includes Interface',\n },\n hasAttachedInterface: {\n id: 'app.global.relations.hasAttachedInterface',\n defaultMessage: 'Has Attached Interface',\n },\n notHasAttachedInterface: {\n id: 'app.global.relations.notHasAttachedInterface',\n defaultMessage: 'Does Not Have Attached Interface',\n },\n hasAttachedStorage: {\n id: 'app.global.relations.hasAttachedStorage',\n defaultMessage: 'Has Attached Storage',\n },\n notHasAttachedStorage: {\n id: 'app.global.relations.notHasAttachedStorage',\n defaultMessage: 'Does Not Have Attached Storage',\n },\n isPeeredWith: {\n id: 'app.global.relations.isPeeredWith',\n defaultMessage: 'Is Peered With',\n },\n notIsPeeredWith: {\n id: 'app.global.relations.notIsPeeredWith',\n defaultMessage: 'Is Not Peered With',\n },\n notIncludesInterface: {\n id: 'app.global.relations.notIncludesInterface',\n defaultMessage: 'Does Not Include Interface',\n },\n egressProtectedBy: {\n id: 'app.global.relations.egressProtectedBy',\n defaultMessage: 'Egress Protected By',\n },\n notEgressProtectedBy: {\n id: 'app.global.relations.notEgressProtectedBy',\n defaultMessage: 'Egress Not Protected By',\n },\n ingressProtectedBy: {\n id: 'app.global.relations.ingressProtectedBy',\n defaultMessage: 'Ingess Protected By',\n },\n notIngressProtectedBy: {\n id: 'app.global.relations.notIngressProtectedBy',\n defaultMessage: 'Ingress Not Protected By',\n },\n organizes: {\n id: 'app.global.relations.organizes',\n defaultMessage: 'Organizes',\n },\n actionIsIn: {\n id: 'app.global.relations.actionIsIn',\n defaultMessage: 'Action Is In',\n },\n notActionIsIn: {\n id: 'app.global.relations.notActionIsIn',\n defaultMessage: 'Action Is Not In',\n },\n organizedBy: {\n id: 'app.global.relations.organizedBy',\n defaultMessage: 'Organized By',\n },\n accessedProtection: {\n id: 'app.global.relations.accessedProtection',\n defaultMessage: 'Accessed Protection',\n },\n hasAccessToNetworkPolicy: {\n id: 'app.global.relations.hasAccessToNetworkPolicy',\n defaultMessage: 'Has Access To Network Policy',\n },\n hasAccessToCompute: {\n id: 'app.global.relations.hasAccessToCompute',\n defaultMessage: 'Has Access To Compute',\n },\n accessedCompute: {\n id: 'app.global.relations.accessedCompute',\n defaultMessage: 'Accessed Compute',\n },\n accessedIdentity: {\n id: 'app.global.relations.accessedIdentity',\n defaultMessage: 'Accessed Identity',\n },\n hasAccessToIdentity: {\n id: 'app.global.relations.hasAccessToIdentity',\n defaultMessage: 'Has Access To Identity',\n },\n accessedNetworkPolicy: {\n id: 'app.global.relations.accessedNetworkPolicy',\n defaultMessage: 'Accessed Network Policy',\n },\n hasPrincipal: {\n id: 'app.global.relations.hasPrincipal',\n defaultMessage: 'Has Principal',\n },\n hasAccessToProtection: {\n id: 'app.global.relations.hasAccessToProtection',\n defaultMessage: 'Has Access To Protection',\n },\n accessedData: {\n id: 'app.global.relations.accessedData',\n defaultMessage: 'Accessed Data',\n },\n usesPortrange: {\n id: 'app.global.relations.usesPortrange',\n defaultMessage: 'Uses Portrange',\n },\n\n usesProtocol: {\n id: 'app.global.relations.usesProtocol',\n defaultMessage: 'Uses Protocol',\n },\n allowsServiceTagDestination: {\n id: 'app.global.relations.allowsServiceTagDestination',\n defaultMessage: 'Allows Service Tag Destination',\n },\n deniesServiceTagSource: {\n id: 'app.global.relations.deniesServiceTagSource',\n defaultMessage: 'Denies Service Tag Source',\n },\n allowsPortRangeSource: {\n id: 'app.global.relations.allowsPortRangeSource',\n defaultMessage: 'Allows Port Range Source',\n },\n deniesServiceTagDestination: {\n id: 'app.global.relations.deniesServiceTagDestination',\n defaultMessage: 'Denies Service Tag Destination',\n },\n deniesPortRangeDestination: {\n id: 'app.global.relations.deniesPortRangeDestination',\n defaultMessage: 'Denies Port Range Destination',\n },\n allowsPolicyDestination: {\n id: 'app.global.relations.allowsPolicyDestination',\n defaultMessage: 'Allows Policy Destination',\n },\n allowsServiceTagSource: {\n id: 'app.global.relations.allowsServiceTagSource',\n defaultMessage: 'Allows Service Tag Source',\n },\n deniesPolicySource: {\n id: 'app.global.relations.deniesPolicySource',\n defaultMessage: 'Denies Policy Source',\n },\n deniesPortRangeSource: {\n id: 'app.global.relations.deniesPortRangeSource',\n defaultMessage: 'Denies Port Range Source',\n },\n protectsIngress: {\n id: 'app.global.relations.protectsIngress',\n defaultMessage: 'Protects Ingress',\n },\n allowsPolicySource: {\n id: 'app.global.relations.allowsPolicySource',\n defaultMessage: 'Allows Policy Source',\n },\n allowsPortRangeDestination: {\n id: 'app.global.relations.allowsPortRangeDestination',\n defaultMessage: 'Allows Port Range Destination',\n },\n deniesCIDRDestination: {\n id: 'app.global.relations.deniesCIDRDestination',\n defaultMessage: 'Denies CIDR Destination',\n },\n deniesProtocol: {\n id: 'app.global.relations.deniesProtocol',\n defaultMessage: 'Denies Protocol',\n },\n deniesCIDRSource: {\n id: 'app.global.relations.deniesCIDRSource',\n defaultMessage: 'Denies CIDR Source',\n },\n allowsProtocol: {\n id: 'app.global.relations.allowsProtocol',\n defaultMessage: 'Allows Protocol',\n },\n allowsCIDRDestination: {\n id: 'app.global.relations.allowsCIDRDestination',\n defaultMessage: 'Allows CIDR Destination',\n },\n protectsEgress: {\n id: 'app.global.relations.protectsEgress',\n defaultMessage: 'Protects Egress',\n },\n allowsCIDRSource: {\n id: 'app.global.relations.allowsCIDRSource',\n defaultMessage: 'Allows CIDR Source',\n },\n deniesPolicyDestination: {\n id: 'app.global.relations.deniesPolicyDestination',\n defaultMessage: 'Denies Policy Destination',\n },\n has: {\n id: 'app.global.relations.has',\n defaultMessage: 'Has',\n },\n hasDataStoreVersion: {\n id: 'app.global.relations.hasDataStoreVersion',\n defaultMessage: 'Has Data Store Version',\n },\n isInCountry: {\n id: 'app.global.relations.isInCountry',\n defaultMessage: 'Is In Country',\n },\n performedIn: {\n id: 'app.global.relations.performedIn',\n defaultMessage: 'Performed In',\n },\n containsCloudAccount: {\n id: 'app.global.relations.containsCloudAccount',\n defaultMessage: 'Contains Cloud Account',\n },\n scansAccount: {\n id: 'app.global.relations.scansAccount',\n defaultMessage: 'Scans Account',\n },\n containsAccount: {\n id: 'app.global.relations.containsAccount',\n defaultMessage: 'Contains Account',\n },\n variables: {\n id: 'app.global.relations.variables',\n defaultMessage: 'Variables',\n },\n isInAvailabilityZone: {\n id: 'app.global.relations.isInAvailabilityZone',\n defaultMessage: 'Is In Availability Zone',\n },\n isInRegion: {\n id: 'app.global.relations.isInRegion',\n defaultMessage: 'Is In Region',\n },\n isRegionOfMultiRegion: {\n id: 'app.global.relations.isRegionOfMultiRegion',\n defaultMessage: 'Is Region of Multi Region',\n },\n notIsRegionOfMultiRegion: {\n id: 'app.global.relations.notIsRegionOfMultiRegion',\n defaultMessage: 'Is Not Region of Multi Region',\n },\n hasDataType: {\n id: 'app.global.relations.hasDataType',\n defaultMessage: 'Has Data Type',\n },\n hasDataStoreType: {\n id: 'app.global.relations.hasDataStoreType',\n defaultMessage: 'Has Data Store Type',\n },\n isInSubdivision: {\n id: 'app.global.relations.isInSubdivision',\n defaultMessage: 'Is In Subdivision',\n },\n containsIdentity: {\n id: 'app.global.relations.containsIdentity',\n defaultMessage: 'Contains Identity',\n },\n ownsContent: {\n id: 'app.global.relations.ownsContent',\n defaultMessage: 'Owns Content',\n },\n accessedWith: {\n id: 'app.global.relations.accessedWith',\n defaultMessage: 'Accessed With',\n },\n hasPermissionList: {\n id: 'app.global.relations.hasPermissionList',\n defaultMessage: 'Has Permission List',\n },\n protects: {\n id: 'app.global.relations.protects',\n defaultMessage: 'Protects',\n },\n assumedRole: {\n id: 'app.global.relations.assumedRole',\n defaultMessage: 'Assumed Role',\n },\n isInCity: {\n id: 'app.global.relations.isInCity',\n defaultMessage: 'Is In City',\n },\n canAssume: {\n id: 'app.global.relations.canAssume',\n defaultMessage: 'Can Assume',\n },\n runsOn: {\n id: 'app.global.relations.runsOn',\n defaultMessage: 'Runs On',\n },\n cloneOf: {\n id: 'app.global.relations.cloneOf',\n defaultMessage: 'Clone Of',\n },\n isAttachedToAccessPolicy: {\n id: 'app.global.relations.isAttachedToAccessPolicy',\n defaultMessage: 'Is Attached To Access Policy',\n },\n performedAt: {\n id: 'app.global.relations.performedAt',\n defaultMessage: 'Performed At',\n },\n hasMFADevice: {\n id: 'app.global.relations.hasMFADevice',\n defaultMessage: 'Has MFA Device',\n },\n containsServiceType: {\n id: 'app.global.relations.containsServiceType',\n defaultMessage: 'Contains Service Type',\n },\n containsActionType: {\n id: 'app.global.relations.containsActionType',\n defaultMessage: 'Contains Action Type',\n },\n notIsAttachedTo: {\n id: 'app.global.relations.notIsAttachedTo',\n defaultMessage: 'Is Not Attached To',\n },\n notManages: {\n id: 'app.global.relations.notManages',\n defaultMessage: 'Does Not Manage',\n },\n notHasTag: {\n id: 'app.global.relations.notHasTag',\n defaultMessage: 'Does Not Have Tag',\n },\n notIsAttachedToSubnet: {\n id: 'app.global.relations.notIsAttachedToSubnet',\n defaultMessage: 'Is Not Attached To Subnet',\n },\n notIsAttachedToInterface: {\n id: 'app.global.relations.notIsAttachedToInterface',\n defaultMessage: 'Is Not Attached To Interface',\n },\n notIncludedInPolicy: {\n id: 'app.global.relations.notIncludedInPolicy',\n defaultMessage: 'Not Included In Policy',\n },\n notContains: {\n id: 'app.global.relations.notContains',\n defaultMessage: 'Does Not Contain',\n },\n notReferences: {\n id: 'app.global.relations.notReferences',\n defaultMessage: 'Does Not Reference',\n },\n notHasSnapshot: {\n id: 'app.global.relations.notHasSnapshot',\n defaultMessage: 'Does Not Have Snapshot',\n },\n notIsAttachedToBlockStorage: {\n id: 'app.global.relations.notIsAttachedToBlockStorage',\n defaultMessage: 'Is Not Attached To Block Storage',\n },\n notBasedOn: {\n id: 'app.global.relations.notBasedOn',\n defaultMessage: 'Not Based On',\n },\n notIsDefinedBy: {\n id: 'app.global.relations.notIsDefinedBy',\n defaultMessage: 'Is Not Defined By',\n },\n notHasClassification: {\n id: 'app.global.relations.notHasClassification',\n defaultMessage: 'Does Not Have Classification',\n },\n notIsAttachedToNetwork: {\n id: 'app.global.relations.notIsAttachedToNetwork',\n defaultMessage: 'Is Not Attached To Network',\n },\n notIncludedInNetwork: {\n id: 'app.global.relations.notIncludedInNetwork',\n defaultMessage: 'Not Included In Network',\n },\n notIsPartOf: {\n id: 'app.global.relations.notIsPartOf',\n defaultMessage: 'Is Not Part Of',\n },\n notIsPartOfPolicyEntry: {\n id: 'app.global.notIsPartOfPolicyEntry',\n defaultMessage: 'Is Not Part of Policy Entry',\n },\n notIsPartOfPolicyVersion: {\n id: 'app.global.notIsPartOfPolicyVersion',\n defaultMessage: 'Is Not Part of Policy Version',\n },\n notHasServiceType: {\n id: 'app.global.relations.notHasServiceType',\n defaultMessage: 'Does Not Have Service Type',\n },\n notHasPermission: {\n id: 'app.global.relations.notHasPermission',\n defaultMessage: 'Does Not Have Permission',\n },\n notDenies: {\n id: 'app.global.relations.notDenies',\n defaultMessage: 'Does Not Deny',\n },\n notHasActionType: {\n id: 'app.global.relations.notHasActionType',\n defaultMessage: 'Does Not Have Action Type',\n },\n notAllows: {\n id: 'app.global.relations.notAllows',\n defaultMessage: 'Does Not Allow',\n },\n notHasAccessToData: {\n id: 'app.global.relations.notHasAccessToData',\n defaultMessage: 'Does Not Have Access To Data',\n },\n notOrganizes: {\n id: 'app.global.relations.notOrganizes',\n defaultMessage: 'Does Not Organize',\n },\n notOrganizedBy: {\n id: 'app.global.relations.notOrganizedBy',\n defaultMessage: 'Not Organized By',\n },\n notAccessedProtection: {\n id: 'app.global.relations.notAccessedProtection',\n defaultMessage: 'Has Not Accessed Protection',\n },\n notHasAccessToNetworkPolicy: {\n id: 'app.global.relations.notHasAccessToNetworkPolicy',\n defaultMessage: 'Does Not Have Access To Network Policy',\n },\n notAppliesTo: {\n id: 'app.global.relations.notAppliesTo',\n defaultMessage: 'Does Not Apply To',\n },\n appliesToData: {\n id: 'app.global.relations.appliesToData',\n defaultMessage: 'Applies To Data',\n },\n notAppliesToData: {\n id: 'app.global.relations.notAppliesToData',\n defaultMessage: 'Does Not Apply To Data',\n },\n appliesToIdentity: {\n id: 'app.global.relations.appliesToIdentity',\n defaultMessage: 'Applies To Identity',\n },\n notAppliesToIdentity: {\n id: 'app.global.relations.notAppliesToIdentity',\n defaultMessage: 'Does Not Apply To Identity',\n },\n isAssignedTo: {\n id: 'app.global.relations.isAssignedTo',\n defaultMessage: 'Is Assigned To',\n },\n notIsAssignedTo: {\n id: 'app.global.relations.notIsAssignedTo',\n defaultMessage: 'Is Not Assigned To',\n },\n usedToAccess: {\n id: 'app.global.relations.usedToAccess',\n defaultMessage: 'Used To Access',\n },\n notUsedToAccess: {\n id: 'app.global.relations.notUsedToAccess',\n defaultMessage: 'Not Used To Access',\n },\n isClassificationOfServiceType: {\n id: 'app.global.relations.isClassificationOfServiceType',\n defaultMessage: 'Is Classification Of Service Type',\n },\n notIsClassificationOfServiceType: {\n id: 'app.global.relations.notIsClassificationOfServiceType',\n defaultMessage: 'Is Not Classification Of Service Type',\n },\n isAvailabilityZoneOf: {\n id: 'app.global.relations.isAvailabilityZoneOf',\n defaultMessage: 'Is Availability Zone Of',\n },\n notIsAvailabilityZoneOf: {\n id: 'app.global.relations.notIsAvailabilityZoneOf',\n defaultMessage: 'Is Not Availability Zone Of',\n },\n isCityOfLocation: {\n id: 'app.global.relations.isCityOfLocation',\n defaultMessage: 'Is City Of Location',\n },\n notIsCityOfLocation: {\n id: 'app.global.relations.notIsCityOfLocation',\n defaultMessage: 'Is Not City Of Location',\n },\n countryOfAction: {\n id: 'app.global.relations.countryOfAction',\n defaultMessage: 'Country Of Action',\n },\n notCountryOfAction: {\n id: 'app.global.relations.notCountryOfAction',\n defaultMessage: 'Not Country of Action',\n },\n isCountryOfRegion: {\n id: 'app.global.relations.isCountryOfRegion',\n defaultMessage: 'Is Country Of Region',\n },\n notIsCountryOfRegion: {\n id: 'app.global.relations.notIsCountryOfRegion',\n defaultMessage: 'Is Not Country of Region',\n },\n isCountryOfSubdivision: {\n id: 'app.global.relations.isCountryOfSubdivision',\n defaultMessage: 'Is Country Of Subdivision',\n },\n notIsCountryOfSubdivision: {\n id: 'app.global.relations.notIsCountryOfSubdivision',\n defaultMessage: 'Is Not Country of Subdivision',\n },\n isClassificationOfDataStore: {\n id: 'app.global.relations.isClassificationOfDataStore',\n defaultMessage: 'Is Classification Of Data Store',\n },\n notIsClassificationOfDataStore: {\n id: 'app.global.relations.notIsClassificationOfDataStore',\n defaultMessage: 'Is Not Classification Of Data Store',\n },\n isClassificationOfDataStoreType: {\n id: 'app.global.relations.isClassificationOfDataStoreType',\n defaultMessage: 'Is Classification Of Data Store Type',\n },\n notIsClassificationOfDataStoreType: {\n id: 'app.global.relations.notIsClassificationOfDataStoreType',\n defaultMessage: 'Is Not Classification Of Data Store Type',\n },\n appliesToDataStore: {\n id: 'app.global.relations.appliesToDataStore',\n defaultMessage: 'Applies To Data Store',\n },\n notAppliesToDataStore: {\n id: 'app.global.relations.notAppliesToDataStore',\n defaultMessage: 'Does Not Apply To Data Store',\n },\n managedBy: {\n id: 'app.global.relations.managedBy',\n defaultMessage: 'Managed By',\n },\n notManagedBy: {\n id: 'app.global.relations.notManagedBy',\n defaultMessage: 'Not Managed By',\n },\n isRegionOfAvailabilityZone: {\n id: 'app.global.relations.isRegionOfAvailabilityZone',\n defaultMessage: 'Is Region Of Availability Zone',\n },\n notIsRegionOfAvailabilityZone: {\n id: 'app.global.relations.notIsRegionOfAvailabilityZone',\n defaultMessage: 'Is Not Region Of Availability Zone',\n },\n isRegionOfResource: {\n id: 'app.global.relations.isRegionOfResource',\n defaultMessage: 'Is Region Of Resource',\n },\n notIsRegionOfResource: {\n id: 'app.global.relations.notIsRegionOfResource',\n defaultMessage: 'Is Not Region Of Resource',\n },\n isVersionOfDataStore: {\n id: 'app.global.relations.isVersionOfDataStore',\n defaultMessage: 'Is Version Of Data Store',\n },\n notIsVersionOfDataStore: {\n id: 'app.global.relations.notIsVersionOfDataStore',\n defaultMessage: 'Is Not Version Of Data Store',\n },\n isVersionOfDataStoreType: {\n id: 'app.global.relations.isVersionOfDataStoreType',\n defaultMessage: 'Is Version Of Data Store Type',\n },\n notIsVersionOfDataStoreType: {\n id: 'app.global.relations.notIsVersionOfDataStoreType',\n defaultMessage: 'Is Not Version Of Data Store Type',\n },\n locationOfAction: {\n id: 'app.global.relations.locationOfAction',\n defaultMessage: 'Location Of Action',\n },\n notLocationOfAction: {\n id: 'app.global.relations.notLocationOfAction',\n defaultMessage: 'Not Location Of Action',\n },\n isSubdivisionOfCity: {\n id: 'app.global.relations.isSubdivisionOfCity',\n defaultMessage: 'Is Subdivision Of City',\n },\n notIsSubdivisionOfCity: {\n id: 'app.global.relations.notIsSubdivisionOfCity',\n defaultMessage: 'Is Not Subdivision Of City',\n },\n tagsEntity: {\n id: 'app.global.relations.tagsEntity',\n defaultMessage: 'Tags Entity',\n },\n notTagsEntity: {\n id: 'app.global.relations.notTagsEntity',\n defaultMessage: 'Does Not Tag Entity',\n },\n notHasAccessToCompute: {\n id: 'app.global.relations.notHasAccessToCompute',\n defaultMessage: 'Has No Access To Compute',\n },\n notAccessedCompute: {\n id: 'app.global.relations.notAccessedCompute',\n defaultMessage: 'Has Not Accessed Compute',\n },\n notPerformed: {\n id: 'app.global.relations.notPerformed',\n defaultMessage: 'Has Not Performed',\n },\n notAccessedIdentity: {\n id: 'app.global.relations.notAccessedIdentity',\n defaultMessage: 'Did Not Access Identity',\n },\n notHasAccessToIdentity: {\n id: 'app.global.relations.notHasAccessToIdentity',\n defaultMessage: 'Has No Access To Identity',\n },\n notAccessedNetworkPolicy: {\n id: 'app.global.relations.notAccessedNetworkPolicy',\n defaultMessage: 'Has Not Accessed Network Policy',\n },\n notHasPrincipal: {\n id: 'app.global.relations.notHasPrincipal',\n defaultMessage: 'Does Not Have Principal',\n },\n notIsOwnerOf: {\n id: 'app.global.relations.notIsOwnerOf',\n defaultMessage: 'Is Not Owner Of',\n },\n notHasAccessToProtection: {\n id: 'app.global.relations.notHasAccessToProtection',\n defaultMessage: 'Has No Access To Protection',\n },\n notIsMemberOf: {\n id: 'app.global.relations.notIsMemberOf',\n defaultMessage: 'Is Not Member Of',\n },\n notAccessedData: {\n id: 'app.global.relations.notAccessedData',\n defaultMessage: 'Has Not Accessed Data',\n },\n notUsesPortrange: {\n id: 'app.global.relations.notUsesPortrange',\n defaultMessage: 'Does Not Use Portrange',\n },\n notUsesProtocol: {\n id: 'app.global.relations.notUsesProtocol',\n defaultMessage: 'Does Not Use Protocol',\n },\n notAllowsServiceTagDestination: {\n id: 'app.global.relations.notAllowsServiceTagDestination',\n defaultMessage: 'Does Not Allow Service Tag Destination',\n },\n notDeniesServiceTagSource: {\n id: 'app.global.relations.notDeniesServiceTagSource',\n defaultMessage: 'Does Not Denie Service Tag Source',\n },\n notAllowsPortRangeSource: {\n id: 'app.global.relations.notAllowsPortRangeSource',\n defaultMessage: 'Does Not Allow Port Range Source',\n },\n notDeniesServiceTagDestination: {\n id: 'app.global.relations.notDeniesServiceTagDestination',\n defaultMessage: 'Does Not Deny Service Tag Destination',\n },\n notDeniesPortRangeDestination: {\n id: 'app.global.relations.notDeniesPortRangeDestination',\n defaultMessage: 'Does Not Deny Port Range Destination',\n },\n notAllowsPolicyDestination: {\n id: 'app.global.relations.notAllowsPolicyDestination',\n defaultMessage: 'Does Not Allow Policy Destination',\n },\n notAllowsServiceTagSource: {\n id: 'app.global.relations.notAllowsServiceTagSource',\n defaultMessage: 'Does Not Allow Service Tag Source',\n },\n notDeniesPolicySource: {\n id: 'app.global.relations.notDeniesPolicySource',\n defaultMessage: 'Does Not Deny Policy Source',\n },\n notDeniesPortRangeSource: {\n id: 'app.global.relations.notDeniesPortRangeSource',\n defaultMessage: 'Does Not Deny Port Range Source',\n },\n notProtectsIngress: {\n id: 'app.global.relations.notProtectsIngress',\n defaultMessage: 'Does Not Protect Ingress',\n },\n notAllowsPolicySource: {\n id: 'app.global.relations.notAllowsPolicySource',\n defaultMessage: 'Does Not Allow Policy Source',\n },\n notAllowsPortRangeDestination: {\n id: 'app.global.relations.notAllowsPortRangeDestination',\n defaultMessage: 'Does Not AllowsPortRangeDestination',\n },\n notDeniesCIDRDestination: {\n id: 'app.global.relations.notDeniesCIDRDestination',\n defaultMessage: 'Does Not Deny CIDR Destination',\n },\n notDeniesProtocol: {\n id: 'app.global.relations.notDeniesProtocol',\n defaultMessage: 'Does Not Deny Protocol',\n },\n notDeniesCIDRSource: {\n id: 'app.global.relations.notDeniesCIDRSource',\n defaultMessage: 'Does Not Deny CIDR Source',\n },\n notAllowsProtocol: {\n id: 'app.global.relations.notAllowsProtocol',\n defaultMessage: 'Does Not Allow Protocol',\n },\n notAllowsCIDRDestination: {\n id: 'app.global.relations.notAllowsCIDRDestination',\n defaultMessage: 'Does Not Allow CIDR Destination',\n },\n notProtectsEgress: {\n id: 'app.global.relations.notProtectsEgress',\n defaultMessage: 'Does Not Protect Egress',\n },\n notAllowsCIDRSource: {\n id: 'app.global.relations.notAllowsCIDRSource',\n defaultMessage: 'Does Not Allow CIDR Source',\n },\n notDeniesPolicyDestination: {\n id: 'app.global.relations.notDeniesPolicyDestination',\n defaultMessage: 'Does Not Deny Policy Destination',\n },\n notHasPolicyVersion: {\n id: 'app.global.relations.notHasPolicyVersion',\n defaultMessage: 'Does Not Have Policy Version',\n },\n notHasPolicyEntry: {\n id: 'app.global.relations.notHasPolicyEntry',\n defaultMessage: 'Does Not Have Policy Entry',\n },\n notHas: {\n id: 'app.global.relations.notHas',\n defaultMessage: 'Does Not Have',\n },\n notHasDataStoreVersion: {\n id: 'app.global.relations.notHasDataStoreVersion',\n defaultMessage: 'Does Not Have Data Store Version',\n },\n notIsInCountry: {\n id: 'app.global.relations.notIsInCountry',\n defaultMessage: 'Is Not In Country',\n },\n notPerformedIn: {\n id: 'app.global.relations.notPerformedIn',\n defaultMessage: 'Not Performed In',\n },\n notContainsCloudAccount: {\n id: 'app.global.relations.notContainsCloudAccount',\n defaultMessage: 'Does Not Contain Cloud Account',\n },\n notScansAccount: {\n id: 'app.global.relations.notScansAccount',\n defaultMessage: 'Does Not Scan Account',\n },\n notContainsAccount: {\n id: 'app.global.relations.notContainsAccount',\n defaultMessage: 'Does Not Contain Account',\n },\n notVariables: {\n id: 'app.global.relations.notVariables',\n defaultMessage: 'Does Not Have Variables',\n },\n notIsInAvailabilityZone: {\n id: 'app.global.relations.notIsInAvailabilityZone',\n defaultMessage: 'Is Not In Availability Zone',\n },\n notIsInRegion: {\n id: 'app.global.relations.notIsInRegion',\n defaultMessage: 'Is Not In Region',\n },\n notHasDataType: {\n id: 'app.global.relations.notHasDataType',\n defaultMessage: 'Does Not Have Data Type',\n },\n notHasDataStoreType: {\n id: 'app.global.relations.notHasDataStoreType',\n defaultMessage: 'Does Not Have Data Store Type',\n },\n notIsInSubdivision: {\n id: 'app.global.relations.notIsInSubdivision',\n defaultMessage: 'Is Not In Subdivision',\n },\n notContainsIdentity: {\n id: 'app.global.relations.notContainsIdentity',\n defaultMessage: 'Does Not Contain Identity',\n },\n notOwnsContent: {\n id: 'app.global.relations.notOwnsContent',\n defaultMessage: 'Does Not Own Content',\n },\n notAccessedWith: {\n id: 'app.global.relations.notAccessedWith',\n defaultMessage: 'Not Accessed With',\n },\n notHasPermissionList: {\n id: 'app.global.relations.notHasPermissionList',\n defaultMessage: 'Does Not Have Permission List',\n },\n notProtects: {\n id: 'app.global.relations.notProtects',\n defaultMessage: 'Does Not Protect',\n },\n notPerformedOn: {\n id: 'app.global.relations.notPerformedOn',\n defaultMessage: 'Did Not Perform On',\n },\n notAssumedRole: {\n id: 'app.global.relations.notAssumedRole',\n defaultMessage: 'Did Not Assume Role',\n },\n notIsInCity: {\n id: 'app.global.relations.notIsInCity',\n defaultMessage: 'Is Not In City',\n },\n notCanAssume: {\n id: 'app.global.relations.notCanAssume',\n defaultMessage: 'Can Not Assume',\n },\n notRunsOn: {\n id: 'app.global.relations.notRunsOn',\n defaultMessage: 'Does Not Run On',\n },\n notCloneOf: {\n id: 'app.global.relations.notCloneOf',\n defaultMessage: 'Not Clone Of',\n },\n notIsAttachedToAccessPolicy: {\n id: 'app.global.relations.notIsAttachedToAccessPolicy',\n defaultMessage: 'Is Not Attached To Access Policy',\n },\n notPerformedAt: {\n id: 'app.global.relations.notPerformedAt',\n defaultMessage: 'Not Performed At',\n },\n notHasMFADevice: {\n id: 'app.global.relations.notHasMFADevice',\n defaultMessage: 'Does Not Have MFA Device',\n },\n notContainsServiceType: {\n id: 'app.global.relations.notContainsServiceType',\n defaultMessage: 'Does Not Contain Service Type',\n },\n notContainsActionType: {\n id: 'app.global.relations.notContainsActionType',\n defaultMessage: 'Does Not Contain Action Type',\n },\n }),\n },\n operations: {\n ...defineMessages({\n EQ: {\n id: 'app.operation.EQ',\n defaultMessage: 'Equals',\n },\n NEQ: {\n id: 'app.operation.NEQ',\n defaultMessage: 'Not Equals',\n },\n IS_NULL: {\n id: 'app.operation.IS_NULL',\n defaultMessage: 'Is Null',\n },\n IS_NOT_NULL: {\n id: 'app.operation.IS_NOT_NULL',\n defaultMessage: 'Is Not Null',\n },\n STARTS_WITH: {\n id: 'app.operation.STARTS_WITH',\n defaultMessage: 'Starts With',\n },\n ENDS_WITH: {\n id: 'app.operation.ENDS_WITH',\n defaultMessage: 'Ends With',\n },\n IN_LIST: {\n id: 'app.operation.IN_LIST',\n defaultMessage: 'In List',\n },\n NOT_IN_LIST: {\n id: 'app.operation.NOT_IN_LIST',\n defaultMessage: 'Not In List',\n },\n BETWEEN: {\n id: 'app.operation.BETWEEN',\n defaultMessage: 'Between',\n },\n NOT_BETWEEN: {\n id: 'app.operation.NOT_BETWEEN',\n defaultMessage: 'Not Between',\n },\n CONTAINS: {\n id: 'app.operation.CONTAINS',\n defaultMessage: 'Contains',\n },\n NOT_CONTAINS: {\n id: 'app.operation.NOT_CONTAINS',\n defaultMessage: 'Does Not Contain',\n },\n REGEX: {\n id: 'app.operation.REGEX',\n defaultMessage: 'Matches Regex',\n },\n NOT_REGEX: {\n id: 'app.operation.NOT_REGEX',\n defaultMessage: 'Does Not Match Regex',\n },\n GT: {\n id: 'app.operations.GT',\n defaultMessage: 'Greater Than',\n },\n GTE: {\n id: 'app.operations.GTE',\n defaultMessage: 'Greater Than or Equal To',\n },\n LT: {\n id: 'app.operation.LT',\n defaultMessage: 'Less Than',\n },\n LTE: {\n id: 'app.operation.LTE',\n defaultMessage: 'Less Than or Equal To',\n },\n TEXT_CONTAINS: {\n id: 'app.operation.TEXT_CONTAINS',\n defaultMessage: 'Text Contains',\n },\n TEXT_CONTAINS_REGEX: {\n id: 'app.operation.TEXT_CONTAINS_REGEX',\n defaultMessage: 'Text Contains Regex',\n },\n TEXT_CONTAINS_PREFIX: {\n id: 'app.operation.TEXT_CONTAINS_PREFIX',\n defaultMessage: 'Text Contains Prefix',\n },\n TEXT_FUZZY: {\n id: 'app.operation.TEXT_FUZZY',\n defaultMessage: 'Text Fuzzy',\n },\n }),\n },\n enumValues: {\n ...defineMessages({\n Action: {\n id: 'app.enumValues.Action',\n defaultMessage: 'Action',\n },\n Any: {\n id: 'app.enumValues.Any',\n defaultMessage: 'Any',\n },\n ACCESSKEY: {\n id: 'app.enumValues.ACCESSKEY',\n defaultMessage: 'Access Key',\n },\n ADMIN: {\n id: 'app.enumValues.ADMIN',\n defaultMessage: 'Admin',\n },\n ASSUMEDROLE: {\n id: 'app.enumValues.ASSUMEDROLE',\n defaultMessage: 'Assumed Role',\n },\n CONTAINER: {\n id: 'app.enumValues.CONTAINER',\n defaultMessage: 'Container',\n },\n DATASTORE: {\n id: 'app.enumValues.DATASTORE',\n defaultMessage: 'Data Store',\n },\n Data: {\n id: 'app.enumValues.Data',\n defaultMessage: 'Data',\n },\n GROUP: {\n id: 'app.enumValues.GROUP',\n defaultMessage: 'Group',\n },\n KEYSTORE: {\n id: 'app.enumValues.KEYSTORE',\n defaultMessage: 'Key Store',\n },\n Identity: {\n id: 'app.enumValues.Identity',\n defaultMessage: 'Identity',\n },\n Infrastructure: {\n id: 'app.enumValues.Infrastructure',\n defaultMessage: 'Infrastructure',\n },\n Object: {\n id: 'app.enumValues.OBJECT',\n defaultMessage: 'Object',\n },\n POLICY: {\n id: 'app.enumValues.POLICY',\n defaultMessage: 'Policy',\n },\n Protection: {\n id: 'app.enumValues.Protection',\n defaultMessage: 'Protection',\n },\n ROLE: {\n id: 'app.enumValues.ROLE',\n defaultMessage: 'Role',\n },\n USER: {\n id: 'app.enumValues.USER',\n defaultMessage: 'User',\n },\n VIRTUAL: {\n id: 'app.enumValues.VIRTUAL',\n defaultMessage: 'Virtual',\n },\n PHYSICAL: {\n id: 'app.enumValues.PHYSICAL',\n defaultMessage: 'Physical',\n },\n ZONE: {\n id: 'app.enumValues.ZONE',\n defaultMessage: 'Zone',\n },\n PLATFORM: {\n id: 'app.enumValues.PLATFORM',\n defaultMessage: 'Platform',\n },\n CLOUD: {\n id: 'app.enumValues.CLOUD',\n defaultMessage: 'Cloud',\n },\n POLICYENTRY: {\n id: 'app.enumValues.POLICYENTRY',\n defaultMessage: 'Policy Entry',\n },\n POLICYVERSION: {\n id: 'app.enumValues.POLICYVERSION',\n defaultMessage: 'Policy Version',\n },\n FEDERATEDUSER: {\n id: 'app.enumValues.FEDERATEDUSER',\n defaultMessage: 'Federated User',\n },\n ACCOUNT: {\n id: 'app.enumValues.ACCOUNT',\n defaultMessage: 'Account',\n },\n ORGANIZATION: {\n id: 'app.enumValues.ORGANIZATION',\n defaultMessage: 'Organization',\n },\n OBJECT: {\n id: 'app.enumValues.OBJECT',\n defaultMessage: 'Object',\n },\n SRCIP: {\n id: 'app.enumValues.SRCIP',\n defaultMessage: 'Source IP',\n },\n USERAGENT: {\n id: 'app.enumValues.USERAGENT',\n defaultMessage: 'User Agent',\n },\n REGION: {\n id: 'app.enumValues.REGION',\n defaultMessage: 'Region',\n },\n USERNAME: {\n id: 'app.enumValues.USERNAME',\n defaultMessage: 'Username',\n },\n OPERATION: {\n id: 'app.enumValues.OPERATION',\n defaultMessage: 'Operation',\n },\n PERMISSION: {\n id: 'app.enumValues.PERMISSION',\n defaultMessage: 'Permission',\n },\n ACTIONTYPE: {\n id: 'app.enumValues.ACCESSKEY',\n defaultMessage: 'Action Type',\n },\n SERVICE: {\n id: 'app.enumValues.ACCESSKEY',\n defaultMessage: 'Service',\n },\n AWSEVENT: {\n id: 'app.enumValues.AWSEVENT',\n defaultMessage: 'AWS Event',\n },\n AZUREEVENT: {\n id: 'app.enumValues.AZUREEVENT',\n defaultMessage: 'Azure Event',\n },\n GCPEVENT: {\n id: 'app.enumValues.GCPEVENT',\n defaultMessage: 'GCP Event',\n },\n }),\n },\n tickets: {\n ...defineMessages({\n ticketStatusNEW: {\n id: 'app.containers.Tickets.ticketStatusNEW',\n defaultMessage: 'New',\n },\n ticketStatusSNOOZED: {\n id: 'app.containers.Tickets.ticketStatusSNOOZED',\n defaultMessage: 'Snoozed',\n },\n ticketStatusRISK_ACCEPTED: {\n id: 'app.containers.Tickets.ticketStatusRISK_ACCEPTED',\n defaultMessage: 'Accepted Risk',\n },\n ticketStatusCLOSED: {\n id: 'app.containers.Tickets.ticketStatusCLOSED',\n defaultMessage: 'Closed',\n },\n }),\n },\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport hoistNonReactStatics from 'hoist-non-react-statics'\n\nimport getInjectors from './sagaInjectors'\n\n/**\n * Dynamically injects a saga, passes component's props as saga arguments\n *\n * @param {string} key A key of the saga\n * @param {function} saga A root saga that will be injected\n * @param {string} [mode] By default (constants.RESTART_ON_REMOUNT) the saga will be started on component mount and\n * cancelled with `task.cancel()` on component un-mount for improved performance. Another two options:\n * - constants.DAEMON—starts the saga on component mount and never cancels it or starts again,\n * - constants.ONCE_TILL_UNMOUNT—behaves like 'RESTART_ON_REMOUNT' but never runs it again.\n *\n */\nexport default ({ key, saga, mode }) => WrappedComponent => {\n class InjectSaga extends React.Component {\n static WrappedComponent = WrappedComponent\n static contextTypes = {\n store: PropTypes.object.isRequired,\n }\n static displayName = `withSaga(${WrappedComponent.displayName ||\n WrappedComponent.name ||\n 'Component'})`\n\n constructor(props, context) {\n super(props, context)\n this.injectors = getInjectors(this.context.store)\n const { injectSaga } = this.injectors\n injectSaga(key, { saga, mode }, this.props)\n }\n\n componentWillUnmount() {\n const { ejectSaga } = this.injectors\n ejectSaga(key)\n }\n\n render() {\n return \n }\n }\n\n return hoistNonReactStatics(InjectSaga, WrappedComponent)\n}\n","/*\n *\n * SwimlaneDetails actions\n *\n */\n\nimport {\n GET_PREVIEW_RESULTS,\n SET_PREVIEW_RESULTS,\n CREATE_SWIMLANE,\n CREATE_SWIMLANE_SUCCESS,\n DELETE_SWIMLANE,\n DELETE_SWIMLANE_SUCCESS,\n SET_EDITING_SWIMLANE_SRN,\n UPDATE_SWIMLANE,\n UPDATE_SWIMLANE_SUCCESS,\n SET_UPDATE_SWIMLANE_ERROR,\n GET_TAG_VALUES,\n SET_TAG_VALUES,\n GET_CONTROL_FRAMEWORKS_FOR_SWIMLANE,\n SET_CONTROL_FRAMEWORKS_FOR_SWIMLANE,\n GET_BOT_VALUES,\n SET_BOT_VALUES,\n UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK,\n UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK_SUCCESS,\n UPDATE_USER_IN_SWIMLANE,\n UPDATE_USER_IN_SWIMLANE_SUCCESS,\n SET_SWIMLANE_BOT_ERROR,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getPreviewResults = createAction(GET_PREVIEW_RESULTS)\nexport const setPreviewResults = createAction(SET_PREVIEW_RESULTS)\nexport const createSwimlane = createAction(CREATE_SWIMLANE)\nexport const createSwimlaneSuccess = createAction(CREATE_SWIMLANE_SUCCESS)\nexport const deleteSwimlane = createAction(DELETE_SWIMLANE)\nexport const deleteSwimlaneSuccess = createAction(DELETE_SWIMLANE_SUCCESS)\nexport const setEditingSwimlaneSrn = createAction(SET_EDITING_SWIMLANE_SRN)\nexport const updateSwimlane = createAction(UPDATE_SWIMLANE)\nexport const updateSwimlaneSuccess = createAction(UPDATE_SWIMLANE_SUCCESS)\nexport const setUpdateSwimlaneError = createAction(SET_UPDATE_SWIMLANE_ERROR)\nexport const getTagValues = createAction(GET_TAG_VALUES)\nexport const setTagValues = createAction(SET_TAG_VALUES)\nexport const getControlFrameworksForSwimlane = createAction(\n GET_CONTROL_FRAMEWORKS_FOR_SWIMLANE\n)\nexport const setControlFrameworksForSwimlane = createAction(\n SET_CONTROL_FRAMEWORKS_FOR_SWIMLANE\n)\nexport const getBotValues = createAction(GET_BOT_VALUES)\nexport const setBotValues = createAction(SET_BOT_VALUES)\nexport const updateSwimlanesInControlFramework = createAction(\n UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK\n)\nexport const updateSwimlanesInControlFrameworkSuccess = createAction(\n UPDATE_SWIMLANES_IN_CONTROL_FRAMEWORK_SUCCESS\n)\nexport const updateUserInSwimlane = createAction(UPDATE_USER_IN_SWIMLANE)\nexport const updateUserInSwimlaneSuccess = createAction(\n UPDATE_USER_IN_SWIMLANE_SUCCESS\n)\nexport const setSwimlaneBotError = createAction(SET_SWIMLANE_BOT_ERROR)\n","import React, { lazy, Suspense } from 'react'\n\nconst loadable = (importFunc, { fallback = null } = { fallback: null }) => {\n const LazyComponent = lazy(importFunc)\n\n // eslint-disable-next-line react/display-name\n return props => (\n \n \n \n )\n}\n\nexport default loadable\n","/*\n *\n * SonraiData actions\n *\n */\n\nimport {\n SET_RELATIONS,\n SET_TYPES,\n RUN_INSPECTION_QUERY,\n FETCH_SAVED_SEARCHES,\n FETCH_SAVED_SEARCHES_DETAILS,\n SET_SAVED_SEARCHES,\n SET_ALLOWED_ROOT_QUERIES,\n SET_SAVED_SEARCH,\n FETCH_SONRAI_SEARCHES,\n SET_SONRAI_SEARCHES,\n FETCH_ACCOUNTS,\n FETCH_ACCOUNTS_SUCCESS,\n FETCH_SUBSCRIPTIONS,\n FETCH_SUBSCRIPTIONS_SUCCESS,\n FETCH_TAGS,\n FETCH_TAGS_SUCCESS,\n LOAD_TAG,\n SET_PIVOT,\n FETCH_DATA_CONTAINERS,\n FETCH_DATA_CONTAINERS_SUCCESS,\n START_UPDATE_DATA_POLL,\n STOP_UPDATE_DATA_POLL,\n SET_QUERY_NAMES,\n SET_GRAPHQL_SCHEMA,\n FETCH_GRAPHQL_SCHEMA,\n REMOVE_SAVED_SEARCH,\n CHECK_IF_HAS_COLLECTORS,\n SET_HAS_COLLECTORS,\n GET_MONITORED_RESOURCES_COUNT,\n SET_MONITORED_RESOURCES_COUNT,\n FETCH_SWIMLANES,\n FETCH_SWIMLANES_SUCCESS,\n ADD_SWIMLANE,\n REMOVE_SWIMLANE,\n REMOVE_SWIMLANE_SUCCESS,\n UPDATE_SWIMLANE,\n SET_GLOBAL_ERROR,\n FETCH_SONRAI_USERS,\n FETCH_SONRAI_USERS_SUCCESS,\n UPDATE_SONRAI_USER,\n UPDATE_SONRAI_USER_SUCCESS,\n GET_ALL_ROLES,\n SET_ALL_ROLES,\n ERR_ALL_ROLES,\n UPDATE_USER_ROLES,\n UPDATE_USER_ROLES_SUCCESS,\n GET_BOTS,\n SET_BOTS,\n CREATE_BOT,\n CREATE_BOT_SUCCESS,\n VALIDATE_SOURCE_URL,\n VALIDATE_SOURCE_URL_SUCCESS,\n CLEAR_SOURCE_URL_VALIDATION,\n HANDLE_DELETE_BOTS,\n HANDLE_DELETE_BOTS_SUCCESS,\n UPDATE_BOT_ASSIGNMENT,\n UPDATE_BOT_ASSIGNMENT_SUCCESS,\n GET_EXEMPTED_IDENTITIES,\n SET_EXEMPTED_IDENTITIES,\n SET_EXEMPTED_IDENTITIES_ERROR,\n ADD_EXEMPTED_IDENTITIES,\n ADD_EXEMPTED_IDENTITIES_SUCCESS,\n DELETE_EXEMPTED_IDENTITIES,\n DELETE_EXEMPTED_IDENTITIES_SUCCESS,\n SET_OBJECTIVES,\n FETCH_OBJECTIVES,\n FETCH_OBJECTIVES_ERROR,\n ENABLE_OBJECTIVE,\n ENABLE_OBJECTIVE_SUCCESS,\n ENABLE_OBJECTIVE_ERROR,\n ENABLE_ALL_OBJECTIVES,\n ENABLE_ALL_OBJECTIVES_SUCCESS,\n ENABLE_ALL_OBJECTIVES_ERROR,\n ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE,\n ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_SUCCESS,\n ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_ERROR,\n FETCH_SONRAI_CONFIG,\n SET_SONRAI_CONFIG,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const setPivot = createAction(SET_PIVOT)\nexport const setTypes = createAction(SET_TYPES)\nexport const setRelations = createAction(SET_RELATIONS)\nexport const runInspectionQuery = createAction(RUN_INSPECTION_QUERY)\nexport const fetchSavedSearches = createAction(FETCH_SAVED_SEARCHES)\nexport const fetchSavedSearchesDetails = createAction(\n FETCH_SAVED_SEARCHES_DETAILS\n)\nexport const setSavedSearches = createAction(SET_SAVED_SEARCHES)\nexport const setAllowedRootQueries = createAction(SET_ALLOWED_ROOT_QUERIES)\nexport const setSavedSearch = createAction(SET_SAVED_SEARCH)\nexport const setGraphQLSchema = createAction(SET_GRAPHQL_SCHEMA)\nexport const fetchGraphQLSchema = createAction(FETCH_GRAPHQL_SCHEMA)\n\nexport const setSonraiSearches = createAction(SET_SONRAI_SEARCHES)\nexport const fetchSonraiSearches = createAction(FETCH_SONRAI_SEARCHES)\nexport const fetchAccounts = createAction(FETCH_ACCOUNTS)\nexport const fetchAccountsSuccess = createAction(FETCH_ACCOUNTS_SUCCESS)\nexport const fetchSubscriptions = createAction(FETCH_SUBSCRIPTIONS)\nexport const fetchSubscriptionsSuccess = createAction(\n FETCH_SUBSCRIPTIONS_SUCCESS\n)\nexport const fetchTags = createAction(FETCH_TAGS)\nexport const fetchTagsSuccess = createAction(FETCH_TAGS_SUCCESS)\nexport const loadTag = createAction(LOAD_TAG)\nexport const fetchDataContainers = createAction(FETCH_DATA_CONTAINERS)\nexport const fetchDataContainersSuccess = createAction(\n FETCH_DATA_CONTAINERS_SUCCESS\n)\n\nexport const startUpdateDataPoll = createAction(START_UPDATE_DATA_POLL)\nexport const stopUpdateDataPoll = createAction(STOP_UPDATE_DATA_POLL)\nexport const setQueryNames = createAction(SET_QUERY_NAMES)\nexport const removeSavedSearch = createAction(REMOVE_SAVED_SEARCH)\nexport const checkIfHasCollectors = createAction(CHECK_IF_HAS_COLLECTORS)\nexport const setHasCollectors = createAction(SET_HAS_COLLECTORS)\nexport const getMonitoredResourcesCount = createAction(\n GET_MONITORED_RESOURCES_COUNT\n)\nexport const setMonitoredResourcesCount = createAction(\n SET_MONITORED_RESOURCES_COUNT\n)\n\nexport const fetchSwimlanes = createAction(FETCH_SWIMLANES)\nexport const fetchSwimlanesSuccess = createAction(FETCH_SWIMLANES_SUCCESS)\nexport const addSwimlane = createAction(ADD_SWIMLANE)\nexport const removeSwimlane = createAction(REMOVE_SWIMLANE)\nexport const removeSwimlaneSuccess = createAction(REMOVE_SWIMLANE_SUCCESS)\nexport const updateSwimlane = createAction(UPDATE_SWIMLANE)\nexport const setGlobalError = createAction(SET_GLOBAL_ERROR)\nexport const fetchSonraiUsers = createAction(FETCH_SONRAI_USERS)\nexport const fetchSonraiUsersSuccess = createAction(FETCH_SONRAI_USERS_SUCCESS)\nexport const updateSonraiUser = createAction(UPDATE_SONRAI_USER)\nexport const updateSonraiUserSuccess = createAction(UPDATE_SONRAI_USER_SUCCESS)\nexport const getAllRoles = createAction(GET_ALL_ROLES)\nexport const setAllRoles = createAction(SET_ALL_ROLES)\nexport const errAllRoles = createAction(ERR_ALL_ROLES)\nexport const updateUserRoles = createAction(UPDATE_USER_ROLES)\nexport const updateUserRolesSuccess = createAction(UPDATE_USER_ROLES_SUCCESS)\n\nexport const getBots = createAction(GET_BOTS)\nexport const setBots = createAction(SET_BOTS)\nexport const updateBotAssignments = createAction(UPDATE_BOT_ASSIGNMENT)\nexport const updateBotAssignmentsSuccess = createAction(\n UPDATE_BOT_ASSIGNMENT_SUCCESS\n)\nexport const createBot = createAction(CREATE_BOT)\nexport const createBotSuccess = createAction(CREATE_BOT_SUCCESS)\nexport const getExemptedIdentities = createAction(GET_EXEMPTED_IDENTITIES)\nexport const setExemptedIdentities = createAction(SET_EXEMPTED_IDENTITIES)\nexport const setExemptedIdentitiesError = createAction(\n SET_EXEMPTED_IDENTITIES_ERROR\n)\n\nexport const addExemptedIdentities = createAction(ADD_EXEMPTED_IDENTITIES)\nexport const addExemptedIdentitiesSuccess = createAction(\n ADD_EXEMPTED_IDENTITIES_SUCCESS\n)\n\nexport const deleteExemptedIdentities = createAction(DELETE_EXEMPTED_IDENTITIES)\nexport const deleteExemptedIdentitiesSuccess = createAction(\n DELETE_EXEMPTED_IDENTITIES_SUCCESS\n)\n\nexport const validateSourceUrl = createAction(VALIDATE_SOURCE_URL)\nexport const validateSourceUrlSuccess = createAction(\n VALIDATE_SOURCE_URL_SUCCESS\n)\nexport const clearSourceUrlValidation = createAction(\n CLEAR_SOURCE_URL_VALIDATION\n)\nexport const handleDeleteBots = createAction(HANDLE_DELETE_BOTS)\nexport const handleDeleteBotsSuccess = createAction(HANDLE_DELETE_BOTS_SUCCESS)\n\nexport const fetchObjectives = createAction(FETCH_OBJECTIVES)\nexport const fetchObjectivesError = createAction(FETCH_OBJECTIVES_ERROR)\nexport const setObjectives = createAction(SET_OBJECTIVES)\nexport const enableObjective = createAction(ENABLE_OBJECTIVE)\nexport const enableAllObjectives = createAction(ENABLE_ALL_OBJECTIVES)\nexport const enableAllObjectivesSuccess = createAction(\n ENABLE_ALL_OBJECTIVES_SUCCESS\n)\nexport const enableAllObjectivesError = createAction(\n ENABLE_ALL_OBJECTIVES_ERROR\n)\nexport const enableAllObjectivesForSwimlane = createAction(\n ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE\n)\nexport const enableAllObjectivesForSwimlaneError = createAction(\n ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_ERROR\n)\nexport const enableAllObjectivesForSwimlaneSuccess = createAction(\n ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE_SUCCESS\n)\nexport const enableObjectiveSuccess = createAction(ENABLE_OBJECTIVE_SUCCESS)\nexport const enableObjectiveError = createAction(ENABLE_OBJECTIVE_ERROR)\n\nexport const fetchSonraiConfig = createAction(FETCH_SONRAI_CONFIG)\nexport const setSonraiConfig = createAction(SET_SONRAI_CONFIG)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nexport class InlineEdit extends React.Component {\n constructor(props) {\n super(props)\n\n this.node = React.createRef()\n }\n\n styles = {\n editingContainer: {\n position: 'relative',\n height: '42px',\n display: 'block',\n },\n }\n\n componentDidMount() {\n document.addEventListener('click', this.handleClick)\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.handleClick)\n }\n\n handleClick = e => {\n if (!this.node.current.contains(e.target)) {\n this.props.onSubmit()\n }\n }\n\n render() {\n return (\n
    \n
    {this.props.children}
    \n
    \n )\n }\n}\n\nInlineEdit.propTypes = {\n children: PropTypes.node,\n onSubmit: PropTypes.func,\n}\n\nexport default InlineEdit\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\n\nimport Hoverable from 'components/Hoverable'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport InlineEdit from 'components/InlineEdit'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport ReactTooltip from 'react-tooltip'\n\nexport class InlineEditableText extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n editing: false,\n text: this.props.value || '',\n }\n this.container = React.createRef()\n this.input = React.createRef()\n\n this.styles = {\n container: {\n width: '100%',\n maxWidth: '800px',\n },\n display: {\n cursor: 'text',\n height: '42px',\n padding: '5px 5px',\n fontSize: '1rem',\n width: '100%',\n display: 'flex',\n overflowY: 'hidden',\n },\n inputStyle: {\n fontWeight: 300,\n fontFamily: 'Roboto, \"Helvetica Neue\", Helvetica, Arial, sans-serif',\n maxWidth: '800px',\n ...props.style,\n ...props.inputStyle,\n },\n hoverStyle: {\n borderRadius: '3px',\n backgroundColor: props.theme.neutralLight,\n },\n copy: {\n marginTop: '-3px',\n },\n stopBeingBig: {\n maxWidth: '800px',\n overflowX: 'hidden',\n textOverflow: 'ellipsis',\n flex: '1 0 86%',\n paddingLeft: '1px',\n },\n inactiveText: {\n marginLeft: '0.5rem',\n fontSize: '0.9rem',\n fontWeight: '500',\n letterSpacing: '1.2px',\n color: props.theme.red,\n backgroundColor: '#FFF',\n padding: '3px 5px',\n borderRadius: '0.8rem',\n textTransform: 'uppercase',\n height: '26px',\n alignSelf: 'center',\n },\n error: {\n fontSize: '0.8rem',\n fontWeight: '400',\n margin: '0.25rem 0rem 0.5rem 0.25rem',\n color: props.theme.red,\n },\n }\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.value !== this.props.value) {\n this.setState({ text: this.props.value })\n }\n }\n\n componentDidMount() {\n document.addEventListener('click', this.handleClick)\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.handleClick)\n }\n\n handleClick = e => {\n if (this.props.isNodeView) {\n if (!this.container.current.contains(e.target)) {\n this.hideErrorMessage()\n }\n }\n }\n\n hideErrorMessage = () => this.setState({ error: false })\n\n onChange = e => {\n const text = this.props.trim\n ? e.target.value.replace(/ /g, '')\n : e.target.value\n this.setState({\n text: text,\n })\n }\n\n onKeyDown = e => {\n if (e.key === 'Escape') {\n this.cancelEditing()\n }\n }\n\n setEditing = () => {\n if (this.props.isNodeView) {\n if (this.props.canEdit) {\n this.setState({\n editing: true,\n })\n } else {\n this.setState({ error: true })\n }\n } else {\n this.setState({\n editing: true,\n })\n }\n }\n\n cancelEditing = () => {\n this.setState({\n editing: false,\n text: this.props.value,\n })\n }\n\n onSubmit = () => {\n this.setState({\n editing: false,\n })\n if (this.state.text !== this.props.value) {\n this.props.onSubmit(this.state.text)\n }\n }\n\n getTooltip = text => {\n return (\n \n {text}\n \n )\n }\n\n getEditInputStyle = () => {\n if (this.props.isNodeView) {\n return {\n ...this.styles.inputStyle,\n ...{\n width:\n this.input && this.input.current && this.input.current.offsetWidth\n ? `${this.input.current.offsetWidth}px`\n : 'auto',\n },\n }\n }\n return this.styles.inputStyle\n }\n\n render() {\n if (this.state.editing || this.props.saving) {\n return (\n \n e.key === 'Enter' && this.onSubmit()}\n placeholder={this.props.placeholder}\n autoFocus\n disabled={this.props.saving}\n />\n \n )\n }\n\n if (this.props.activeNode === false) {\n return (\n
    \n (\n \n
    {this.props.value}
    \n\n {hovered ? (\n
    \n \n
    \n ) : null}\n
    \n )}\n />\n
    Inactive
    \n
    \n )\n }\n\n return (\n
    \n (\n \n
    \n {!this.props.value && this.props.placeholder\n ? this.props.placeholder\n : this.props.value}{' '}\n
    \n {hovered ? (\n
    \n \n {this.getTooltip(this.state.text)}\n
    \n ) : null}\n
    \n )}\n />\n {this.state.error && (\n
    Cannot edit this node type
    \n )}\n
    \n )\n }\n}\n\nInlineEditableText.defaultProps = {\n style: {},\n inputStyle: {},\n canEdit: true,\n}\n\nInlineEditableText.propTypes = {\n value: PropTypes.string.isRequired,\n placeholder: PropTypes.string,\n theme: themeShape,\n onSubmit: PropTypes.func,\n saving: PropTypes.bool,\n style: PropTypes.object,\n inputStyle: PropTypes.object,\n activeNode: PropTypes.bool,\n trim: PropTypes.bool,\n canEdit: PropTypes.bool,\n isNodeView: PropTypes.bool,\n}\n\nexport default themeable(InlineEditableText)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Badge as RSBadge } from 'reactstrap'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport class Badge extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n base: {\n fontSize: '0.9rem',\n fontWeight: '500',\n letterSpacing: '1.2px',\n color: props.theme.light,\n backgroundColor: props.theme.primary,\n borderRadius: '0.8rem',\n padding: '.35em .5em',\n ...props.style,\n },\n }\n }\n\n render() {\n const { style, ...pprops } = this.props //eslint-disable-line no-unused-vars\n\n return \n }\n}\n\nBadge.defaultProps = {\n style: {},\n}\n\nBadge.propTypes = {\n style: PropTypes.object,\n theme: themeShape,\n}\n\nexport default themeable(Badge)\n","export default {\n wrapper: {\n backgroundColor: '#FFFFFF',\n border: '1px solid #E7E7E9',\n borderRadius: '4px',\n padding: '1em',\n position: 'relative',\n },\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport styles from './styles'\n\nexport class BorderedCard extends React.Component {\n render() {\n return (\n \n {this.props.loading ? (\n
    \n \n \n \n {this.props.title && {this.props.title} }\n
    \n ) : (\n this.props.children\n )}\n \n )\n }\n}\n\nBorderedCard.defaultProps = {\n className: '',\n style: {},\n loadingStyle: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n}\n\nBorderedCard.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n loading: PropTypes.bool,\n loadingStyle: PropTypes.object,\n style: PropTypes.object,\n title: PropTypes.string,\n}\n\nexport default BorderedCard\n","/**\n *\n * PageLoader\n *\n */\n\nimport React from 'react'\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\n\nconst styles = {\n centerContent: {\n display: 'flex',\n height: '100vh',\n width: '100vw',\n alignItems: 'center',\n justifyContent: 'center',\n },\n}\n\nclass PageLoader extends React.PureComponent {\n render() {\n return (\n
    \n \n
    \n )\n }\n}\n\nexport default PageLoader\n","module.exports = __webpack_public_path__ + \"e4693939466dbce114a4dd2ff5715442.png\";","export const CRM_ALERT_INDICATOR = 'alertIndicator'\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport { exists } from 'utils/sonraiUtils'\nimport Icon from 'components/Icon'\nimport Hoverable from 'components/Hoverable'\nimport Popover, { PopoverAnchor, PopoverBody } from 'components/Popover'\nimport BorderlessButton from 'components/BorderlessButton'\nimport SearchInput from 'components/SearchInput'\nimport { CRM_ALERT_INDICATOR } from './constants'\nimport { PlainCheckbox } from 'components/Checkbox'\nimport TextLink from 'components/TextLink'\nimport _ from 'lodash'\nconst styles = {\n option: {\n backgroundColor: '#FFFFFF',\n width: '100%',\n padding: '0.5rem',\n margin: '0.5rem 0rem',\n alignSelf: 'center',\n },\n hoveredOption: {\n backgroundColor: '#EEE',\n },\n anchor: {\n fontSize: '0.9em',\n },\n column: {\n backgroundColor: '#FFFFFF',\n width: '100%',\n padding: '0.75rem',\n margin: '0.25rem 0rem',\n alignSelf: 'center',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n mainContainer: { width: '100%', height: '100%' },\n tabContainer: {\n minWidth: '200px',\n minHeight: '250px',\n overflow: 'auto',\n borderRadius: '5px',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: '#FFFFFF',\n boxShadow: '0px 2px 10px 3px rgba(200,200,200,1)',\n opacity: 1,\n },\n tabHeader: {\n height: '30px',\n display: 'flex',\n fontSize: '12px',\n },\n tab: {\n backgroundColor: '#EEE',\n flex: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 0,\n },\n optionsContainer: {\n flex: 1,\n maxHeight: '255px',\n overflow: 'auto',\n fontSize: '13px',\n fontWeight: 400,\n width: '250px',\n },\n filterInput: {\n padding: '0.3em',\n },\n}\n\nexport class TableActions extends React.Component {\n state = {\n main: true,\n column: false,\n open: false,\n filter: '',\n }\n\n setFilter = e => {\n this.setState({\n filter: e.target.value,\n })\n }\n\n getEmptyColumns = () => {\n const { rows } = this.props\n const columnNames = _.keys(_.first(rows))\n let emptyRows = []\n columnNames.forEach(column => {\n rows.forEach(row => {\n if (row[column] === '-' || !exists(row[column])) {\n emptyRows.push(column)\n }\n })\n })\n const countOfEmptyRows = emptyRows.reduce((obj, x) => {\n obj[x] = ++obj[x] || 1\n return obj\n }, {})\n const columnsToHide = _.keys(countOfEmptyRows).filter(key => {\n if (countOfEmptyRows[key] === rows.length) {\n return true\n }\n })\n\n return columnsToHide\n }\n\n hideEmptyColumns = () => {\n const { rows } = this.props\n if (rows && !_.isEmpty(rows)) {\n let columnsToHide = this.getEmptyColumns()\n if (columnsToHide && !_.isEmpty(columnsToHide)) {\n this.props.columnApi.setColumnsVisible(columnsToHide, false)\n }\n }\n }\n\n toggleMenu = () => {\n this.setState(currentState => ({\n open: !currentState.open,\n }))\n }\n\n autoSize = () => {\n const columns = this.props.columnApi\n .getAllGridColumns()\n .filter(col => col.colId !== CRM_ALERT_INDICATOR)\n this.props.columnApi.autoSizeColumns(columns)\n }\n\n toggleMainTab = e => {\n if (!this.state.main) {\n if (this.state.column) {\n this.setState({\n column: false,\n })\n }\n this.setState({\n main: true,\n })\n }\n\n e.stopPropagation()\n }\n\n toggleColumnTab = e => {\n if (!this.state.column) {\n if (this.state.main) {\n this.setState({\n main: false,\n })\n }\n this.setState({\n column: true,\n })\n }\n e.stopPropagation()\n }\n\n handleColumnSelect = column => {\n this.props.columnApi.setColumnVisible(column.colId, column.hide)\n }\n\n handleSelectAllChange = checked => {\n const columns = this.props.columnApi\n .getAllGridColumns()\n .map(col => col.colId)\n\n if (checked) {\n this.props.columnApi.setColumnsVisible(columns, true)\n } else {\n this.props.columnApi.setColumnsVisible(columns, false)\n }\n }\n\n getOptions = () => {\n if (this.state.main) {\n const options = [\n {\n name: 'Hide Empty Columns',\n action: () => {\n this.hideEmptyColumns()\n this.toggleMenu()\n },\n },\n {\n name: 'Expand All',\n action: () => {\n this.props.api.expandAll()\n this.toggleMenu()\n },\n },\n {\n name: 'Collapse All',\n action: () => {\n this.props.api.collapseAll()\n this.toggleMenu()\n },\n },\n {\n name: 'Auto Size All',\n action: () => {\n this.autoSize()\n this.toggleMenu()\n },\n },\n {\n name: 'Reset Columns',\n action: () => {\n this.props.columnApi.resetColumnState()\n this.toggleMenu()\n },\n },\n {\n name: 'Export CSV',\n action: () => {\n this.props.api.exportDataAsCsv({\n fileName: this.props.exportFileName\n ? `${this.props.exportFileName} - ${moment().format(\n 'YYYY-M-D H:mm'\n )}`\n : undefined,\n processCellCallback: ({ column: { colId }, value }) => {\n if (typeof value === 'string') {\n if (\n value.startsWith('=') ||\n value.startsWith('+') ||\n value.startsWith('-') ||\n value.startsWith('@')\n ) {\n return `'${value}'`\n }\n }\n if (\n colId === 'resource' &&\n value &&\n typeof value === 'object'\n ) {\n return value.friendlyName || value.name || value.srn\n }\n\n return value\n },\n })\n this.toggleMenu()\n },\n },\n ]\n return options.map(option => (\n \n {option.name}\n \n ))\n } else {\n let columns = this.props.columnApi\n .getColumnState()\n .map(x => ({\n colId: x.colId,\n hide: x.hide,\n }))\n .filter(col => col.colId !== CRM_ALERT_INDICATOR)\n\n if (this.state.filter) {\n columns = columns.filter(col =>\n col.colId.toLowerCase().includes(this.state.filter.toLowerCase())\n )\n }\n\n columns.sort((a, b) => a.colId.localeCompare(b.colId))\n\n const hasSelectedAll = !_.isEmpty(columns)\n ? columns.filter(col => !col.hide).length === columns.length\n : false\n return (\n
    \n
    \n \n
    \n \n Select All\n \n
    \n {columns.map(column => (\n
    \n {column.colId} \n this.handleColumnSelect(column)}\n />\n
    \n ))}\n \n )\n }\n }\n\n render() {\n return (\n \n \n \n Table Actions\n \n \n \n
    \n \n \n \n \n \n \n
    \n
    {this.getOptions()}
    \n
    \n
    \n )\n }\n}\n\nTableActions.propTypes = {\n active: PropTypes.bool,\n api: PropTypes.object,\n columnApi: PropTypes.object,\n exportFileName: PropTypes.string,\n rows: PropTypes.array,\n}\n\nexport default TableActions\n","//AgGrid reads the props off its direct children when constructing columns\n//rather than actially rendering the AgGridColumn component\n//So we cannot provide a wrapper component to encapsulate the column builder functionality\n//To reduce the size of the AGGridDataTable component, put some of the column logic here\n\nimport React from 'react'\nimport _ from 'lodash'\nimport moment from 'moment'\nimport { exists } from 'utils/sonraiUtils'\n\nimport CloudAccount from 'components/CloudAccount'\n\nconst defaultHiddenColumns = ['__typename']\n\nconst dateColumns = [\n 'activationDate',\n 'createdDate',\n 'deletionDate',\n 'expiryDate',\n 'firstSeen',\n 'grantedSessionDate',\n 'lastAlertDate',\n 'lastModified',\n 'lastProcessed',\n 'lastSeen',\n 'lastUsed',\n 'lastUsedDate',\n 'launchTime',\n 'modifiedDate',\n 'passwordLastUsed',\n 'sessionDate',\n 'startDate',\n 'timestamp',\n 'lastSync',\n 'date',\n 'assumedOn',\n 'EffectivePermission_lastUsedDate',\n 'addedOn',\n]\n\nconst effectivePermissionsFormatter = params => {\n if (!params.value) {\n return ''\n }\n\n if (!params.value.items && exists(params.value.count)) {\n return params.value.count\n }\n\n const items = params.value.items\n\n return JSON.stringify(items)\n}\n\nconst dateTimeFormatter = params => {\n const paramValue = params.value\n\n if (!paramValue || paramValue === 'null' || paramValue === '-') {\n return '-'\n }\n\n if (paramValue.value) {\n //it is part of an grouped row result\n return paramValue.value\n }\n\n if (Number(paramValue)) {\n // oh shoot whaddup gangsta we got a epoch boi up in here\n return moment(Number.parseInt(paramValue)).format('LLL')\n }\n\n if (typeof paramValue !== 'string') {\n //It is the output of an aggregation\n return paramValue\n }\n\n return moment(paramValue).format('LLL')\n}\n\nconst stringFormatter = params => {\n if (params.value === undefined) {\n return ''\n }\n\n return String(params.value)\n}\n\nconst formatBoolean = ({ value }) => {\n let stringifiedVal =\n value !== null && value !== undefined ? value.toString() : ''\n return stringifiedVal\n}\n\nconst countFormatter = params => {\n return params.value.count\n}\n\nconst getFormatterForCol = (field, sampleValue) => {\n if (dateColumns.find(colName => field.includes(colName))) {\n return dateTimeFormatter\n } else if (field.includes('account')) {\n return stringFormatter\n } else if (field.includes('hasEffectivePermission')) {\n return effectivePermissionsFormatter\n } else {\n if (\n typeof sampleValue === 'object' &&\n sampleValue !== null &&\n sampleValue.count !== undefined\n ) {\n return countFormatter\n } else if (typeof sampleValue === 'boolean') {\n return formatBoolean\n } else {\n return undefined\n }\n }\n}\n\nconst getAllowedAggregationFuncs = sampleValue => {\n if (\n typeof sampleValue === 'number' ||\n (typeof sampleValue === 'object' &&\n sampleValue !== null &&\n sampleValue.count !== undefined)\n ) {\n return ['sum', 'avg', 'countUnique', 'min', 'max', 'first', 'last', 'count']\n } else {\n return ['countUnique', 'first', 'last', 'count']\n }\n}\n\nconst sortColumn = (a, b) => {\n if (a === '-' || a === '' || a === null) {\n return -1\n }\n\n if (b === '-' || b === '' || b === null) {\n return 1\n }\n\n if (typeof a === 'string' && typeof b === 'string') {\n return a.localeCompare(b, 'en', { sensitivity: 'base' })\n }\n\n if (typeof a === 'string') {\n //Handle values that have been grouped with uniqCount.\n //String \"a\" should be listed before numeric value \"b\"\n return -1\n }\n\n if (typeof b === 'string') {\n //Handle values that have been grouped with uniqCount\n //numeric \"a\" should be listed after string value \"b\"\n return 1\n }\n\n //Numeric or date values\n return a - b\n}\n\nconst getToolTip = ({ value, valueFormatted }) => {\n if (exists(valueFormatted)) {\n return valueFormatted.toString()\n }\n if (exists(value)) {\n return value.toString()\n }\n}\n\nconst isHiddenByDefault = field => {\n return !!defaultHiddenColumns.find(hiddenColName =>\n field.includes(hiddenColName)\n )\n}\n\nconst getAdditionalConfig = field => {\n if (field === 'account') {\n return {\n //eslint-disable-next-line\n cellRendererFramework: params => {\n return \n },\n width: 180,\n }\n } else {\n return {}\n }\n}\n\nexport default ({\n sampleValue,\n field,\n getColumnName,\n customColumnConfig = {},\n}) => {\n const colName = getColumnName ? getColumnName(field, sampleValue) : field\n const customConfig = customColumnConfig[colName] || {}\n const additionalConfig = getAdditionalConfig(field, sampleValue)\n\n return {\n headerName: _.startCase(colName),\n field: field,\n comparator: sortColumn,\n menuTabs: ['generalMenuTab', 'filterMenuTab'],\n valueFormatter: getFormatterForCol(field, sampleValue),\n allowedAggFuncs: getAllowedAggregationFuncs(sampleValue),\n hide: isHiddenByDefault(field),\n tooltipValueGetter: getToolTip,\n sortable: true,\n filter: true,\n resizable: true,\n ...additionalConfig,\n ...customConfig,\n }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport MarkdownDisplay from 'components/MarkdownDisplay'\n\nconst ExpandRenderer = ({ data, colName }) => {\n return (\n
    \n \n
    \n )\n}\n\nExpandRenderer.propTypes = {\n data: PropTypes.object.isRequired,\n colName: PropTypes.string.isRequired,\n}\n\nexport default ExpandRenderer\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport { Map, fromJS } from 'immutable'\nimport { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { createStructuredSelector } from 'reselect'\nimport { bindActionCreators, compose } from 'redux'\nimport { AgGridReact, AgGridColumn } from '@ag-grid-community/react'\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap'\n\nimport JSONDisplay from 'components/JSONDisplay'\nimport { flattenData, getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { exists, stripTags } from 'utils/sonraiUtils'\nimport TableActions from './TableActions'\nimport getColumnProps from './getColumnProps'\nimport BulkActionToolbar from 'components/BulkActionToolbar'\nimport ActionToolbar from 'components/ActionToolbar'\nimport SearchInput from 'components/SearchInput'\nimport TextLink from 'components/TextLink'\nimport './styles.css'\nimport { CRM_ALERT_INDICATOR } from './constants'\nimport { BlockShimmer } from 'components/ShimmerLoader'\nimport ShowPathModal from 'containers/AccessActivity/ShowPathModal'\n\nimport ExpandRenderer from './ExpandRenderer'\n\nconst styles = {\n tableContainer: {\n gridArea: 'table',\n overflow: 'hidden', //Required to make tables stay in widget card. See https://www.ag-grid.com/javascript-grid-responsiveness/\n },\n mainContainer: {\n display: 'grid',\n position: 'relative',\n gridTemplateRows: 'auto 1fr',\n gridTemplateAreas: '\"header\" \"table\"',\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n },\n headerContainer: {\n height: '45px',\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n },\n selectAllButton: {\n fontSize: '0.9rem',\n padding: '0.45rem',\n margin: '0rem 0rem 0rem 0.75rem',\n // border: '1px solid #74B4DF',\n },\n loadingOverlay: {\n opacity: 0.7,\n backgroundColor: '#eee',\n position: 'absolute',\n borderRadius: '4px',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: '100%',\n height: '100%',\n },\n}\n\nexport class AGGridDataTable extends React.Component {\n containerRef = React.createRef()\n state = {\n loaded: false,\n quickFilter: '',\n isIdentityChainModalOpen: false,\n pathData: Map(),\n sourceName: null,\n json: null,\n }\n\n componentWillUnmount() {\n this.api = null\n this.columnApi = null\n }\n\n constructor(props) {\n super(props)\n this.state = {\n rows: this.getRows(props.data),\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.data !== this.props.data) {\n this.setState({ rows: this.getRows(this.props.data) })\n }\n }\n\n hasGrouping = () => {\n const columnApi = this.getColumnApi()\n if (columnApi) {\n const groupColumns = columnApi.getRowGroupColumns()\n if (groupColumns && groupColumns.length > 0) {\n return true\n }\n }\n return false\n }\n\n getCleanData = data => {\n if (_.isEmpty(data)) {\n return []\n }\n\n let newData = _.cloneDeep(data)\n\n if (newData[Object.keys(newData)[0]].items) {\n newData = newData[Object.keys(newData)[0]].items\n }\n\n return newData || []\n }\n\n getRows = data => {\n if (data && !_.isArray(data)) {\n const key = _.first(_.keys(data))\n data = _.get(data, [key, 'items'], [])\n }\n const strippedData = (data || []).map(row => {\n let safeRow = { ...row }\n Object.keys(row).forEach(col => {\n if (typeof safeRow[col] === 'string') {\n safeRow[col] = stripTags(safeRow[col])\n }\n })\n return safeRow\n })\n if (this.props.flatten) {\n const cleanData = this.getCleanData(strippedData)\n return flattenData(cleanData)\n } else {\n return strippedData\n }\n }\n\n groupHeaderName = () => {\n if (this.hasGrouping()) {\n return `Grouped By ${\n this.getColumnApi().getRowGroupColumns()[0].colDef.headerName\n }`\n } else {\n return 'Grouped'\n }\n }\n\n headerValueGetter = params => {\n if (\n params.location === 'header' &&\n this.hasGrouping() &&\n params.column.aggFunc\n ) {\n return `${params.colDef.headerName} (${params.column.aggFunc})`\n } else {\n return `${params.colDef.headerName}`\n }\n }\n groupedBy = values => {\n const types = values.map(x => typeof x)\n if (!types.includes('undefined') && !types.includes('object')) {\n return _.uniq(values).join(', ')\n }\n }\n\n onGridReady = params => {\n this.api = params.api\n this.columnApi = params.columnApi\n\n this.api.setPopupParent(document.querySelector('body'))\n const allCols = this.columnApi.getAllGridColumns() || []\n\n if (this.props.autosize) {\n const columnsStateWidthOverrides = new Set() // eslint-disable-line no-restricted-globals\n if (this.props.gridState.columnState) {\n this.props.gridState.columnState.forEach(columnState => {\n if (columnState.width) {\n columnsStateWidthOverrides.add(columnState.colId)\n }\n })\n }\n this.columnApi.autoSizeColumns(\n allCols.filter(\n col =>\n !columnsStateWidthOverrides.has(col.colId) &&\n !col.colId.includes('Set')\n )\n )\n }\n\n if (this.props.groupBy) {\n this.columnApi.setRowGroupColumns([this.props.groupBy])\n }\n\n this.setState({\n loaded: true,\n })\n\n if (this.props.onLoad) {\n this.props.onLoad({\n api: params.api,\n columnApi: params.columnApi,\n })\n }\n }\n\n filterOutCell = (cell, rows) => {\n const filterModel = this.getApi().getFilterModel() || {}\n\n const filterState = _.get(filterModel, [cell.colId, 'values'], {})\n const columnIdValues = _.isEmpty(filterState)\n ? _.uniq(rows.map(row => row[cell.colId]))\n : filterState\n const filteredColumnIdValues = columnIdValues.filter(\n id => id !== cell.value\n )\n\n this.getApi().setFilterModel({\n [cell.colId]: {\n filterType: 'set',\n values: filteredColumnIdValues,\n },\n })\n }\n\n filterInCell = cell =>\n this.getApi().setFilterModel({\n [cell.colId]: {\n filterType: 'set',\n values: [`${cell.value}`],\n },\n })\n\n getContextMenuItems = (items, rows) => {\n const standard = [...items.defaultItems]\n const exportIndex = standard.indexOf('export')\n if (exportIndex > -1) {\n standard.splice(exportIndex, 1)\n }\n\n const toolPanelIndex = standard.indexOf('toolPanel')\n if (toolPanelIndex > -1) {\n standard.splice(toolPanelIndex, 1)\n }\n\n const cell = {\n colId: items.column.colId,\n value: items.value,\n }\n\n const contextMenuItems = [\n ...standard,\n {\n name: 'Cell Filters',\n subMenu: [\n {\n name: `Exclude ${cell.value}`,\n action: () => this.filterOutCell(cell, rows),\n },\n {\n name: `Show only ${cell.value}`,\n action: () => this.filterInCell(cell),\n },\n ],\n },\n ]\n\n return contextMenuItems\n }\n\n countUnique = values => {\n const uniqueValues = new Set(values) //eslint-disable-line no-restricted-globals\n const count = uniqueValues.size\n return count === 1 ? values[0] : count\n }\n\n getMainMenuItems = ({ column, columnApi, defaultItems }) => {\n const itemsToExclude = [\n 'resetColumns',\n 'toolPanel',\n 'autoSizeAll',\n 'expandAll',\n 'contractAll',\n ]\n\n const items = defaultItems.filter(x => !itemsToExclude.includes(x))\n\n const groupedColumns = columnApi.getRowGroupColumns()\n const isGrouped = groupedColumns.find(col => col.colId === column.colId)\n if (isGrouped) {\n items.push('rowUnGroup')\n } else if (!_.get(column, ['colDef', 'enableRowGroup'])) {\n items.push('rowGroup')\n }\n\n if (_.get(column, ['colDef', 'showRowGroup'])) {\n //expand/collapse only works on autogrouped column\n items.push('expandAll')\n items.push('contractAll')\n } else {\n //hide column function doesn't work on the AutoGroup column\n items.push({\n name: 'Hide Column',\n action: () => {\n columnApi.setColumnVisible(column.colId, false)\n },\n })\n }\n\n return items\n }\n\n getApi = () => {\n return this.api\n }\n\n getColumnApi = () => {\n return this.columnApi\n }\n\n onDoubleClickPathNode = ({ nodes }) => {\n if (nodes.length > 0) {\n const srn = nodes[0]\n\n if (srn.startsWith('srn:')) {\n this.props.push(getNodeViewPushParams(srn, getTypeFromSrn(srn)))\n }\n }\n }\n\n toggleIsIdentityChainModalOpen = () => {\n this.setState(prevState => {\n return { isIdentityChainModalOpen: !prevState.isIdentityChainModalOpen }\n })\n }\n\n setJSON = value => {\n this.setState({\n json: value,\n })\n }\n\n showEPPath = data => {\n if (data.EffectivePermission_identityChain) {\n const chain = data.EffectivePermission_identityChain.split(',')\n chain.push(data.EffectivePermission_policySrn)\n const name = data[Object.keys(data).find(col => col.includes('name'))]\n this.setState({\n epPathData: fromJS([chain]),\n epSourceName: name,\n isIdentityChainModalOpen: true,\n })\n }\n }\n\n getColumns = rows => {\n if (rows !== undefined && rows.length > 0) {\n const sampleRow = rows[0]\n let columns = Object.keys(sampleRow)\n\n let cols = columns.map(col => {\n const sampleValue = sampleRow[col]\n let columnConfig = getColumnProps({\n field: col,\n sampleValue,\n getColumnName: this.props.getColumnName,\n customColumnConfig: this.props.customColumnConfig,\n })\n\n if (this.props.crm && col === 'highestAlertSeverity') {\n columnConfig.sort = 'desc'\n columnConfig.hide = true\n }\n\n if (\n this.props.hiddenColumns &&\n this.props.hiddenColumns.includes(col)\n ) {\n columnConfig.hide = true\n }\n\n // if flex or maxWidth not set, make default max column width\n const { flex, maxWidth } =\n (this.props.customColumnConfig || {})[col] || {}\n if (!flex && !maxWidth) {\n columnConfig.maxWidth = 900\n }\n\n if (col === this.props.expandCollapseColumn) {\n columnConfig.flex = 1\n columnConfig.minWidth = 400\n columnConfig.tooltip = params => {\n if (\n !params.value ||\n typeof params.value !== 'string' ||\n params.value.trim().length === 0\n ) {\n return ''\n }\n\n if (params.value.length > 40) {\n return params.value.slice(0, 40) + '...'\n }\n\n return params.value\n }\n columnConfig.cellRendererFramework = params => {\n if (!params.data) {\n return\n }\n\n if (\n !params.value ||\n typeof params.value !== 'string' ||\n params.value.trim().length === 0\n ) {\n return ''\n }\n\n return (\n \n {params.value.length > 40\n ? params.value.slice(0, 40) + '...'\n : params.value}\n {\n params.node.setExpanded(!params.node.expanded)\n }}\n style={{ marginLeft: '0.3em' }}\n >\n (Toggle Expand)\n \n \n )\n }\n }\n\n //For AnalyticsResults.data, default to show it as JSON modal\n if (col === 'data' || this.props.jsonCols.includes(col)) {\n columnConfig.pinned = 'right'\n columnConfig.minWidth = 200\n columnConfig.cellRendererFramework = params => {\n if (params.value && typeof params.value === 'object') {\n return (\n this.setJSON(params.value)}\n >\n (Show JSON Values)\n \n )\n } else {\n return params.value\n }\n }\n }\n\n return columnConfig\n })\n\n // set default column aggregation functions\n cols.forEach(columnConfig => {\n // if it can be aggregated, set the agg func to count unique\n if (columnConfig.aggFunc) {\n columnConfig.aggFunc = 'countUnique'\n if (this.props.groupBy) {\n columnConfig.aggFunc = 'groupBy'\n }\n }\n })\n\n cols = cols.map(columnConfig => {\n return (\n \n )\n })\n\n if (\n columns.includes('EffectivePermission_identityChain') &&\n columns.includes('EffectivePermission_policySrn')\n ) {\n cols.push(\n {\n if (\n !params.data ||\n !params.data.EffectivePermission_identityChain ||\n !params.data.EffectivePermission_policySrn\n ) {\n return ''\n }\n\n return (\n this.showEPPath(params.data)}\n >\n Show Path\n \n )\n }}\n />\n )\n }\n\n if (this.props.crm) {\n cols.push(\n ''}\n suppressMenu={true}\n suppressSizeToFit={true}\n suppressMovable={true}\n maxWidth={10}\n minWidth={10}\n />\n )\n }\n\n return cols\n }\n }\n\n setRowStyle = row => {\n if (this.props.selectedNode && row.data.srn == this.props.selectedNode) {\n return { background: '#F9FBFF' }\n }\n return\n }\n\n handleRowSelection = obj => {\n if (this.props.selectedNode !== undefined) {\n this.props.selectNode({ node: obj.data.srn })\n }\n }\n\n handleChecked = obj => {\n if (this.props.rowSelected) {\n this.props.rowSelected(obj)\n }\n }\n\n isFirstColumn = params => {\n if (!this.props.multiRowSelect && !this.props.hasCheckBoxes) {\n return false\n }\n\n if (params.column.rowGroupActive) {\n return false\n }\n\n const displayedColumns = params.columnApi.getAllDisplayedColumns()\n\n if (\n this.props.crm &&\n displayedColumns[0].colId === CRM_ALERT_INDICATOR &&\n displayedColumns.length > 1\n ) {\n return displayedColumns[1] === params.column\n }\n\n if (displayedColumns.length > 0) {\n return displayedColumns[0] === params.column\n }\n\n return false\n }\n\n hasHeaderCheckboxSelection = params => {\n if (\n this.isFirstColumn(params) &&\n !this.props.crm &&\n !this.props.supressSelectAll\n ) {\n return true\n }\n\n return false\n }\n\n handleSearchBarChange = ({ target: { value } }) => {\n this.setState({ quickFilter: value })\n this.setQuickFilter(value)\n }\n\n /**\n * Debounce setting the quick filter so the app doesn't hang filtering\n * big big table while user is trying to type\n */\n setQuickFilterNOW = value => this.api.setQuickFilter(value)\n setQuickFilter = _.debounce(this.setQuickFilterNOW, 150, {\n leading: false,\n trailing: true,\n })\n\n renderSearchBar = rows => {\n if (this.state.loaded) {\n if (this.props.customFilter && !this.props.disableSearchBar) {\n return (\n
    \n \n {this.props.customFilter()}\n
    \n )\n }\n\n if (\n !this.props.customFilter &&\n !this.props.disableSearchBar &&\n rows.length > 0\n ) {\n return (\n \n )\n }\n } else {\n return (\n
    \n \n
    \n )\n }\n }\n\n renderToolbar = rows => {\n if (this.props.noTableActions) {\n return (\n \n {this.renderSearchBar(rows)} \n \n )\n }\n\n if (\n (this.props.bulkActionWorking ||\n this.props.checkboxSelectedRows.length !== 0) &&\n this.props.bulkActions\n ) {\n return (\n \n {this.props.bulkActions}\n \n )\n }\n\n if (this.props.actions) {\n return (\n \n {this.renderSearchBar(rows)}\n \n \n
    {this.props.actions}
    \n {this.state.loaded &&\n rows.length > 0 &&\n this.containerRef.current ? (\n
    \n \n
    \n ) : (\n  \n )}\n \n
    \n
    \n )\n }\n\n if (this.state.loaded && rows.length > 0 && this.containerRef.current) {\n return (\n \n {this.renderSearchBar(rows)}\n \n \n \n \n )\n }\n\n return (\n \n {this.renderSearchBar(rows)}\n \n  \n
    \n \n )\n }\n\n getIndicatorColClass = params => {\n if (!params.data) return ['alertLevel-0']\n\n const highestAlertSeverity = params.data.highestAlertSeverity\n if (!exists(highestAlertSeverity)) return ['alertLevel-0']\n\n const approxSeverity = Math.floor(highestAlertSeverity / 10)\n\n if (approxSeverity >= 0 && approxSeverity <= 1) {\n return ['alertLevel-1']\n }\n\n if (approxSeverity >= 1 && approxSeverity <= 10) {\n return [`alertLevel-${approxSeverity}`]\n }\n\n if (approxSeverity > 10) {\n return ['alertLevel-10']\n }\n\n return ['alertLevel-0']\n }\n\n processCellForClipboard = ({ value }) => {\n if (value) {\n if (typeof value === 'object') {\n const { name, srn } = value\n return name || srn\n }\n return value\n }\n }\n\n getRowSelection = () => {\n if (this.props.multiRowSelect || this.props.hasCheckBoxes) {\n return 'multiple'\n }\n\n return undefined\n }\n\n getHeightOfVisibleRows = rows => {\n const headerHeight = 35\n const rowHeight = 50\n const tablePadding = 15\n const pageSize = this.props.pageSize\n const hasPagination = rows.length > pageSize\n const paginationFooterHeight = 55\n const toolbarHeight =\n this.props.disableSearchBar && this.props.noTableActions ? 0 : 35\n\n const aggridStuff =\n headerHeight + toolbarHeight + tablePadding + toolbarHeight\n\n if (hasPagination) {\n return aggridStuff + rowHeight * pageSize + paginationFooterHeight\n }\n\n return rowHeight * rows.length + aggridStuff\n }\n\n getExpandCollapseColConfig = () => {\n if (!this.props.expandCollapseColumn) {\n return {}\n }\n\n return {\n groupUseEntireRow: true,\n masterDetail: true,\n detailCellRenderer: 'expandRenderer',\n frameworkComponents: {\n expandRenderer: params => (\n \n ),\n },\n detailCellRendererParams: {\n detailGridOptions: {\n columnDefs: [{ field: this.props.expandCollapseColumn }],\n defaultColDef: { flex: 1 },\n },\n getDetailRowData: function (params) {\n params.successCallback([\n {\n [this.props.expandCollapseColumn]:\n params.data[this.props.expandCollapseColumn],\n },\n ])\n },\n },\n }\n }\n\n render() {\n const rows = this.state.rows\n\n const onRowSelected = this.props.hasCheckBoxes\n ? this.handleChecked\n : this.handleRowSelection\n\n const pageSize = this.props.pageSize\n const hasPagination = rows.length > pageSize\n\n //Have to put a blank space when not showing table actions because the table only checks its size on initial render\n //Without it, it was always overflowing its container when the actions loaded in\n\n return (\n \n {this.props.disableSearchBar && this.props.noTableActions ? (\n
    \n ) : (\n
    {this.renderToolbar(rows)}
    \n )}\n\n \n {!this.state.loaded &&
    }\n this.setRowStyle(row)}\n sortable\n filter\n resizable\n enableBrowserTooltips\n suppressDragLeaveHidesColumns={\n this.props.suppressDragLeaveHidesColumns\n }\n defaultColDef={{\n // only pass func if to checkboxSelection if checkboxes available,\n // to save render time on tables w/out checkboxes. if func passed\n // ag-grid will always render checkbox but hide, otherwise it wont\n // render at all = faster\n checkboxSelection:\n (this.props.hasCheckBoxes || this.props.multiRowSelect) &&\n this.isFirstColumn,\n headerCheckboxSelection: this.hasHeaderCheckboxSelection,\n headerCheckboxSelectionFilteredOnly: true,\n width: this.props.columnWidth,\n sortable: true,\n ...this.props.defaultColDef,\n }}\n rowData={rows}\n getContextMenuItems={items => this.getContextMenuItems(items, rows)}\n suppressAggFuncInHeader={true}\n autoGroupColumnDef={{\n headerValueGetter: this.groupHeaderName,\n resizable: true,\n }}\n suppressMenuHide\n getMainMenuItems={this.getMainMenuItems}\n onSelectionChanged={this.props.selectionChanged}\n suppressRowClickSelection={this.props.hasCheckBoxes}\n pagination={hasPagination}\n paginationPageSize={pageSize}\n suppressMakeColumnVisibleAfterUnGroup\n {...this.getExpandCollapseColConfig()}\n {...this.props.customGridProps}\n cacheQuickFilter={rows.length > 25}\n overlayNoRowsTemplate={this.props.overlayNoRowsTemplate}\n >\n {this.getColumns(rows)}\n \n
    \n\n {this.state.epPathData && this.state.isIdentityChainModalOpen && (\n \n )}\n {this.state.json && (\n this.setJSON(null)} size=\"lg\">\n this.setJSON(null)}>\n JSON details\n \n \n \n \n \n )}\n
    \n )\n }\n}\n\nAGGridDataTable.defaultProps = {\n autosize: true,\n checkboxSelectedRows: [],\n flatten: false,\n jsonCols: [],\n style: {},\n sortColumns: true,\n pageSize: 25,\n gridState: {},\n}\n\nAGGridDataTable.propTypes = {\n actions: PropTypes.node,\n bulkActions: PropTypes.node,\n bulkActionWorking: PropTypes.bool,\n checkboxSelectedRows: PropTypes.array,\n autosize: PropTypes.bool,\n customColumnConfig: PropTypes.object,\n customGridProps: PropTypes.object,\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n exportFileName: PropTypes.string,\n expandCollapseColumn: PropTypes.string,\n fitAllRows: PropTypes.bool,\n getColumnName: PropTypes.func,\n gridState: PropTypes.shape({\n columnGroupState: PropTypes.array,\n columnState: PropTypes.array,\n sortModel: PropTypes.array,\n filterModel: PropTypes.array,\n options: PropTypes.object,\n }),\n flatten: PropTypes.bool,\n jsonCols: PropTypes.arrayOf(PropTypes.string),\n onLoad: PropTypes.func,\n rowSelected: PropTypes.func,\n style: PropTypes.object,\n selectedNode: PropTypes.string,\n selectNode: PropTypes.func,\n selectionChanged: PropTypes.func,\n sortColumns: PropTypes.bool,\n multiRowSelect: PropTypes.bool,\n noTableActions: PropTypes.bool,\n columnWidth: PropTypes.number,\n hasCheckBoxes: PropTypes.bool,\n onCellEditingStopped: PropTypes.func,\n sortColumnByType: PropTypes.string,\n crm: PropTypes.bool,\n groupBy: PropTypes.string,\n onDoubleClickRow: PropTypes.func,\n pageSize: PropTypes.number,\n hiddenColumns: PropTypes.array,\n overlayNoRowsTemplate: PropTypes.string,\n defaultColDef: PropTypes.object,\n suppressDragLeaveHidesColumns: PropTypes.bool,\n disableSearchBar: PropTypes.bool,\n customFilter: PropTypes.func,\n push: PropTypes.func,\n supressSelectAll: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(AGGridDataTable)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List, Map } from 'immutable'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\n\nimport AGGridDataTable from './AGGridDataTable'\n\nexport class ConfigurableTable extends React.Component {\n componentDidUpdate(oldProps) {\n if (\n this.props.onRowCountChange &&\n oldProps.data.length !== this.props.data.length\n ) {\n setTimeout(function () {\n this.props.onRowCountChange()\n }, 500)\n }\n }\n\n componentWillUnmount() {\n this.api = null\n this.columnApi = null\n }\n\n getGridState = () => {\n if (!this.api || !this.columnApi) {\n return {}\n }\n\n return {\n columnGroupState: this.columnApi.getColumnGroupState(),\n columnState: this.columnApi.getColumnState(),\n sortModel: this.api.getSortModel(),\n filterModel: this.api.getFilterModel(),\n options: {},\n }\n }\n\n saveColumnsState = () => {\n const { options } = this.props\n const gridState = this.getGridState()\n\n if (this.props.onLayoutChange) {\n if (!options.gridState || !_.isEqual(gridState, options.gridState)) {\n const newOptions = {\n ...options,\n gridState,\n }\n\n this.props.onLayoutChange(newOptions)\n }\n } else {\n //This will trigger rerender when hiding/showing columns on tables without passed-down gridState\n this.setState({\n options: gridState,\n })\n }\n\n if (!_.isEmpty(gridState) && this.props.setUserProfileTables) {\n this.props.setUserProfileTables(\n gridState,\n this.props.set,\n this.props.id,\n this.props.userProfile.toJS()\n )\n }\n }\n\n handleRowDoubleClick = event => {\n if (!event.data) {\n return\n }\n\n if (this.props.onDoubleClickRow) {\n this.props.onDoubleClickRow(event.data)\n }\n\n if (this.props.onClickNodeView) {\n if (event.data.__typename) {\n this.props.onClickNodeView(event.data.srn, event.data.__typename)\n return\n } else if (event.data.srn) {\n this.props.onClickNodeView(\n event.data.srn,\n getTypeFromSrn(event.data.srn)\n )\n return\n }\n }\n\n if (this.props.flatten && this.props.onClickFlattenedNodeView) {\n this.props.onClickFlattenedNodeView(event.data)\n }\n }\n\n handleRowSingleClick = event => {\n if (!event.data) {\n return\n }\n\n if (event.data.srn && this.props.onSingleClickNodeView) {\n this.props.onSingleClickNodeView(\n event.data.srn,\n getTypeFromSrn(event.data.srn) || event.data.__typename\n )\n }\n\n if (this.props.flatten && this.props.onSingleClickFlattenedNodeView) {\n this.props.onSingleClickFlattenedNodeView(event.data)\n }\n }\n\n loadColumnState = gState => {\n if (!this.columnApi || !this.api) {\n return\n }\n\n if (gState.columnState) {\n const cols = this.columnApi.getAllColumns() || []\n const gridColumnIds = cols.map(col => col.colId)\n const optionColumnIds = gState.columnState.map(col => col.colId)\n\n //If somehow the saved gridstate got out of sync and has extra columns\n //This will avoid a warning in the console\n const validColumnsFromOptions = gState.columnState.filter(col =>\n gridColumnIds.includes(col.colId)\n )\n\n //If somehow the saved gridState got out of sync, and left out a column that is present\n //We want to still include those columns\n const extraColumns = this.getGridState().columnState.filter(\n col => !optionColumnIds.includes(col.colId)\n )\n\n this.columnApi.setColumnState(\n validColumnsFromOptions.concat(extraColumns)\n )\n }\n\n if (gState.columnGroupstate) {\n this.columnApi.setColumnGroupState(gState.columnGroupState)\n }\n\n if (gState.sortModel) {\n this.api.setSortModel([\n ...this.getGridState().sortModel.filter(\n sortModelConfig =>\n !gState.sortModel.find(col => col.colId === sortModelConfig.colId)\n ),\n ...gState.sortModel,\n ])\n }\n\n if (gState.filterModel) {\n this.api.setFilterModel(gState.filterModel)\n }\n }\n\n onLoad = ({ api, columnApi }) => {\n const { options } = this.props\n this.api = api\n this.columnApi = columnApi\n\n const userPreferenceState = this.getUserPreferenceGridState()\n if (!_.isEmpty(userPreferenceState)) {\n this.loadColumnState(userPreferenceState)\n } else if (options.gridState) {\n this.loadColumnState(options.gridState)\n }\n\n this.api.addGlobalListener((type, event) => {\n if (\n type === 'columnVisible' ||\n type === 'columnPinned' ||\n type === 'columnResized' ||\n type === 'columnMoved' ||\n type === 'sortChanged' ||\n type === 'filterChanged' ||\n type === 'filterModified' ||\n type === 'displayedColumnsChanged' ||\n type === 'columnValueChanged'\n ) {\n this.saveColumnsState()\n } else if (type === 'rowDoubleClicked') {\n this.handleRowDoubleClick(event)\n } else if (type === 'rowClicked') {\n this.handleRowSingleClick(event)\n }\n })\n\n if (this.props.onLoad) {\n this.props.onLoad({ api, columnApi })\n }\n }\n\n getUserPreferenceGridState = () => {\n if (this.props.userProfile) {\n const { id, set } = this.props\n const widgets = this.props.userProfile.getIn(\n ['tables', set, 'widgets'],\n List()\n )\n const match = widgets.find(widget => widget.get('id') == id)\n\n if (match) {\n return match.toJS().grid\n } else {\n return {}\n }\n }\n }\n\n getColumnName = (col, sampleItem) => {\n let colName = col\n if (\n typeof sampleItem === 'object' &&\n sampleItem !== null &&\n sampleItem.items === undefined &&\n sampleItem.count !== undefined\n ) {\n colName = `${this.getRelationHeaderName(\n col,\n sampleItem['__typename']\n )} Count`\n }\n\n if (col.toLowerCase().startsWith('qf')) {\n if (!_.isEmpty(this.props.customColumnHeaders)) {\n colName = _.get(\n this.props.customColumnHeaders.find(\n column => column.fieldName === col\n ),\n 'alias'\n )\n } else {\n if (col.split('_').length > 0) {\n colName = _.last(col.split('_'))\n }\n }\n }\n\n return colName\n }\n\n getRelationHeaderName = (edgeName = '', edgeTypeName = '') => {\n const mainTypeName = edgeTypeName.replace(/EdgeRelation$/, '')\n const typeRelations =\n this.props.relations.find(\n relation => relation.get('type') === mainTypeName\n ) || Map()\n\n const childRelation =\n typeRelations\n .get('relations', List())\n .find(relation => relation.get('reverse') == edgeName) || Map()\n\n const parentRelation =\n typeRelations\n .get('relations', List())\n .find(relation => relation.get('name') == edgeName) || Map()\n\n if (!childRelation.isEmpty() && parentRelation.isEmpty()) {\n return `${edgeName} ${childRelation.get('from')}`\n }\n\n if (!parentRelation.isEmpty() && childRelation.isEmpty()) {\n return `${edgeName} ${parentRelation.get('to')}`\n }\n\n return edgeName\n }\n\n render() {\n return (\n \n )\n }\n}\n\nConfigurableTable.defaultProps = {\n options: {},\n relations: List(),\n}\n\nConfigurableTable.propTypes = {\n actions: PropTypes.node,\n autosize: PropTypes.bool,\n bulkActions: PropTypes.arrayOf(PropTypes.node),\n bulkActionWorking: PropTypes.bool,\n checkboxSelectedRows: PropTypes.array,\n customColumnConfig: PropTypes.object,\n customGridProps: PropTypes.object,\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n exportFileName: PropTypes.string,\n expandCollapseColumn: PropTypes.string,\n flatten: PropTypes.bool,\n fitAllRows: PropTypes.bool,\n id: PropTypes.string,\n jsonCols: PropTypes.arrayOf(PropTypes.string),\n options: PropTypes.object,\n onLayoutChange: PropTypes.func,\n onClickNodeView: PropTypes.func,\n onClickFlattenedNodeView: PropTypes.func,\n onRowCountChange: PropTypes.func,\n onSingleClickNodeView: PropTypes.func,\n onSingleClickFlattenedNodeView: PropTypes.func,\n relations: ImmutablePropTypes.list,\n setUserProfileTables: PropTypes.func,\n set: PropTypes.string,\n style: PropTypes.object,\n userProfile: PropTypes.object,\n selectedNode: PropTypes.string,\n selectNode: PropTypes.func,\n selectionChanged: PropTypes.func,\n sortColumns: PropTypes.bool,\n multiRowSelect: PropTypes.bool,\n columnWidth: PropTypes.number,\n hasCheckBoxes: PropTypes.bool,\n rowSelected: PropTypes.func,\n onCellEditingStopped: PropTypes.func,\n onLoad: PropTypes.func,\n crm: PropTypes.bool,\n rowHeight: PropTypes.bool,\n sortColumnByType: PropTypes.string,\n groupBy: PropTypes.string,\n onDoubleClickRow: PropTypes.func,\n pageSize: PropTypes.number,\n customColumnHeaders: PropTypes.array,\n hiddenColumns: PropTypes.array,\n noTableActions: PropTypes.bool,\n overlayNoRowsTemplate: PropTypes.string,\n defaultColDef: PropTypes.object,\n suppressDragLeaveHidesColumns: PropTypes.bool,\n disableSearchBar: PropTypes.bool,\n customFilter: PropTypes.func,\n supressSelectAll: PropTypes.bool,\n}\n\nexport default ConfigurableTable\n","import Color from 'color'\nimport { getIconMapping } from 'utils/sonraiUtils'\n\nexport const getIcon = (type = '') => {\n return getIconMapping(type).unicode\n}\n\nexport const getColor = (type = '', theme, typeColors) => {\n type = type.toLowerCase()\n\n if (type && typeColors && typeColors[type]) {\n return typeColors[type]\n }\n\n if (!type) {\n return '#000000'\n }\n\n if (type === 'rollup') {\n return '#000000'\n }\n\n if (\n type.includes('type') ||\n type.includes('classification') ||\n (type.includes('group') && type !== 'group')\n ) {\n return theme.secondary\n }\n\n if (\n type.includes('platform') ||\n type === 'parameter' ||\n type === 'property' ||\n type.includes('variable')\n ) {\n return Color(theme.primary)\n .darken(0.5)\n .hex()\n }\n\n if (\n type === 'region' ||\n type === 'availabilityzone' ||\n type === 'location' ||\n type === 'subdivision' ||\n type === 'country' ||\n type === 'city'\n ) {\n return Color(theme.emphasis)\n .red(250)\n .hex()\n }\n\n return theme.primary\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Breadcrumb as RSBreadcrumb, BreadcrumbItem } from 'reactstrap'\n\nexport const Breadcrumb = ({ children }) => {\n return {children}\n}\n\nBreadcrumb.propTypes = {\n children: PropTypes.node,\n}\n\nexport default Breadcrumb\nexport { BreadcrumbItem }\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport CenterContent from 'components/CenterContent'\nimport Icon from 'components/Icon'\n\nexport const EmptySection = ({ children, icon, style }) => {\n const styles = {\n text: {\n fontSize: '1.5em',\n fontWeight: 'bold',\n color: '#aaa',\n },\n }\n\n return (\n \n
    \n {icon && (typeof icon === 'string' ? : icon)}\n
    {children}
    \n
    \n
    \n )\n}\n\nEmptySection.propTypes = {\n children: PropTypes.node,\n icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n style: PropTypes.object,\n}\n\nexport default EmptySection\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\n\nexport const ToolbarItem = ({\n iconName,\n onClick,\n children,\n disabled,\n spin,\n color,\n}) => {\n const styles = {\n toolbarButton: {\n display: 'inline-flex',\n alignItems: 'center',\n marginRight: '1em',\n },\n iconStyle: {\n marginRight: '0.3em',\n fontSize: '1em',\n color: color ? color : undefined,\n },\n }\n\n return (\n \n {iconName && (\n \n )}\n {children}\n \n )\n}\n\nToolbarItem.propTypes = {\n disabled: PropTypes.bool,\n iconName: PropTypes.string,\n onClick: PropTypes.func,\n children: PropTypes.node,\n spin: PropTypes.bool,\n color: PropTypes.string,\n}\nexport default ToolbarItem\n","import React from 'react'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport const ToolbarDivider = ({ theme }) => {\n const styles = {\n container: {\n height: '1.5em',\n borderRight: `1px solid ${theme.neutralMedium}`,\n margin: 'auto 0.7em',\n },\n }\n\n return
    \n}\n\nToolbarDivider.propTypes = {\n theme: themeShape,\n}\nexport default themeable(ToolbarDivider)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Icon from 'components/Icon'\n\nexport const ActionToolbar = ({ hidden, children, theme, working, style }) => {\n const styles = {\n toolbar: {\n padding: '0.5em 1em',\n backgroundColor: theme.highlight,\n display: 'flex',\n },\n spinnerContainer: {\n flex: 1,\n textAlign: 'right',\n color: theme.neutralMedium,\n },\n }\n\n if (hidden) {\n return null\n }\n\n return (\n
    \n {React.Children.map(children, child => {\n if (!child) {\n return null\n }\n\n return React.cloneElement(child, {\n disabled: working || child.props.disabled,\n })\n })}\n {working && (\n
    \n \n
    \n )}\n
    \n )\n}\n\nActionToolbar.defaultProps = {\n style: {},\n}\n\nActionToolbar.propTypes = {\n children: PropTypes.node,\n hidden: PropTypes.bool,\n style: PropTypes.object,\n theme: themeShape,\n working: PropTypes.bool,\n}\nexport default themeable(ActionToolbar)\nexport { default as ToolbarItem } from './ToolbarItem'\nexport { default as ToolbarDivider } from './ToolbarDivider'\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\nimport { getCurrentOrg } from 'auth/current-org'\n\nconst selectUser = (state, props) => {\n return props.userData || new Map()\n}\n\nconst selectAppMeta = createSelector(\n selectUser,\n user => {\n return user.get('https://sonraisecurity.com/appMeta', Map())\n }\n)\n\nconst selectEnvKey = createSelector(\n selectUser,\n user => {\n return user.get('https://sonraisecurity.com/env')\n }\n)\n\nconst selectEnvConfig = createSelector(\n [selectAppMeta, selectEnvKey],\n (appMeta, envKey) => {\n return appMeta.get(envKey, Map())\n }\n)\n\nconst selectCurrentOrgConfig = createSelector(\n [selectEnvConfig],\n config => {\n const currentOrg = getCurrentOrg()\n return config\n .get('orgs', List())\n .find(orgConf => orgConf.get('name') === currentOrg, null, Map())\n }\n)\n\nexport const selectFeatureFlagConfig = createSelector(\n selectCurrentOrgConfig,\n config => config.get('feature_flags', Map())\n)\n","/**\n *\n * FeatureFlags\n *\n */\n\nimport React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport createFlags from 'flag'\nimport { compose } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { selectFeatureFlagConfig } from './selectors'\nimport _ from 'lodash'\nimport permissionChecker from 'containers/PermissionChecker'\nimport { getDisplayName } from 'utils/hocHelpers'\n\nconst { FlagsProvider, Flag, useFlags } = createFlags()\n\nconst featureFlags = WrappedComponent => {\n return class extends React.Component {\n displayName = `FeatureFlags(${getDisplayName(WrappedComponent)})`\n static propTypes = {\n featureFlagConfig: ImmutablePropTypes.map.isRequired,\n }\n\n render() {\n const flags = {\n ...window.config.feature_flags,\n ...this.props.featureFlagConfig.toJS(),\n }\n _.keys(flags).forEach(flag => {\n flags[flag] = flags[flag] === 'true'\n })\n return (\n \n \n \n )\n }\n }\n}\n\nconst mapStateToProps = createStructuredSelector({\n featureFlagConfig: selectFeatureFlagConfig,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default compose(permissionChecker, withConnect, featureFlags)\n\n// To use a feature flag, import the component and set the \"name\" and \"render\" props:\n// (\n// \n// )}\n// />\n// It will render the content in the \"render\" prop if the current user has the value of \"name\" in their \"feature_flags\" user data\n\nexport { Flag, useFlags }\n","import { createSelector } from 'reselect'\nimport { Map, fromJS } from 'immutable'\n\nconst selectUserProfileDataDomain = state =>\n state !== undefined ? state.get('userProfileData', Map()) : fromJS({})\n\nexport const selectUserProfile = createSelector(\n selectUserProfileDataDomain,\n sonraiData => sonraiData.get('userProfile') || Map()\n)\n\nexport const selectSMOpen = createSelector(\n selectUserProfileDataDomain,\n sonraiData => sonraiData.get('swimlaneManagerOpen')\n)\n\nexport const selectSonraiUserSrn = createSelector(\n selectUserProfileDataDomain,\n sonraiData => sonraiData.get('sonraiUserSrn')\n)\n\nexport const selectUserProfileError = createSelector(\n selectUserProfileDataDomain,\n sonraiData => sonraiData.get('error')\n)\n","import {\n FETCH_POLICIES,\n SET_POLICIES,\n CREATE_POLICY,\n CREATE_POLICY_SUCCESS,\n UPDATE_CONTROL_GROUP,\n UPDATE_CONTROL_GROUP_SUCCESS,\n FETCH_CONTROL_GROUPS,\n SET_CONTROL_GROUPS,\n CREATE_CONTROL_GROUP,\n CREATE_CONTROL_GROUP_SUCCESS,\n DELETE_CONTROL_GROUP,\n DELETE_CONTROL_GROUP_SUCCESS,\n DELETE_POLICY,\n DELETE_POLICY_SUCCESS,\n UPDATE_POLICY,\n UPDATE_POLICY_SUCCESS,\n ADD_POLICY,\n ADD_POLICY_SUCCESS,\n REMOVE_POLICY,\n REMOVE_POLICY_SUCCESS,\n CLONE_FRAMEWORK,\n CLONE_FRAMEWORK_SUCCESS,\n SET_FRAMEWORK_ENABLED,\n SET_FRAMEWORK_ENABLED_SUCCESS,\n SET_POLICY_ERROR,\n TOGGLE_ENABLED_ON_SWIMLANES,\n TOGGLE_ENABLED_ON_SWIMLANES_SUCCESS,\n TOGGLE_SWIMLANE_ON_CFS,\n TOGGLE_SWIMLANE_ON_CFS_SUCCESS,\n TOGGLE_SWIMLANE_ON_CFS_ERROR,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const fetchPolicies = createAction(FETCH_POLICIES)\nexport const setPolicies = createAction(SET_POLICIES)\nexport const createPolicy = createAction(CREATE_POLICY)\nexport const createPolicySuccess = createAction(CREATE_POLICY_SUCCESS)\nexport const setPolicyError = createAction(SET_POLICY_ERROR)\nexport const updateControlGroup = createAction(UPDATE_CONTROL_GROUP)\nexport const updateControlGroupSuccess = createAction(\n UPDATE_CONTROL_GROUP_SUCCESS\n)\nexport const fetchControlGroups = createAction(FETCH_CONTROL_GROUPS)\nexport const setControlGroups = createAction(SET_CONTROL_GROUPS)\nexport const createControlGroup = createAction(CREATE_CONTROL_GROUP)\nexport const createControlGroupSuccess = createAction(\n CREATE_CONTROL_GROUP_SUCCESS\n)\nexport const deleteControlGroup = createAction(DELETE_CONTROL_GROUP)\nexport const deleteControlGroupSuccess = createAction(\n DELETE_CONTROL_GROUP_SUCCESS\n)\n\nexport const deletePolicy = createAction(DELETE_POLICY)\nexport const deletePolicySuccess = createAction(DELETE_POLICY_SUCCESS)\nexport const updatePolicy = createAction(UPDATE_POLICY)\nexport const updatePolicySuccess = createAction(UPDATE_POLICY_SUCCESS)\nexport const addPolicy = createAction(ADD_POLICY)\nexport const addPolicySuccess = createAction(ADD_POLICY_SUCCESS)\nexport const removePolicy = createAction(REMOVE_POLICY)\nexport const removePolicySuccess = createAction(REMOVE_POLICY_SUCCESS)\nexport const cloneFramework = createAction(CLONE_FRAMEWORK)\nexport const cloneFrameworkSuccess = createAction(CLONE_FRAMEWORK_SUCCESS)\nexport const setFrameworkEnabled = createAction(SET_FRAMEWORK_ENABLED)\nexport const setFrameworkEnabledSuccess = createAction(\n SET_FRAMEWORK_ENABLED_SUCCESS\n)\nexport const toggleEnabledOnSwimlanes = createAction(\n TOGGLE_ENABLED_ON_SWIMLANES\n)\nexport const toggleEnabledOnSwimlanesSuccess = createAction(\n TOGGLE_ENABLED_ON_SWIMLANES_SUCCESS\n)\n\nexport const toggleSwimlaneOnCFs = createAction(TOGGLE_SWIMLANE_ON_CFS)\nexport const toggleSwimlaneOnCFsSuccess = createAction(\n TOGGLE_SWIMLANE_ON_CFS_SUCCESS\n)\nexport const toggleSwimlaneOnCFsError = createAction(\n TOGGLE_SWIMLANE_ON_CFS_ERROR\n)\n","/**\n *\n * SquareLoadingAnimation\n *\n */\n\nimport React from 'react'\n\nclass SquareLoadingAnimation extends React.PureComponent {\n render() {\n return (\n // Color is defined by the css classes in global-styles.css\n
    \n
    \n
    \n
    \n
    \n
    \n )\n }\n}\n\nSquareLoadingAnimation.propTypes = {}\n\nexport default SquareLoadingAnimation\n","export const GET_INTEGRATIONS = 'app/PlatformSettingsData/GET_INTEGRATIONS'\nexport const SET_INTEGRATIONS = 'app/PlatformSettingsData/SET_INTEGRATIONS'\nexport const SET_INTEGRATIONS_ERROR =\n 'app/PlatformSettingsData/SET_INTEGRATIONS_ERROR'\n\nexport const CREATE_INTEGRATION = 'app/PlatformSettingsData/CREATE_INTEGRATION'\nexport const CREATE_INTEGRATION_SUCCESS =\n 'app/PlatformSettingsData/CREATE_INTEGRATION_SUCCESS'\nexport const CREATE_INTEGRATION_ERROR =\n 'app/PlatformSettingsData/CREATE_INTEGRATION_ERROR'\n\nexport const DELETE_INTEGRATION = 'app/PlatformSettingsData/DELETE_INTEGRATION'\nexport const DELETE_INTEGRATION_SUCCESS =\n 'app/PlatformSettingsData/DELETE_INTEGRATION_SUCCESS'\nexport const DELETE_INTEGRATION_ERROR =\n 'app/PlatformSettingsData/DELETE_INTEGRATION_ERROR'\n\nexport const UPDATE_INTEGRATION = 'app/PlatformSettingsData/UPDATE_INTEGRATION'\nexport const UPDATE_INTEGRATION_SUCCESS =\n 'app/PlatformSettingsData/UPDATE_INTEGRATION_SUCCESS'\nexport const UPDATE_INTEGRATION_ERROR =\n 'app/PlatformSettingsData/UPDATE_INTEGRATION_ERROR'\n\nexport const UPDATE_INTEGRATION_CONFIG =\n 'app/PlatformSettingsData/UPDATE_INTEGRATION_CONFIG'\nexport const UPDATE_INTEGRATION_CONFIG_SUCCESS =\n 'app/PlatformSettingsData/UPDATE_INTEGRATION_CONFIG_SUCCESS'\nexport const UPDATE_INTEGRATION_CONFIG_ERROR =\n 'app/PlatformSettingsData/UPDATE_INTEGRATION_CONFIG_ERROR'\n\nexport const ASSIGN_INTEGRATION = 'app/PlatformSettingsData/ASSIGN_INTEGRATION'\nexport const ASSIGN_INTEGRATION_SUCCESS =\n 'app/PlatformSettingsData/ASSIGN_INTEGRATION_SUCCESS'\nexport const ASSIGN_INTEGRATION_ERROR =\n 'app/PlatformSettingsData/ASSIGN_INTEGRATION_ERROR'\n\nexport const DELETE_INTEGRATION_ASSIGNMENT =\n 'app/PlatformSettingsData/DELETE_INTEGRATION_ASSIGNMENT'\nexport const DELETE_INTEGRATION_ASSIGNMENT_SUCCESS =\n 'app/PlatformSettingsData/DELETE_INTEGRATION_ASSIGNMENT_SUCCESS'\nexport const DELETE_INTEGRATION_ASSIGNMENT_ERROR =\n 'app/PlatformSettingsData/DELETE_INTEGRATION_ASSIGNMENT_ERROR'\n\nexport const INTEGRATION_TYPES = {\n SLACK: 'slack',\n SERVICE_NOW: 'service_now',\n JIRA: 'jira',\n}\n\nexport const slackActionTypeKey = {\n TICKET_OPENED: 'Ticket Opens',\n TICKET_CLOSED: 'Ticket Closes',\n TICKET_REOPENED: 'Ticket Reopens',\n TICKET_SNOOZED: 'Ticket Snoozed',\n TICKET_RISK_ACCEPTED: 'Ticket Risk Accepted',\n TICKET_ASSIGNED: 'Ticket Assigned',\n TICKET_COMMENT_ADDED: 'Ticket Comment Added',\n TICKET_ESCALATION_EXECUTED: 'Ticket Escalation Executed',\n}\n\nexport const slackActionTypes = Object.keys(slackActionTypeKey).map(type => ({\n value: type,\n label: slackActionTypeKey[type],\n}))\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport IHelp from 'containers/IHelp'\nimport TextLink from 'components/TextLink'\n\nclass SavedSearchDisplay extends Component {\n styles = {\n container: { display: 'flex', alignItems: 'center' },\n tooltipContainer: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n padding: '0.5rem',\n minHeight: '50px',\n minWidth: '200px',\n },\n description: {\n color: this.props.theme.neutralDark,\n fontStyle: 'italic',\n padding: '0.25rem 0rem 0rem 0rem',\n fontSize: '0.9rem',\n },\n title: { fontWeight: '500px', fontSize: '0.95rem' },\n }\n renderIHelp = () => (\n (\n
    \n
    Description
    \n
    \n {this.props.search.description}\n
    \n
    \n )}\n iconSize=\"20px\"\n position=\"bottom\"\n />\n )\n\n render() {\n if (!this.props.search) {\n return '-'\n }\n\n const { description, name } = this.props.search\n if (description) {\n if (this.props.position === 'right') {\n return (\n
    \n {name}\n
    {this.renderIHelp()}
    \n
    \n )\n } else {\n return (\n
    \n
    {this.renderIHelp()}
    \n {name}\n
    \n )\n }\n }\n return (\n
    \n {name}\n
    \n )\n }\n}\n\nSavedSearchDisplay.defaultProps = {\n position: 'left',\n}\n\nSavedSearchDisplay.propTypes = {\n theme: themeShape,\n search: PropTypes.object.isRequired,\n to: PropTypes.object,\n}\n\nexport default themeable(SavedSearchDisplay)\n","import gql from 'graphql-tag'\nexport const GET_ALL_BOTS = gql`\n query getBots {\n Bots {\n items {\n title\n description\n type\n isCustom\n url\n status\n cloud\n operation\n lastSync\n version\n srn\n resourceId\n blob\n }\n }\n }\n`\n\nexport const GET_FILTERED_BOTS = gql`\n query getFilteredBots($filters: BotFilter!) {\n Bots(where: $filters) {\n items {\n title\n description\n type\n isCustom\n url\n status\n cloud\n operation\n lastSync\n version\n srn\n resourceId\n blob\n }\n }\n }\n`\n\nexport const CREATE_BOT_MUTATION = gql`\n mutation createBot($url: String!) {\n CreateBot(input: { url: $url }) {\n title\n description\n type\n isCustom\n url\n status\n cloud\n operation\n lastSync\n version\n srn\n resourceId\n }\n }\n`\n","/**\n *\n * NodeViewDetailBool\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './styles'\n\nclass NodeViewDetailBool extends React.PureComponent {\n getValue = () => {\n return this.props.value !== undefined && this.props.value !== null\n ? this.props.value.toString()\n : '-'\n }\n\n render() {\n const value = this.getValue()\n return
    {value}
    \n }\n}\n\nNodeViewDetailBool.propTypes = {\n value: PropTypes.bool,\n}\n\nexport default NodeViewDetailBool\n","/**\n *\n * NodeViewDetailDate\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\n\nclass NodeViewDetailDate extends React.PureComponent {\n getValue = () => {\n return this.props.value ? moment(this.props.value).format('lll') : '-'\n }\n\n render() {\n return
    {this.getValue()}
    \n }\n}\n\nNodeViewDetailDate.propTypes = {\n value: PropTypes.string,\n}\n\nexport default NodeViewDetailDate\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { exists } from 'utils/sonraiUtils'\n\nclass NodeViewDetailInt extends React.PureComponent {\n getValue = () => {\n return exists(this.props.value) ? this.props.value.toString() : '-'\n }\n\n render() {\n return
    {this.getValue()}
    \n }\n}\n\nNodeViewDetailInt.propTypes = {\n value: PropTypes.bool,\n}\n\nexport default NodeViewDetailInt\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './styles'\n\nclass NodeViewDetailLabel extends React.PureComponent {\n render() {\n return
    {this.props.children}
    \n }\n}\n\nNodeViewDetailLabel.propTypes = {\n children: PropTypes.node,\n}\n\nexport default NodeViewDetailLabel\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport ReactTooltip from 'react-tooltip'\nimport _ from 'lodash'\nimport NodeViewDetailMetadataBody from './NodeViewDetailMetadataBody'\nimport TextLink from 'components/TextLink'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport metadataMap from 'metadataMapping.json'\nimport { metadataToObj } from 'utils/sonraiUtils'\nimport './styles.css'\n\nexport class NodeViewDetailMetadata extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.state = {\n isOpen: false,\n filterText: '',\n }\n\n this.styles = {\n label: {\n fontStyle: 'italic',\n },\n modalBody: {\n maxHeight: '80vh',\n overflow: 'auto',\n },\n key: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontWeight: 400,\n opacity: 0.8,\n },\n value: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }\n }\n\n toggle = () => {\n this.setState({\n isOpen: false,\n })\n }\n\n open = () => {\n this.setState({\n isOpen: true,\n })\n }\n\n setFilterText = ({ target: { value } }) =>\n this.setState({ filterText: value })\n\n isMatch = key => {\n let keyText = key.toLowerCase()\n let filterText = this.state.filterText.toLowerCase()\n if (filterText !== '') {\n if (keyText.includes(filterText)) {\n return {\n backgroundColor: this.props.theme.highlight,\n }\n }\n return {\n color: 'rgba(171, 171, 171, 0.51)',\n }\n }\n return {}\n }\n\n doesMetadataMappingFilterMatch = item => {\n const { type, label, cloudType } = this.props.nodeData\n // make sure the config has a 'filter' field and it is an array\n if (!item.filter) {\n // without filter, ignore it. This might be undesired behaviour, like if we\n // want a \"global\" config, it this could return true instead.\n return false\n }\n const { filter } = item\n if (!_.isObject(filter)) {\n // eslint-disable-next-line no-console\n console.warn(\n 'invalid metadataMapping config, expected filter to be an object: ' +\n JSON.stringify(filter)\n )\n return false\n }\n\n // make sure at least one field is in the filter\n if (!filter.cloudType && !filter.type && !filter.label) {\n // eslint-disable-next-line no-console\n console.warn(\n 'filter must have at least one field \"cloudType\", \"type\" or \"label\"'\n )\n return false\n }\n\n // if cloudType doesnt match, return false\n if (filter.cloudType) {\n if (!_.isArray(filter.cloudType)) {\n // eslint-disable-next-line no-console\n console.warn(\n 'invalid metadataMapping config, expected filter.cloudtype to be an array: ' +\n JSON.stringify(filter)\n )\n return false\n }\n\n if (!filter.cloudType.includes(cloudType)) {\n return false\n }\n }\n\n // if label doesnt match, return false\n if (filter.label) {\n if (!_.isArray(filter.label)) {\n // eslint-disable-next-line no-console\n console.warn(\n 'invalid metadataMapping config, expected filter.type to be an array: ' +\n JSON.stringify(filter)\n )\n return false\n }\n\n if (!filter.label.includes(label)) {\n return false\n }\n }\n\n // if label doesn't match, return false\n if (filter.type) {\n if (!_.isArray(filter.type)) {\n // eslint-disable-next-line no-console\n console.warn(\n 'invalid metadataMapping config, expected filter.type to be an array: ' +\n JSON.stringify(filter)\n )\n return false\n }\n\n if (!filter.type.includes(type)) {\n return false\n }\n }\n\n // have passed every opportunity to filter out this mapping, it must match\n return true\n }\n\n getMetadataKeyPreviews = values => {\n const metadataObject = metadataToObj(values)\n let keysToDisplay = metadataMap\n .filter(item => {\n // make sure there is actually a keys field\n if (!item.keys) {\n // eslint-disable-next-line no-console\n console.warn(\n 'metadata mapping is invalid, has no \"keys\": ' +\n JSON.stringify(item)\n )\n return false\n }\n\n // filter has to match\n return this.doesMetadataMappingFilterMatch(item)\n })\n .reduce(\n (allKeys, currentMapping) => [...allKeys, ...currentMapping.keys],\n []\n )\n keysToDisplay = _.uniq(keysToDisplay)\n\n if (keysToDisplay.length > 0) {\n const currentValues = values.map(item => _.first(item.split(':')))\n return (\n
    \n \n {currentValues\n .filter(item => keysToDisplay.includes(item))\n .map((item, i) => {\n return [\n \n {item}:{' '}\n
    ,\n \n {metadataObject[item]}\n
    ,\n ]\n })}\n
    \n \n {currentValues\n .filter(item => keysToDisplay.includes(item))\n .map((item, i) => {\n // this class has a width on it to try to make it not go off\n // the edge of the page\n return [\n \n {item}\n ,\n \n {metadataObject[item]}\n ,\n ]\n })}\n \n
    \n )\n } else {\n return (\n \n {' '}\n {values.length} entries{' '}\n \n )\n }\n }\n\n render() {\n if (Array.isArray(this.props.value) && this.props.value.length > 0) {\n return (\n
    \n {this.getMetadataKeyPreviews(this.props.value)}\n \n (See More)\n \n \n Metadata\n \n \n \n \n \n Close\n \n \n \n
    \n )\n }\n\n return
    -
    \n }\n}\n\nNodeViewDetailMetadata.propTypes = {\n theme: themeShape,\n value: PropTypes.array,\n nodeData: PropTypes.object,\n}\n\nexport default themeable(NodeViewDetailMetadata)\n","/**\n *\n * Tag\n *\n */\n\nimport React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport Color from 'color'\n\nimport Icon from 'components/Icon'\nimport BorderlessButton from 'components/BorderlessButton'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass Tag extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n removeButton: {\n marginLeft: '0.5em',\n backgroundColor: 'auto',\n },\n tag: {\n display: 'inline-grid',\n margin: '0.5rem',\n alignContent: 'center',\n maxWidth: '100%',\n overflow: 'hidden',\n gridTemplateColumns: 'auto 1fr',\n },\n key: {\n padding: '0rem 0.7rem',\n borderTopLeftRadius: '1rem',\n borderBottomLeftRadius: '1rem',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n backgroundColor: Color(props.theme.secondary)\n .blacken(0.5)\n .hex(),\n color: props.theme.light,\n height: this.props.tagHeight || '30px',\n lineHeight: this.props.tagHeight || '30px',\n },\n val: {\n paddingLeft: '0.5rem',\n paddingRight: this.props.removeTag ? '0.6rem' : '0.5rem',\n borderTopRightRadius: '1.2rem',\n borderBottomRightRadius: '1.2rem',\n backgroundColor: props.invert\n ? props.theme.light\n : props.theme.neutralLight,\n color: props.theme.dark,\n height: this.props.tagHeight || '30px',\n lineHeight: this.props.tagHeight || '30px',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n },\n tagText: {\n fontSize: (this.props.style && this.props.style.fontSize) || '0.9rem',\n maxWidth: '10rem',\n width: 'auto',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }\n }\n\n render() {\n return (\n \n
    \n \n {decodeURIComponent(this.props.tag.get('key'))}\n \n
    \n
    \n \n {this.props.tag.get('value')}{' '}\n \n {this.props.removeTag && (\n \n \n \n )}\n
    \n
    \n )\n }\n}\n\nTag.propTypes = {\n removeTag: PropTypes.func,\n tag: ImmutablePropTypes.contains({\n srn: PropTypes.string,\n key: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }).isRequired,\n tagHeight: PropTypes.string,\n theme: themeShape,\n style: PropTypes.object,\n invert: PropTypes.bool,\n}\n\nexport default themeable(Tag)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nclass NodeViewTab extends Component {\n styles = {\n tab: {\n display: 'inline-block',\n marginBottom: '-1px',\n border: '1px solid #ccc',\n padding: '0.5rem 1.5rem',\n marginRight: '0.5rem',\n borderTopRightRadius: '2.5px',\n borderTopLeftRadius: '2.5px',\n cursor: 'pointer',\n position: 'relative',\n },\n activeTab: {\n backgroundColor: '#fff',\n display: 'inline-block',\n marginBottom: '-1px',\n borderTop: '1px solid #ccc',\n borderRight: '1px solid #ccc',\n borderLeft: '1px solid #ccc',\n borderBottom: '1px solid #fff',\n padding: '0.5rem 1.5rem',\n marginRight: '0.5rem',\n borderTopRightRadius: '2.5px',\n borderTopLeftRadius: '2.5px',\n position: 'relative',\n },\n }\n\n onClick = () => {\n const { label, onClick } = this.props\n onClick(label)\n }\n\n isActive = (activeTab, label) => {\n if (activeTab == label) {\n return this.styles.activeTab\n } else {\n return this.styles.tab\n }\n }\n\n render() {\n const {\n onClick,\n props: { activeTab, label },\n } = this\n\n return (\n
    \n {label}\n {this.props.children}\n
    \n )\n }\n}\n\nNodeViewTab.propTypes = {\n children: PropTypes.node,\n activeTab: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n}\n\nexport default NodeViewTab\n","import React from 'react'\n\nexport const ChartLegendEntry = ({ style, color, title }) => {\n const wrapperStyle = {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n marginBottom: '5px',\n ...style,\n }\n\n const legendTitleStyle = {\n fontSize: '12px',\n }\n\n const styledTitle = (\n
    \n \n {title}\n
    \n )\n\n return styledTitle\n}\n\nexport default ChartLegendEntry\n","import { createSelector } from 'reselect'\nimport { DOMAIN } from './constants'\nimport { initialState } from './reducers'\nimport { Map } from 'immutable'\n\nexport const selectDomain = state => state.get(DOMAIN) || initialState\n\nexport const selectChangeDetectionOptions = createSelector(\n selectDomain,\n state => state.get('changeDectionOptions')\n)\n\nexport const selectTicketList = createSelector(selectDomain, state =>\n state.get('ticketList')\n)\n\nexport const selectTicketListFilter = createSelector(\n selectDomain,\n state => state.get('ticketListFilter') || Map()\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nconst CodeBlock = ({ theme, children }) => {\n const style = {\n wrapper: {\n padding: '0.7em',\n fontFamily: 'monospace',\n backgroundColor: theme.neutralLight,\n whiteSpace: 'pre',\n borderRadius: '3px',\n },\n }\n\n return
    {children}
    \n}\n\nCodeBlock.propTypes = {\n children: PropTypes.node,\n theme: themeShape,\n}\n\nexport default themeable(CodeBlock)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Transition } from 'react-spring/renderprops.cjs'\n\nimport Card from 'components/Card'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\n\nexport class SlideoutPanel extends React.PureComponent {\n styles = {\n container: {\n width: '100%',\n position: 'relative',\n overflow: 'auto',\n },\n card: {\n padding: '0',\n minWidth: '0px',\n boxShadow: '0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22)',\n transition: 'all 2s',\n },\n scrollWrapper: {\n maxHeight: '100%',\n overflowX: 'hidden',\n overflowY: 'auto',\n padding: '0 0 1em 1em',\n },\n actionsContainer: {\n padding: '0.5em 1em',\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n },\n }\n\n render() {\n return (\n \n {show =>\n show &&\n (styles => (\n \n \n
    \n
    {this.props.actions}
    \n \n \n \n
    \n
    \n {this.props.children}\n
    \n
    \n
    \n ))\n }\n \n )\n }\n}\n\nSlideoutPanel.defaultProps = {\n style: {},\n}\n\nSlideoutPanel.propTypes = {\n actions: PropTypes.node,\n children: PropTypes.node,\n visible: PropTypes.bool,\n toggleVisible: PropTypes.func,\n style: PropTypes.object,\n}\n\nexport default SlideoutPanel\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { FormattedMessage, injectIntl } from 'react-intl'\nimport { Input } from 'reactstrap'\nimport Select from 'react-select'\nimport MarkdownEditor from 'components/MarkdownEditor'\nimport CombinedSearches from 'components/CombinedSearches'\nimport FormLabel from 'components/FormLabel'\nimport { POLICY_EVAL_TYPES, POLICY_OP_TYPES } from './constants'\nimport messages from './messages'\nimport Slider from 'rc-slider'\nimport _ from 'lodash'\nimport 'rc-slider/assets/index.css'\nconst Handle = Slider.Handle\n\nconst REMEDIATION_TYPES = [\n 'DELETE_ACCESS_KEY',\n 'DELETE_IDENTITY',\n 'UPDATE_POLICY',\n]\nexport class PolicyEdit extends React.Component {\n state = {\n showEdit: false,\n }\n\n styles = {\n triggerConfig: {\n display: 'grid',\n gridTemplateColumns: '30% 1fr 30%',\n gridColumnGap: '1em',\n },\n slider: {\n width: '168px',\n margin: '0.5rem 0',\n },\n }\n\n toggleEdit = () => {\n this.setState(currentState => ({\n showEdit: !currentState.showEdit,\n }))\n }\n\n handleChange = props => {\n const { value, dragging, ...restProps } = props\n //Convert dragging to a string to remove a warning in console\n //See: https://github.com/react-component/slider/issues/502\n return (\n \n \n {value}\n
    \n \n )\n }\n\n render() {\n return (\n
    \n
    Details
    \n
    \n }\n />\n \n }\n />\n\n \n
    \n }\n // required={true}\n />\n ({\n label: _.startCase(_.toLower(value)),\n value,\n }))}\n value={\n this.props.policyRemediationType\n ? {\n label: _.startCase(\n _.toLower(this.props.policyRemediationType)\n ),\n value: this.props.policyRemediationType,\n }\n : this.props.policyRemediationType\n }\n onChange={this.props.setPolicyRemediationType}\n disabled={this.props.loading}\n />\n
    \n
    \n\n
    Alerting
    \n\n
    \n }\n required={true}\n />\n \n }\n required={true}\n />\n
    \n \n
    \n }\n required={true}\n />\n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n )\n }\n}\n\nPolicyEdit.propTypes = {\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n setPolicyEvalTarget: PropTypes.func,\n setPolicyTitle: PropTypes.func,\n setPolicyDescription: PropTypes.func,\n setPolicyEvalType: PropTypes.func,\n setPolicyEvalOp: PropTypes.func,\n setSelectedSearch: PropTypes.func,\n policyEvalTarget: PropTypes.number,\n policyEvalOp: PropTypes.string,\n policyEvalType: PropTypes.string,\n description: PropTypes.string,\n title: PropTypes.string,\n savedSearches: ImmutablePropTypes.map,\n sonraiSearches: ImmutablePropTypes.list,\n selectedSearchValue: PropTypes.string,\n onAlertingLevelNumericChange: PropTypes.func,\n alertingLevelNumeric: PropTypes.number,\n loading: PropTypes.bool,\n policyRemediationType: PropTypes.string,\n setPolicyRemediationType: PropTypes.func,\n}\n\nexport default injectIntl(PolicyEdit)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n error: {\n id: 'app.components.MissingDataNode.error',\n defaultMessage: 'The resource you are looking for no longer exists',\n },\n contact: {\n id: 'app.components.MissingDataNode.contact',\n defaultMessage: 'For more information, you can contact support at',\n },\n})\n","/**\n *\n * MissingDataNode\n *\n */\n\nimport React from 'react'\nimport crash from 'assets/iamghost.png'\nimport { FormattedMessage } from 'react-intl'\n\nimport { SUPPORT_EMAIL } from 'appConstants'\n\nimport messages from './messages'\n\nconst styles = {\n failContainer: {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '90vh',\n },\n crashImg: {\n width: '30%',\n maxWidth: '90px',\n opacity: 0.3,\n },\n crashText: {\n fontSize: 20,\n fontWeight: '400',\n color: '#676767',\n marginTop: '30px',\n },\n}\n\nexport class MissingDataNode extends React.Component {\n render() {\n return (\n
    \n \n

    \n \n

    \n

    \n {' '}\n {SUPPORT_EMAIL}\n

    \n
    \n )\n }\n}\nexport default MissingDataNode\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n servicesTitle: {\n id: 'app.container.NodeViewLayouts.AccountNodeViewCardLayout.servicesTitle',\n defaultMessage: 'Services',\n },\n accountLabel: {\n id: 'app.container.NodeViewLayouts.AccountNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id:\n 'app.container.NodeViewLayouts.AccountNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n activeLabel: {\n id: 'app.container.NodeViewLayouts.AccountNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n})\n","export const GET_ACCOUNT_CONTENT =\n 'app/AccountNodeViewCardLayout/GET_ACCOUNT_CONTENT'\nexport const SET_ACCOUNT_CONTENT =\n 'app/AccountNodeViewCardLayout/SET_ACCOUNT_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_ACCOUNT_CONTENT, GET_ACCOUNT_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n accountContent: {},\n isLoading: false,\n})\n\nconst accountNodeViewCardLayoutReducer = handleActions(\n {\n [GET_ACCOUNT_CONTENT]: state => state.set('isLoading', true),\n [SET_ACCOUNT_CONTENT]: (state, { payload }) => {\n return state\n .set('accountContent', fromJS(payload))\n .set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('accountContent', Map()),\n },\n initialState\n)\n\nexport default accountNodeViewCardLayoutReducer\n","import { GET_ACCOUNT_CONTENT, SET_ACCOUNT_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getAccountContent = createAction(GET_ACCOUNT_CONTENT)\nexport const setAccountContent = createAction(SET_ACCOUNT_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { ACCOUNT_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_ACCOUNT_CONTENT } from './constants'\nimport { setAccountContent } from './actions'\n\nfunction* getAccountContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${ACCOUNT_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Accounts.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setAccountContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* accountNodeSaga() {\n yield takeLatest(GET_ACCOUNT_CONTENT, getAccountContent)\n}\n\nexport default accountNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectAccountNodeViewCardLayoutDomain = state =>\n state.get('accountNodeViewCardLayout', Map())\n\nexport const selectAccountContent = createSelector(\n selectAccountNodeViewCardLayoutDomain,\n state => state.get('accountContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectAccountNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * AccountNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { injectIntl } from 'react-intl'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List } from 'immutable'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport { NodeViewDetailString, NodeViewDetailLabel } from 'components/NodeView'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getAccountContent } from './actions'\nimport { selectAccountContent, selectIsLoading } from './selectors'\n\nexport class AccountNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getAccountContent(props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getServices = () => {\n return this.props.accountContent\n .getIn(['contains', 'items'], List())\n .toJS()\n .map(service => service.ServiceName)\n }\n\n getLayouts = () => {\n return {\n graph: {\n lg: { w: 8, h: 3 },\n md: { w: 7, h: 3 },\n sm: { w: 6, h: 3 },\n xs: { w: 4, h: 3 },\n },\n }\n }\n\n getHeaderDetails = () => {\n return [\n \n \n {this.props.intl.formatMessage(messages.servicesTitle)}\n \n \n ,\n ]\n }\n\n render() {\n return (\n \n \n \n \n )\n }\n}\n\nAccountNodeViewCardLayout.propTypes = {\n accountContent: ImmutablePropTypes.map.isRequired,\n getAccountContent: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n isLoading: selectIsLoading,\n userProfile: selectUserProfile,\n accountContent: selectAccountContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getAccountContent,\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'accountNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'accountNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(AccountNodeViewCardLayout)\n","/*\n * UserNodeViewCardLayout Messages\n *\n * This contains all the text for the UserNodeViewCardLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n createSC: {\n id: 'app.containers.UserNodeViewCardLayout.createSC',\n defaultMessage: 'Create New Solution Card',\n },\n addWidget: {\n id: 'app.containers.UserNodeViewCardLayout.addWidget',\n defaultMessage: 'Add Widget',\n },\n saveCard: {\n id: 'app.containers.UserNodeViewCardLayout.saveCard',\n defaultMessage: 'Save Solution Card',\n },\n shareCard: {\n id: 'app.containers.UserNodeViewCardLayout.shareCard',\n defaultMessage: 'Share Solution Card',\n },\n dupeCard: {\n id: 'app.containers.UserNodeViewCardLayout.dupeCard',\n defaultMessage: 'Duplicate Solution Card',\n },\n exportCard: {\n id: 'app.containers.UserNodeViewCardLayout.exportCard',\n defaultMessage: 'Export as PDF',\n },\n passwordLastUsed: {\n id: 'app.containers.UserNodeViewCardLayout.exportCard',\n defaultMessage: 'Password Last Used',\n },\n activeLabel: {\n id: 'app.containers.UserNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n typeLabel: {\n id: 'app.containers.UserNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.containers.UserNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.containers.UserNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n group: {\n id: 'app.containers.UserNodeViewCardLayout.group',\n defaultMessage: 'Group',\n },\n lastModifiedLabel: {\n id: 'app.containers.UserNodeViewCardLayout.lastModifiedLabel',\n defaultMessage: 'Last Modified',\n },\n createdLabel: {\n id: 'app.containers.UserNodeViewCardLayout.createdLabel',\n defaultMessage: 'Created',\n },\n performed: {\n id: 'app.containers.UserNodeViewCardLayout.performed',\n defaultMessage: 'Performed',\n },\n groupsPolicies: {\n id: 'app.containers.UserNodeViewCardLayout.groupsPolicies',\n defaultMessage: 'Groups & Policies',\n },\n user: {\n id: 'app.containers.UserNodeViewCardLayout.user',\n defaultMessage: 'User',\n },\n MFADevices: {\n id: 'app.containers.UserNodeViewCardLayout.MFADevices',\n defaultMessage: 'MFA Devices',\n },\n owns: {\n id: 'app.containers.UserNodeViewCardLayout.owns',\n defaultMessage: 'Owns',\n },\n statusDays1: {\n id: 'app.containers.UserNodeViewCardLayout.statusDays1',\n defaultMessage: 'within the past 24 hours',\n },\n statusDays7: {\n id: 'app.containers.UserNodeViewCardLayout.statusDays7',\n defaultMessage: 'within the past 7 days',\n },\n statusDays30: {\n id: 'app.containers.UserNodeViewCardLayout.statusDays30',\n defaultMessage: 'within the past 30 days',\n },\n statusDays90: {\n id: 'app.containers.UserNodeViewCardLayout.statusDays90',\n defaultMessage: 'within the past 90 days',\n },\n attachedPolicies: {\n id: 'app.containers.UserNodeViewCardLayout.attachedPolicies',\n defaultMessage: 'Attached Policies',\n },\n})\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\nconst selectUserNodeViewCardLayoutDomain = state =>\n state.get('userNodeViewCardLayout', Map())\n\nexport const selectActionsPerformed = createSelector(\n selectUserNodeViewCardLayoutDomain,\n state => state.get('actionsPerformed') || List()\n)\n\nexport const selectIsLoadingActions = createSelector(\n selectUserNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n\nexport const selectUserContent = createSelector(\n selectUserNodeViewCardLayoutDomain,\n state => state.get('userContent') || Map()\n)\n\nexport const selectLoadingUserContent = createSelector(\n selectUserNodeViewCardLayoutDomain,\n state => state.get('loadingUserContent')\n)\n","export const GET_ACTIONS_PERFORMED =\n 'app/UserNodeViewCardLayout/GET_ACTIONS_PERFORMED'\nexport const SET_ACTIONS_PERFORMED =\n 'app/UserNodeViewCardLayout/SET_ACTIONS_PERFORMED'\nexport const SET_USER_CONTENT = 'app/UserNodeViewCardLayout/SET_USER_CONTENT'\nexport const GET_USER_CONTENT = 'app/UserNodeViewCardLayout/GET_USER_CONTENT'\n","/*\n *\n * UserNodeViewCardLayout reducer\n *\n */\n\nimport { fromJS, Map } from 'immutable'\nimport { handleActions } from 'redux-actions'\n\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nimport {\n SET_ACTIONS_PERFORMED,\n GET_ACTIONS_PERFORMED,\n GET_USER_CONTENT,\n SET_USER_CONTENT,\n} from './constants'\n\nconst initialState = fromJS({\n actionsPerformed: [],\n isLoading: false,\n loadingUserContent: true,\n userContent: {},\n})\n\nconst userNodeViewCardLayoutReducer = handleActions(\n {\n [GET_ACTIONS_PERFORMED]: state => state.set('isLoading', true),\n [SET_ACTIONS_PERFORMED]: (state, { payload }) => {\n return state\n .set('actionsPerformed', fromJS(payload))\n .set('isLoading', false)\n },\n [GET_USER_CONTENT]: state => state.set('loadingUserContent', true),\n [SET_USER_CONTENT]: (state, { payload }) => {\n return state\n .set('userContent', fromJS(payload))\n .set('loadingUserContent', false)\n },\n [CLEAR_DATA]: state =>\n state.set('userContent', Map()).set('actionsPerformed', Map()),\n },\n initialState\n)\n\nexport default userNodeViewCardLayoutReducer\n","import {\n GET_ACTIONS_PERFORMED,\n SET_ACTIONS_PERFORMED,\n GET_USER_CONTENT,\n SET_USER_CONTENT,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getActionsPerformed = createAction(GET_ACTIONS_PERFORMED)\nexport const setActionsPerformed = createAction(SET_ACTIONS_PERFORMED)\nexport const getUserContent = createAction(GET_USER_CONTENT)\nexport const setUserContent = createAction(SET_USER_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport {\n USER_NODE_VIEW_ACTIONS_PERFORMED_QUERY,\n USER_NODE_VIEW_QUERY,\n} from 'static-queries'\n\nimport { GET_ACTIONS_PERFORMED, GET_USER_CONTENT } from './constants'\nimport { setActionsPerformed, setUserContent } from './actions'\n\nfunction* getActions(action) {\n const { srn, range } = action.payload\n\n try {\n const client = getClient()\n const results = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${USER_NODE_VIEW_ACTIONS_PERFORMED_QUERY}\n `,\n variables: {\n srn,\n range,\n },\n })\n const actionsPerformed = results.data.Actions.items\n if (actionsPerformed === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setActionsPerformed(actionsPerformed))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getUserContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${USER_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Users.items\n\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setUserContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* userNodeSaga() {\n yield takeLatest(GET_ACTIONS_PERFORMED, getActions)\n yield takeLatest(GET_USER_CONTENT, getUserContent)\n}\n\nexport default userNodeSaga\n","/**\n *\n * UserNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { FormattedMessage } from 'react-intl'\nimport { injectIntl } from 'react-intl'\nimport { push } from 'connected-react-router'\nimport { compose, bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { List } from 'immutable'\nimport { exists } from 'utils/sonraiUtils'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport { DAEMON } from 'utils/constants'\nimport BigStatWidget from 'components/BigStatWidget'\nimport TableWidget from 'components/TableWidget'\nimport Dropdown, {\n DropdownMenu,\n InlineDropdownAnchor,\n DropdownItem,\n} from 'components/Dropdown'\n\nimport messages from './messages'\nimport {\n selectActionsPerformed,\n selectIsLoadingActions,\n selectUserContent,\n selectLoadingUserContent,\n} from './selectors'\nimport reducer from './reducer'\nimport { getActionsPerformed, getUserContent } from './actions'\nimport sagas from './sagas'\n\nconst styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n },\n}\n\nexport class UserNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n filter: 1,\n }\n\n props.getActionsPerformed({\n srn: this.props.nodeData.srn,\n range: this.state.filter,\n })\n\n props.getUserContent(this.props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getMFACount = () =>\n this.props.userContent.getIn(['hasMFADevice', 'items'], List()).size\n\n getKeysOwned = () => {\n let rows = []\n this.props.userContent\n .getIn(['isOwnerOf', 'group'], List())\n .toJS()\n .forEach(item => {\n const key = item.key.label || '-'\n item.items.forEach(groupName => {\n rows.push({\n type: key,\n name: groupName.name || '-',\n srn: groupName.srn,\n createdDate: groupName.createdDate || null,\n lastUsed: groupName.lastUsed || null,\n })\n })\n })\n return rows\n }\n\n getMemberOf = () => {\n let rows = []\n this.props.userContent\n .getIn(['isMemberOf', 'items'], List())\n .toJS()\n .forEach(group => {\n const { hasAttached } = group\n const groupActive = group.active\n const groupName = group.name\n hasAttached.items.forEach(policy => {\n const { active, name, srn } = policy\n rows.push({\n groupName,\n policyActive: active,\n policyName: name,\n srn,\n groupActive,\n })\n })\n })\n\n this.props.userContent\n .getIn(['hasAttached', 'items'], List())\n .toJS()\n .forEach(policy => {\n const { name, active, srn } = policy\n rows.push({\n groupName: 'Direct Attached',\n policyActive: active,\n policyName: name,\n srn,\n groupActive: '-',\n })\n })\n\n return rows\n }\n\n getPerformed = () => {\n const { actionsPerformed } = this.props\n if (!actionsPerformed.isEmpty()) {\n const data = actionsPerformed.map(action => {\n return {\n eventName: action.get('eventName') || '-',\n cityPerformedAt:\n action.get('performedAtCityValue') ||\n (exists(action.get('performedAtCityValues')) &&\n action.get('performedAtCityValues').join(', ')) ||\n '-',\n srn: action.get('srn'),\n }\n })\n return data.toJS()\n } else {\n return []\n }\n }\n\n handleRangeChange = val => {\n this.setState({\n filter: val.value,\n })\n this.props.getActionsPerformed({\n srn: this.props.nodeData.srn,\n range: val.value,\n })\n }\n\n getLayouts = () => {\n const numGroups = this.getMemberOf().length\n const numOwned = this.getKeysOwned().length\n const numPerformed = this.getPerformed().length\n\n return {\n groups: {\n md: { w: 4, h: numGroups > 0 ? 2 : 1 },\n sm: { w: 6, h: numGroups > 0 ? 2 : 1 },\n xs: { w: 4, h: numGroups > 0 ? 2 : 1 },\n },\n mfa: {\n xs: { w: 1, h: 1 },\n },\n owns: {\n md: { w: 3, h: numOwned > 0 ? 2 : 1 },\n sm: { w: 5, h: numOwned > 0 ? 2 : 1 },\n xs: { w: 3, h: numOwned > 0 ? 2 : 1 },\n },\n performed: {\n lg: { w: 8, h: numPerformed > 0 ? 2 : 1 },\n md: { w: 7, h: numPerformed > 0 ? 2 : 1 },\n sm: { w: 6, h: numPerformed > 0 ? 2 : 1 },\n xs: { w: 4, h: numPerformed > 0 ? 2 : 1 },\n },\n graph: {\n lg: { w: 4, h: 3 },\n md: { w: 7, h: 3 },\n sm: { w: 6, h: 3 },\n xs: { w: 4, h: 3 },\n },\n }\n }\n\n getGridContent = () => {\n return [\n
    \n \n \n {' '}\n \n\n this.handleRangeChange(filter)}\n >\n \n \n \n \n \n \n \n \n
    \n }\n onClickNodeView={this.onClickNodeView}\n loading={this.props.loading}\n />\n ,\n
    \n \n
    ,\n
    \n \n
    ,\n
    \n \n
    ,\n ]\n }\n\n render() {\n let nodeData = { ...this.props.nodeData }\n nodeData.ownedBy = this.getKeysOwned()\n if (this.props.nodeData.type === 'User') {\n nodeData.user = {}\n nodeData.user.content = this.props.userContent\n nodeData.user.loading = this.props.loadingUserContent\n }\n\n return (\n \n \n\n \n \n )\n }\n}\n\nUserNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n setUserProfileTables: PropTypes.func,\n userContent: ImmutablePropTypes.map.isRequired,\n getUserContent: PropTypes.func.isRequired,\n loadingUserContent: PropTypes.bool,\n toggleResourceMonitoring: PropTypes.func,\n userProfile: PropTypes.object,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func,\n }),\n getActionsPerformed: PropTypes.func,\n loading: PropTypes.bool,\n actionsPerformed: PropTypes.object,\n nodeId: PropTypes.string,\n nodeData: PropTypes.object,\n push: PropTypes.func,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n actionsPerformed: selectActionsPerformed,\n loading: selectIsLoadingActions,\n userProfile: selectUserProfile,\n userContent: selectUserContent,\n loadingUserContent: selectLoadingUserContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getActionsPerformed,\n setUserProfileTables,\n push,\n getUserContent,\n },\n dispatch\n )\n}\n\nconst withReducer = injectReducer({ key: 'userNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'userNodeViewCardLayout',\n saga: sagas,\n mode: DAEMON,\n})\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n injectIntl,\n withSaga,\n withReducer\n)(UserNodeViewCardLayout)\n","/**\n *\n * Property\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\n\nclass Property extends React.Component {\n render() {\n return (\n \n
    {this.props.label}
    \n
    {this.props.value}
    \n
    \n )\n }\n}\n\nProperty.propTypes = {\n label: PropTypes.string,\n value: PropTypes.string,\n}\n\nexport default Property\n","/**\n *\n * DateProperty\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\n\nclass DateProperty extends React.Component {\n getValue = () => {\n return this.props.value\n ? moment(this.props.value).format('MMMM Do YYYY, h:mm:ss a')\n : '-'\n }\n\n render() {\n return (\n \n
    {this.props.label}
    \n
    {this.getValue()}
    \n
    \n )\n }\n}\n\nDateProperty.propTypes = {\n label: PropTypes.string,\n value: PropTypes.string,\n}\n\nexport default DateProperty\n","/**\n *\n * BoolProperty\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\n\nconst styles = {\n code: {\n fontFamily: 'monospace',\n fontSize: '1.1rem',\n },\n true: {\n color: '#2d3e50',\n fontWeight: '500',\n },\n false: {\n color: '#666',\n },\n}\n\nclass BoolProperty extends React.Component {\n getValue = () => {\n return this.props.value !== undefined && this.props.value !== null\n ? this.props.value.toString()\n : '-'\n }\n\n getStyle = value => {\n if (value === 'true') {\n return { ...styles.code, ...styles.true }\n }\n\n if (value === 'false') {\n return { ...styles.code, ...styles.false }\n }\n\n return {}\n }\n\n render() {\n const value = this.getValue()\n return (\n \n
    {this.props.label}
    \n
    {value}
    \n
    \n )\n }\n}\n\nBoolProperty.propTypes = {\n label: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n}\n\nexport default BoolProperty\n","/**\n *\n * InfoCard\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport Card, { TopTitle, CardBody } from 'components/Card'\nimport TextLink from 'components/TextLink'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass InfoCard extends React.Component {\n constructor(props) {\n super(props)\n this.styles = {\n header: {\n fontSize: '1.2em',\n padding: '1em',\n },\n detail: {\n padding: '0.5em',\n display: 'grid',\n gridTemplateColumns: '30% 1fr',\n gridColumnGap: '1em',\n },\n overrideCard: {\n backgroundColor: props.theme.highlight,\n padding: '0',\n overflow: 'hidden',\n },\n overrideHeader: {\n paddingTop: '0',\n paddingBottom: '0',\n paddingLeft: '0.4em',\n paddingRight: '0.4em',\n },\n titleLink: {\n overflow: 'hidden',\n whiteSpace: 'no-wrap',\n display: 'block',\n textOverflow: 'ellipsis',\n },\n body: {\n backgroundColor: '#fff',\n alignItems: 'start',\n justifyContent: 'start',\n padding: '1em',\n overflow: 'auto',\n height: 'auto',\n },\n }\n }\n\n render() {\n return (\n \n \n
    \n {this.props.title}\n
    \n
    \n \n
    \n {React.Children.map(this.props.children, child => (\n
    {child}
    \n ))}\n
    \n
    \n \n )\n }\n}\n\nInfoCard.propTypes = {\n children: PropTypes.node,\n title: PropTypes.node,\n onClick: PropTypes.func,\n theme: themeShape,\n}\n\nexport default themeable(InfoCard)\nexport Property from './Property'\nexport DateProperty from './DateProperty'\nexport BoolProperty from './BoolProperty'\n","/*\n * DataNodeViewCardLayout Messages\n *\n * This contains all the text for the DataNodeViewCardLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n title: {\n id: 'app.containers.DataNodeViewCardLayout.title',\n defaultMessage: 'Data Details',\n },\n activeLabel: {\n id: 'app.containers.DataNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n typeLabel: {\n id: 'app.containers.DataNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.containers.DataNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.containers.DataNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n lastModifiedLabel: {\n id: 'app.containers.DataNodeViewCardLayout.lastModifiedLabel',\n defaultMessage: 'Last Modified',\n },\n createdLabel: {\n id: 'app.containers.DataNodeViewCardLayout.createdLabel',\n defaultMessage: 'Created',\n },\n srnLabel: {\n id: 'app.containers.DataNodeViewCardLayout.srnLabel',\n defaultMessage: 'srn',\n },\n description: {\n id: 'app.containers.DataNodeViewCardLayout.description',\n defaultMessage: 'Description',\n },\n size: {\n id: 'app.containers.DataNodeViewCardLayout.size',\n defaultMessage: 'Size',\n },\n bytes: {\n id: 'app.containers.DataNodeViewCardLayout.bytes',\n defaultMessage: 'Bytes',\n },\n publicRead: {\n id: 'app.containers.DataNodeViewCardLayout.publicRead',\n defaultMessage: 'Public Read',\n },\n publicWrite: {\n id: 'app.containers.DataNodeViewCardLayout.publicWrite',\n defaultMessage: 'Public Write',\n },\n websiteEnabled: {\n id: 'app.containers.DataNodeViewCardLayout.websiteEnabled',\n defaultMessage: 'Website Enabled',\n },\n auditEnabled: {\n id: 'app.containers.DataNodeViewCardLayout.auditEnabled',\n defaultMessage: 'Audit Enabled',\n },\n containerLabel: {\n id: 'app.containers.DataNodeViewCardLayout.containerLabel',\n defaultMessage: 'Container',\n },\n none: {\n id: 'app.containers.DataNodeViewCardLayout.none',\n defaultMessage: 'None',\n },\n dataItem: {\n id: 'app.containers.DataNodeViewCardLayout.dataItem',\n defaultMessage: 'This Data item is not part of a container',\n },\n})\n","export const GET_DATA_CONTENT = 'app/DataNodeViewCardLayout/GET_DATA_CONTENT'\nexport const SET_DATA_CONTENT = 'app/DataNodeViewCardLayout/SET_DATA_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_DATA_CONTENT, GET_DATA_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n dataContent: {},\n isLoading: false,\n})\n\nconst dataNodeViewCardLayoutReducer = handleActions(\n {\n [GET_DATA_CONTENT]: state => state.set('isLoading', true),\n [SET_DATA_CONTENT]: (state, { payload }) => {\n return state.set('dataContent', fromJS(payload)).set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('dataContent', Map()),\n },\n initialState\n)\n\nexport default dataNodeViewCardLayoutReducer\n","import { GET_DATA_CONTENT, SET_DATA_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getDataContent = createAction(GET_DATA_CONTENT)\nexport const setDataContent = createAction(SET_DATA_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { DATA_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_DATA_CONTENT } from './constants'\nimport { setDataContent } from './actions'\n\nfunction* getDataContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${DATA_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n\n const content = results.data.Data.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setDataContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* dataNodeSaga() {\n yield takeLatest(GET_DATA_CONTENT, getDataContent)\n}\n\nexport default dataNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectDataNodeViewCardLayoutDomain = state =>\n state.get('dataNodeViewCardLayout', Map())\n\nexport const selectDataContent = createSelector(\n selectDataNodeViewCardLayoutDomain,\n state => state.get('dataContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectDataNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * DataNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport { injectIntl, FormattedMessage } from 'react-intl'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List, Map } from 'immutable'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\n\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport { exists } from 'utils/sonraiUtils'\nimport { NODE_VIEW_TYPES } from 'appConstants'\nimport { NodeViewDetailString, NodeViewDetailLabel } from 'components/NodeView'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\n\nimport InfoCard, {\n Property,\n DateProperty,\n BoolProperty,\n} from 'components/InfoCard'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getDataContent } from './actions'\nimport { selectDataContent } from './selectors'\n\nexport class DataNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getDataContent(props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n getContainer = () =>\n this.props.dataContent\n .getIn(['isIn', 'items'], List())\n .find(item => item.get('label') === 'DataContainer', null, Map())\n .toJS()\n\n getColumns = () => {\n return {\n md: [\n {\n widthPercent: 50,\n items: ['container'],\n },\n {\n widthPercent: 50,\n items: ['graph'],\n heights: {\n graph: 3,\n },\n },\n ],\n xs: [\n {\n widthPercent: 100,\n items: ['container', 'graph'],\n heights: {\n graph: 3,\n },\n },\n ],\n }\n }\n\n onClickContainer = () => {\n const containerData = this.getContainer()\n this.onClickNodeView(containerData.srn, NODE_VIEW_TYPES.CONTAINER)\n }\n\n renderContainerCard = containerData => {\n if (!containerData || _.isEmpty(containerData)) {\n return (\n \n

    \n \n

    \n \n )\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n )\n }\n\n getHeaderDetails = () => {\n const node = this.props.nodeData\n\n return [\n \n \n {this.props.intl.formatMessage(messages.size)}\n \n \n ,\n ]\n }\n\n getGridContent = () => {\n const containerData = this.getContainer()\n\n return [\n
    {this.renderContainerCard(containerData)}
    ,\n ]\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nDataNodeViewCardLayout.propTypes = {\n getDataContent: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n dataContent: ImmutablePropTypes.map.isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n userProfile: PropTypes.object.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func,\n }).isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.func.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n dataContent: selectDataContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getDataContent,\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'dataNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'dataNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(DataNodeViewCardLayout)\n","/*\n * DataContainerNodeViewCardLayout Messages\n *\n * This contains all the text for the DataContainerNodeViewCardLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n title: {\n id: 'app.containers.DataContainerNodeViewCardLayout.title',\n defaultMessage: 'Data Container',\n },\n Actions: {\n id: 'app.containers.DataContainerNodeViewCardLayout.Actions',\n defaultMessage: 'Actions (Last 7 Days)',\n },\n performed: {\n id: 'app.containers.DataContainerNodeViewCardLayout.performed',\n defaultMessage: 'Activity',\n },\n Contents: {\n id: 'app.containers.DataContainerNodeViewCardLayout.Contents',\n defaultMessage: 'Contents',\n },\n DataClassifications: {\n id: 'app.containers.DataContainerNodeViewCardLayout.DataClassifications',\n defaultMessage: 'Database Anatomy',\n },\n FingerPrints: {\n id: 'app.containers.DataContainerNodeViewCardLayout.FingerPrints',\n defaultMessage: 'FingerPrints',\n },\n Datacontainer: {\n id: 'app.containers.DataContainerNodeViewCardLayout.Datacontainer',\n defaultMessage: 'Datacontainer',\n },\n activeLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n typeLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n lastModifiedLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.lastModifiedLabel',\n defaultMessage: 'Last Modified',\n },\n createdLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.createdLabel',\n defaultMessage: 'Created',\n },\n srnLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.srnLabel',\n defaultMessage: 'srn',\n },\n encryptionEnabledLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.encryptionEnabledLabel',\n defaultMessage: 'Encryption',\n },\n auditEnabledLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.auditEnabledLabel',\n defaultMessage: 'Audit',\n },\n versioningEnabledLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.versioningEnabledLabel',\n defaultMessage: 'Versioning',\n },\n publicReadLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.publicReadLabel',\n defaultMessage: 'Public Read',\n },\n publicWriteLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.publicWriteLabel',\n defaultMessage: 'Public Write',\n },\n websiteEnabledLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.websiteEnabledLabel',\n defaultMessage: 'Website',\n },\n writeOnceLabel: {\n id: 'app.containers.DataContainerNodeViewCardLayout.writeOnceLabel',\n defaultMessage: 'Write Once',\n },\n statusDays1: {\n id: 'app.containers.DataContainerNodeViewCardLayout.statusDays1',\n defaultMessage: 'within the past 24 hours',\n },\n statusDays7: {\n id: 'app.containers.DataContainerNodeViewCardLayout.statusDays7',\n defaultMessage: 'within the past 7 days',\n },\n statusDays30: {\n id: 'app.containers.DataContainerNodeViewCardLayout.statusDays30',\n defaultMessage: 'within the past 30 days',\n },\n statusDays90: {\n id: 'app.containers.DataContainerNodeViewCardLayout.statusDays90',\n defaultMessage: 'within the past 90 days',\n },\n})\n","export const GET_DATA_CONTAINER_CONTENT =\n 'app/DataContainerNodeViewCardLayout/GET_DATA_CONTAINER_CONTENT'\nexport const SET_DATA_CONTAINER_CONTENT =\n 'app/DataContainerNodeViewCardLayout/SET_DATA_CONTAINER_CONTENT'\n\nexport const GET_ACTIONS_PERFORMED =\n 'app/DataContainerNodeViewCardLayout/GET_ACTIONS_PERFORMED'\nexport const SET_ACTIONS_PERFORMED =\n 'app/DataContainerNodeViewCardLayout/SET_ACTIONS_PERFORMED'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport {\n SET_DATA_CONTAINER_CONTENT,\n GET_DATA_CONTAINER_CONTENT,\n SET_ACTIONS_PERFORMED,\n GET_ACTIONS_PERFORMED,\n} from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n actionsPerformed: [],\n loadingActions: false,\n dataContainerContent: {},\n isLoading: false,\n})\n\nconst dataContainerNodeViewCardLayoutReducer = handleActions(\n {\n [GET_ACTIONS_PERFORMED]: state => state.set('loadingActions', true),\n [SET_ACTIONS_PERFORMED]: (state, { payload }) => {\n return state\n .set('actionsPerformed', fromJS(payload))\n .set('loadingActions', false)\n },\n [GET_DATA_CONTAINER_CONTENT]: state => state.set('isLoading', true),\n [SET_DATA_CONTAINER_CONTENT]: (state, { payload }) => {\n return state\n .set('dataContainerContent', fromJS(payload))\n .set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('dataContainerContent', Map()),\n },\n initialState\n)\n\nexport default dataContainerNodeViewCardLayoutReducer\n","import {\n GET_DATA_CONTAINER_CONTENT,\n SET_DATA_CONTAINER_CONTENT,\n GET_ACTIONS_PERFORMED,\n SET_ACTIONS_PERFORMED,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getDataContainerContent = createAction(GET_DATA_CONTAINER_CONTENT)\nexport const setDataContainerContent = createAction(SET_DATA_CONTAINER_CONTENT)\n\nexport const getActionsPerformed = createAction(GET_ACTIONS_PERFORMED)\nexport const setActionsPerformed = createAction(SET_ACTIONS_PERFORMED)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport {\n DATA_CONTAINER_NODE_VIEW_QUERY,\n DATA_CONTAINER_PERFORMED_ON_ACTIONS_QUERY,\n} from 'static-queries'\nimport { GET_DATA_CONTAINER_CONTENT, GET_ACTIONS_PERFORMED } from './constants'\nimport { setDataContainerContent, setActionsPerformed } from './actions'\n\nfunction* getActions(action) {\n const { srn, range } = action.payload\n\n try {\n const client = getClient()\n const results = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${DATA_CONTAINER_PERFORMED_ON_ACTIONS_QUERY}\n `,\n variables: {\n srn,\n range,\n },\n })\n\n const actionsPerformed = results.data.Actions.items\n if (actionsPerformed === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setActionsPerformed(actionsPerformed))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error fetching data container actions', e)\n }\n}\n\nfunction* getDataContainerContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${DATA_CONTAINER_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n const content = results.data.DataContainers.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setDataContainerContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error fetching data container node view content', e)\n }\n}\n\nfunction* dataContainerNodeSaga() {\n yield takeLatest(GET_ACTIONS_PERFORMED, getActions)\n yield takeLatest(GET_DATA_CONTAINER_CONTENT, getDataContainerContent)\n}\n\nexport default dataContainerNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\nconst selectDataContainerNodeViewCardLayoutDomain = state =>\n state.get('dataContainerNodeViewCardLayout') || Map()\n\nexport const selectDataContainerContent = createSelector(\n selectDataContainerNodeViewCardLayoutDomain,\n state => state.get('dataContainerContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectDataContainerNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n\nexport const selectActionsPerformed = createSelector(\n selectDataContainerNodeViewCardLayoutDomain,\n state => state.get('actionsPerformed') || List()\n)\n\nexport const selectIsLoadingActions = createSelector(\n selectDataContainerNodeViewCardLayoutDomain,\n state => state.get('loadingActions')\n)\n","/**\n *\n * DataContainerNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { injectIntl } from 'react-intl'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List } from 'immutable'\nimport { FormattedMessage } from 'react-intl'\nimport Dropdown, {\n DropdownMenu,\n InlineDropdownAnchor,\n DropdownItem,\n} from 'components/Dropdown'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport TableWidget from 'components/TableWidget'\nimport { isClassificationSupported } from 'containers/DataClassification/utils'\nimport messages from './messages'\nimport TextLink from 'components/TextLink'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getDataContainerContent, getActionsPerformed } from './actions'\nimport {\n selectDataContainerContent,\n selectIsLoading,\n selectIsLoadingActions,\n selectActionsPerformed,\n} from './selectors'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { formatDataForDataAnatomy } from 'containers/DataClassification/utils'\nconst styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n marginRight: '7px',\n },\n}\n\nexport class DataContainerNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n filter: 1,\n }\n\n props.getActionsPerformed({\n srn: props.nodeData.srn,\n range: 1,\n })\n\n props.getDataContainerContent(props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getActions = () => {\n const { actionsPerformed, loadingActions } = this.props\n if (!actionsPerformed.isEmpty() && !loadingActions) {\n return actionsPerformed.toJS().map(action => {\n return {\n eventName: action.eventName,\n createdDate: action.createdDate,\n type: action.type,\n srn: action.srn,\n performedBy: _.get(action, ['performedBy', 'items', 0, 'name']),\n actionType: _.get(action, [\n 'hasActionType',\n 'group',\n 0,\n 'key',\n 'name',\n ]),\n }\n })\n } else {\n return []\n }\n }\n\n getDataAnatomyCustomColumnCofig = () => {\n const navigateToThing = srn => () => {\n const type = getTypeFromSrn(srn)\n const nav = getNodeViewPushParams(srn, type)\n this.props.push(nav)\n }\n return {\n flex: 1,\n cellRendererFramework: params => {\n if (typeof params.value === 'string') {\n return params.value\n } else {\n return (\n \n {params.value.name || params.value.srn || ''}\n \n )\n }\n },\n }\n }\n\n getContents = () => {\n const contents = this.props.dataContainerContent\n .getIn(['contains', 'items'], List())\n .toJS()\n .filter(item =>\n item.type\n ? !item.type.toLowerCase().includes('fingerprint')\n : !item.srn.toLowerCase().includes('fingerprint')\n )\n .map(item => {\n return {\n name: item.name,\n active: item.active,\n createdDate: item.createdDate,\n type: item.type,\n srn: item.srn,\n }\n })\n\n return contents\n }\n\n getFingerPrints = () => {\n const fingerprints = this.props.dataContainerContent\n .getIn(['contains', 'items'], List())\n .toJS()\n .filter(item =>\n item.type\n ? item.type.toLowerCase().includes('fingerprint')\n : item.srn.toLowerCase().includes('fingerprint')\n )\n\n return fingerprints.map(item => ({\n Type: item.type || '-',\n CoalescedCount: item.coalescedCount || '-',\n Encryption: (item.name && item.name.split('/')[2]) || '-',\n FileExtension: (item.name && _.last(item.name.split('/'))) || '-',\n }))\n }\n\n getLayouts = () => {\n const hasActions = this.getActions().length > 0\n const hasContents = this.getContents().length > 0\n const hasFingerPrints = this.getFingerPrints().length > 0\n\n return {\n actions: {\n lg: { w: 8, h: hasActions ? 3 : 1 },\n md: { w: 7, h: hasActions ? 3 : 1 },\n sm: { w: 6, h: hasActions ? 3 : 1 },\n xs: { w: 4, h: hasActions ? 3 : 1 },\n },\n fingerprints: {\n lg: { w: 8, h: hasFingerPrints ? 3 : 1 },\n md: { w: 7, h: hasFingerPrints ? 3 : 1 },\n sm: { w: 6, h: hasFingerPrints ? 3 : 1 },\n xs: { w: 4, h: hasFingerPrints ? 3 : 1 },\n },\n contents: {\n lg: { w: 8, h: hasContents ? 3 : 1 },\n md: { w: 7, h: hasContents ? 3 : 1 },\n sm: { w: 6, h: hasContents ? 3 : 1 },\n xs: { w: 4, h: hasContents ? 3 : 1 },\n },\n graph: {\n lg: { w: 5, h: 3 },\n md: { w: 4, h: 3 },\n sm: { w: 6, h: 3 },\n xs: { w: 4, h: 3 },\n },\n }\n }\n\n handleFilterChange = ({ value }) => {\n this.setState({\n filter: value,\n })\n this.props.getActionsPerformed({\n srn: this.props.nodeData.srn,\n range: value,\n })\n }\n\n getContentsTable = () => {\n const supportsDataClassifications = isClassificationSupported(\n this.props.nodeData\n )\n\n if (\n supportsDataClassifications &&\n !_.isEmpty(\n formatDataForDataAnatomy(this.props.dataContainerContent).toJS()\n )\n ) {\n return (\n \n )\n }\n return (\n \n )\n }\n\n getGridContent = () => {\n return [\n
    \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n
    \n }\n loading={this.props.loadingActions}\n />\n ,\n
    {this.getContentsTable()}
    ,\n
    \n \n
    ,\n ]\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nDataContainerNodeViewCardLayout.propTypes = {\n getDataContainerContent: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n isLoading: PropTypes.bool,\n dataContainerContent: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n userProfile: PropTypes.object.isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n getActionsPerformed: PropTypes.func,\n actionsPerformed: ImmutablePropTypes.iterable,\n loadingActions: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n dataContainerContent: selectDataContainerContent,\n isLoading: selectIsLoading,\n loadingActions: selectIsLoadingActions,\n actionsPerformed: selectActionsPerformed,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n setUserProfileTables,\n push,\n getDataContainerContent,\n getActionsPerformed,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({\n key: 'dataContainerNodeViewCardLayout',\n reducer,\n})\n\nconst withSaga = injectSaga({\n key: 'dataContainerNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(DataContainerNodeViewCardLayout)\n","export const GET_DATA_STORE_CONTENT =\n 'app/DataStoreNodeViewCardLayout/GET_DATA_STORE_CONTENT'\nexport const SET_DATA_STORE_CONTENT =\n 'app/DataStoreNodeViewCardLayout/SET_DATA_STORE_CONTENT'\nexport const ERR_DATA_STORE_CONTENT =\n 'app/DataStoreNodeViewCardLayout/ERR_DATA_STORE_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS } from 'immutable'\nimport {\n GET_DATA_STORE_CONTENT,\n ERR_DATA_STORE_CONTENT,\n SET_DATA_STORE_CONTENT,\n} from './constants'\n\nconst initialState = fromJS({\n dataStoreContent: {\n loading: false,\n error: false,\n data: {},\n },\n})\n\nconst dataStoreNodeViewCardLayoutReducer = handleActions(\n {\n [GET_DATA_STORE_CONTENT]: state =>\n state\n .setIn(['dataStoreContent', 'loading'], true)\n .setIn(['dataStoreContent', 'error'], false),\n [ERR_DATA_STORE_CONTENT]: state =>\n state\n .setIn(['dataStoreContent', 'loading'], false)\n .setIn(['dataStoreContent', 'error'], true),\n [SET_DATA_STORE_CONTENT]: (state, { payload }) =>\n state\n .setIn(['dataStoreContent', 'loading'], false)\n .setIn(['dataStoreContent', 'error'], false)\n .setIn(['dataStoreContent', 'data'], fromJS(payload.content)),\n },\n initialState\n)\n\nexport default dataStoreNodeViewCardLayoutReducer\n","import { createAction } from 'redux-actions'\nimport {\n GET_DATA_STORE_CONTENT,\n SET_DATA_STORE_CONTENT,\n ERR_DATA_STORE_CONTENT,\n} from './constants'\n\nexport const getDataStoreContent = createAction(GET_DATA_STORE_CONTENT)\nexport const setDataStoreContent = createAction(SET_DATA_STORE_CONTENT)\nexport const errDataStoreContent = createAction(ERR_DATA_STORE_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport { getClient } from 'apolloClient'\nimport { GET_DATA_STORE_CONTENT } from './constants'\nimport { errDataStoreContent, setDataStoreContent } from './actions'\n\nconst DATA_STORE_CONTENTS_QUERY = gql`\n query dataStoreContents($srn: String!) {\n DataStores(where: { srn: { value: $srn } }) {\n items {\n srn\n type\n classificationSet\n contains(where: { label: { value: \"DataContainer\" } }) {\n items {\n label\n name\n ... on Datacontainer {\n type\n serviceType\n }\n createdDate\n srn\n }\n }\n }\n }\n }\n`\n\nfunction* getDataStoreContent(action) {\n const { srn } = action.payload\n const client = yield getClient()\n try {\n const result = yield client.query({\n variables: { srn },\n query: DATA_STORE_CONTENTS_QUERY,\n })\n const path = ['data', 'DataStores', 'items', 0]\n const content = _.get(result, path, null)\n if (content === null) {\n throw new Error(`Result did not return data at path: ${path}`)\n }\n yield put(setDataStoreContent({ content }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`an error happened fetching dataStoreContent`, e)\n yield put(errDataStoreContent())\n }\n}\n\nfunction* dataStoreNodeSaga() {\n yield takeLatest(GET_DATA_STORE_CONTENT, getDataStoreContent)\n}\n\nexport default dataStoreNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectDataStoreNodeViewCardLayoutDomain = state =>\n state.get('dataStoreNodeViewCardLayout') || Map()\n\nexport const selectDataStoreContent = createSelector(\n selectDataStoreNodeViewCardLayoutDomain,\n state => state.get('dataStoreContent') || Map()\n)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n contents: {\n id: 'app.containers.DataStoreNodeViewCardLayout.contents',\n defaultMessage: 'Contents',\n },\n})\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\n\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport reducer from './reducers'\nimport sagas from './sagas'\n\nimport { getDataStoreContent } from './actions'\nimport { selectDataStoreContent } from './selectors'\n\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport BorderedCard from 'components/BorderedCard'\nimport DataTable from 'components/DataTable'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SectionHeader from 'components/SectionHeader'\n\nimport messages from './messages'\n\nconst TYPES_WITH_ANATOMY = [\n 'Aurora',\n 'MariaDB',\n 'MySQL',\n 'MSSQL',\n 'Oracle',\n 'PostgreSQL',\n 'Redshift',\n 'SQLServer',\n 'DynamoDB',\n 'S3',\n]\n\nexport class DataStoreNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n this.props.getDataStoreContent({\n srn: this.props.nodeId,\n })\n }\n\n renderTablesAndColumnsView = () => {\n const tableRows = this.props.dataStoreContent.getIn([\n 'data',\n 'contains',\n 'items',\n ])\n\n return (\n \n {\n const srn = row.srn\n const type = getTypeFromSrn(srn)\n const nav = getNodeViewPushParams(srn, type)\n this.props.push(nav)\n }}\n />\n \n )\n }\n\n renderDBAnatomy = () => {\n if (this.props.dataStoreContent.get('loading')) {\n return
    loading ...
    \n }\n\n if (this.props.dataStoreContent.get('error')) {\n return
    error loading content...
    \n }\n\n if (!this.props.dataStoreContent.get('data').isEmpty()) {\n return this.renderTablesAndColumnsView()\n }\n\n return null\n }\n\n getColumns = () => {\n return {\n xs: [\n {\n widthPercent: 100,\n items: ['contents'],\n heights: {\n graph: 3,\n },\n },\n ],\n }\n }\n\n getLayouts = () => {\n return {\n contents: {\n lg: { w: 8, h: 3 },\n md: { w: 7, h: 3 },\n sm: { w: 6, h: 3 },\n xs: { w: 4, h: 3 },\n },\n }\n }\n\n getGridContent = () => {\n return [\n
    \n \n \n \n \n {this.renderDBAnatomy()}\n \n
    ,\n ]\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nDataStoreNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n nodeData: PropTypes.object,\n nodeId: PropTypes.string.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n\n // props from redux store\n dataStoreContent: ImmutablePropTypes.map,\n\n // bound action creators\n push: PropTypes.func,\n getDataStoreContent: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n dataStoreContent: selectDataStoreContent,\n})\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators(\n {\n push,\n getDataStoreContent,\n },\n dispatch\n )\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({\n key: 'dataStoreNodeViewCardLayout',\n reducer,\n})\n\nconst withSaga = injectSaga({\n key: 'dataStoreNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withReducer,\n withSaga,\n withConnect\n)(DataStoreNodeViewCardLayout)\n","/*\n * PublicKeyNodeViewCardLayout Messages\n *\n * This contains all the text for the PublicKeyNodeViewCardLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n title: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.title',\n defaultMessage: 'Data Details',\n },\n activeLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n typeLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n group: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.group',\n defaultMessage: 'Group',\n },\n lastModifiedLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.lastModifiedLabel',\n defaultMessage: 'Last Modified',\n },\n createdLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.createdLabel',\n defaultMessage: 'Created',\n },\n srnLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.srnLabel',\n defaultMessage: 'srn',\n },\n service: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.service',\n defaultMessage: 'Service',\n },\n descriptionLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.description',\n defaultMessage: 'Description',\n },\n sizeLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.size',\n defaultMessage: 'Size',\n },\n bytes: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.bytes',\n defaultMessage: 'Bytes',\n },\n publicRead: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.publicRead',\n defaultMessage: 'Public Read',\n },\n publicWrite: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.publicWrite',\n defaultMessage: 'Public Write',\n },\n webisteEnabled: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.webisteEnabled',\n defaultMessage: 'Website Enabled',\n },\n auditEnabled: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.auditEnabled',\n defaultMessage: 'Audit Enabled',\n },\n containerLabel: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.containerLabel',\n defaultMessage: 'Container',\n },\n none: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.none',\n defaultMessage: 'None',\n },\n dataItem: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.dataItem',\n defaultMessage: 'This Data item is not part of a container',\n },\n record: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.record',\n defaultMessage: 'Record',\n },\n performed: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.performed',\n defaultMessage: 'Performed (Last 7 Days)',\n },\n info: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.info',\n defaultMessage: 'Info',\n },\n members: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.performed',\n defaultMessage: 'Members',\n },\n groupsPolicies: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.groupsPolicies',\n defaultMessage: 'Groups & Policies',\n },\n label: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.label',\n defaultMessage: 'Label',\n },\n PublicKey: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.PublicKey',\n defaultMessage: 'PublicKey',\n },\n public: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.public',\n defaultMessage: 'Public',\n },\n usedIn: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.usedIn',\n defaultMessage: 'Used In:',\n },\n Version: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.version',\n defaultMessage: 'Version',\n },\n noPolicies: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.noPolicies',\n defaultMessage: 'This policy has no versions',\n },\n Fingerprint: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.Fingerprint',\n defaultMessage: 'Fingerprint',\n },\n topTitleText: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.topTitleText',\n defaultMessage: 'Used to Access Compute: ',\n },\n lastLaunched: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.lastLaunched',\n defaultMessage: 'Last Launched: ',\n },\n architecture: {\n id: 'app.containers.PublicKeyNodeViewCardLayout.architecture',\n defaultMessage: 'Architecture: ',\n },\n})\n","export const GET_PUBLICKEY_CONTENT =\n 'app/PublickeyNodeViewCardLayout/GET_PUBLICKEY_CONTENT'\nexport const SET_PUBLICKEY_CONTENT =\n 'app/PublickeyNodeViewCardLayout/SET_PUBLICKEY_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_PUBLICKEY_CONTENT, GET_PUBLICKEY_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n publickeyContent: {},\n isLoading: false,\n})\n\nconst publickeyNodeViewCardLayoutReducer = handleActions(\n {\n [GET_PUBLICKEY_CONTENT]: state => state.set('isLoading', true),\n [SET_PUBLICKEY_CONTENT]: (state, { payload }) => {\n return state\n .set('publickeyContent', fromJS(payload))\n .set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('publickeyContent', Map()),\n },\n initialState\n)\n\nexport default publickeyNodeViewCardLayoutReducer\n","import { GET_PUBLICKEY_CONTENT, SET_PUBLICKEY_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getPublickeyContent = createAction(GET_PUBLICKEY_CONTENT)\nexport const setPublickeyContent = createAction(SET_PUBLICKEY_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { PUBLIC_KEY_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_PUBLICKEY_CONTENT } from './constants'\nimport { setPublickeyContent } from './actions'\n\nfunction* getPublickeyContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${PUBLIC_KEY_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.PublicKey.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setPublickeyContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* publickeyNodeSaga() {\n yield takeLatest(GET_PUBLICKEY_CONTENT, getPublickeyContent)\n}\n\nexport default publickeyNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectPublickeyNodeViewCardLayoutDomain = state =>\n state.get('publickeyNodeViewCardLayout', Map())\n\nexport const selectPublickeyContent = createSelector(\n selectPublickeyNodeViewCardLayoutDomain,\n state => state.get('publickeyContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectPublickeyNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * PublicKeyNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport moment from 'moment'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\n\nimport Card, { CardBody, TopTitle } from 'components/Card'\nimport DataTable from 'components/DataTable'\nimport { injectIntl } from 'react-intl'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getPublickeyContent } from './actions'\nimport { selectPublickeyContent, selectIsLoading } from './selectors'\n\nconst styles = {\n title: {\n color: '#C8C8C8',\n fontWeight: '500',\n fontSize: '1.2rem',\n marginRight: '0.25rem',\n },\n}\nexport class PublicKeyNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getPublickeyContent(props.nodeData.srn)\n }\n\n getUsedToAccess = () =>\n this.props.publickeyContent.getIn(['usedToAccess', 'items'], List()).toJS()\n\n getGridContent = usedToAccess => {\n const usedToAccesses = usedToAccess.map(accessed => {\n return (\n
    \n \n \n \n {this.props.intl.formatMessage(messages.topTitleText)}\n \n {accessed.ComputeName || '-'}\n \n\n \n
    \n
    \n \n {this.props.intl.formatMessage(messages.lastLaunched)}\n \n {accessed.launchTime\n ? moment(accessed.launchTime).format('lll')\n : '-'}\n
    \n
    \n \n {this.props.intl.formatMessage(messages.architecture)}\n \n {accessed.architecture ? accessed.architecture : '-'}\n
    \n
    \n {\n return {\n eventName: item.eventName,\n createdDate: item.createdDate,\n performedBy: _.get(item, [\n 'performedBy',\n 'items',\n 0,\n 'name',\n ]),\n }\n })}\n />\n \n
    \n
    \n )\n })\n\n return usedToAccesses\n }\n\n getColumns = items => {\n return {\n md: [\n {\n widthPercent: 50,\n items: ['graph'],\n heights: {\n graph: 3,\n },\n },\n {\n widthPercent: 50,\n items: items.map(item => item.ComputeName),\n heights: items.reduce((heights, item) => {\n heights[item.ComputeName] = 2\n return heights\n }, {}),\n },\n ],\n xs: [\n {\n widthPercent: 100,\n items: [...items.map(item => item.ComputeName), 'graph'],\n heights: {\n ...items.reduce((heights, item) => {\n heights[item.ComputeName] = 2\n return heights\n }, {}),\n graph: 3,\n },\n },\n ],\n }\n }\n\n render() {\n const usedToAccess = this.getUsedToAccess()\n return (\n \n \n\n \n \n )\n }\n}\nPublicKeyNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n publickeyContent: ImmutablePropTypes.map.isRequired,\n getPublickeyContent: PropTypes.func.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n isLoading: PropTypes.bool,\n userProfile: ImmutablePropTypes.map.isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n isLoading: selectIsLoading,\n userProfile: selectUserProfile,\n publickeyContent: selectPublickeyContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getPublickeyContent,\n setUserProfileTables,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({\n key: 'publickeyNodeViewCardLayout',\n reducer,\n})\n\nconst withSaga = injectSaga({\n key: 'publickeyNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(PublicKeyNodeViewCardLayout)\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\nconst selectRoleNodeViewCardLayoutDomain = state =>\n state.get('roleNodeViewCardLayout', Map())\n\nexport const selectActionsPerformed = createSelector(\n selectRoleNodeViewCardLayoutDomain,\n state => state.get('actionsPerformed') || List()\n)\n\nexport const selectIsLoadingActions = createSelector(\n selectRoleNodeViewCardLayoutDomain,\n state => state.get('loadingActions')\n)\n\nexport const selectRoleContent = createSelector(\n selectRoleNodeViewCardLayoutDomain,\n state => state.get('roleContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectRoleNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","export const GET_ROLE_CONTENT = 'app/RoleNodeViewCardLayout/GET_ROLE_CONTENT'\nexport const SET_ROLE_CONTENT = 'app/RoleNodeViewCardLayout/SET_ROLE_CONTENT'\nexport const GET_ACTIONS_PERFORMED =\n 'app/RoleNodeViewCardLayout/GET_ACTIONS_PERFORMED'\nexport const SET_ACTIONS_PERFORMED =\n 'app/RoleNodeViewCardLayout/SET_ACTIONS_PERFORMED'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport {\n GET_ROLE_CONTENT,\n SET_ROLE_CONTENT,\n GET_ACTIONS_PERFORMED,\n SET_ACTIONS_PERFORMED,\n} from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n roleContent: {},\n isLoading: false,\n actionsPerformed: [],\n loadingActions: false,\n})\n\nconst roleNodeViewCardLayoutReducer = handleActions(\n {\n [GET_ROLE_CONTENT]: state => state.set('isLoading', true),\n [SET_ROLE_CONTENT]: (state, { payload }) => {\n return state.set('roleContent', fromJS(payload)).set('isLoading', false)\n },\n [GET_ACTIONS_PERFORMED]: state => state.set('loadingActions', true),\n [SET_ACTIONS_PERFORMED]: (state, { payload }) => {\n return state\n .set('actionsPerformed', fromJS(payload))\n .set('loadingActions', false)\n },\n [CLEAR_DATA]: state => state.set('roleContent', Map()),\n },\n initialState\n)\n\nexport default roleNodeViewCardLayoutReducer\n","import {\n GET_ROLE_CONTENT,\n SET_ROLE_CONTENT,\n GET_ACTIONS_PERFORMED,\n SET_ACTIONS_PERFORMED,\n} from './constants'\n\nimport { createAction } from 'redux-actions'\n\nexport const getRoleContent = createAction(GET_ROLE_CONTENT)\nexport const setRoleContent = createAction(SET_ROLE_CONTENT)\nexport const getActionsPerformed = createAction(GET_ACTIONS_PERFORMED)\nexport const setActionsPerformed = createAction(SET_ACTIONS_PERFORMED)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport {\n USER_NODE_VIEW_ACTIONS_PERFORMED_QUERY,\n ROLE_NODE_VIEW_QUERY,\n} from 'static-queries' // do we need a role specific actions performed query ?\nimport { GET_ROLE_CONTENT, GET_ACTIONS_PERFORMED } from './constants'\nimport { setRoleContent, setActionsPerformed } from './actions'\n\nfunction* getActions(action) {\n const { srn, range } = action.payload\n\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${USER_NODE_VIEW_ACTIONS_PERFORMED_QUERY}\n `,\n variables: {\n srn,\n range,\n },\n })\n const actionsPerformed = results.data.Actions.items\n if (actionsPerformed === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setActionsPerformed(actionsPerformed))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getRoleContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${ROLE_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Roles.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setRoleContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* roleNodeSaga() {\n yield takeLatest(GET_ACTIONS_PERFORMED, getActions)\n yield takeLatest(GET_ROLE_CONTENT, getRoleContent)\n}\n\nexport default roleNodeSaga\n","/**\n *\n * RoleNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { FormattedMessage } from 'react-intl'\nimport { injectIntl } from 'react-intl'\nimport { push } from 'connected-react-router'\nimport { compose, bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { List } from 'immutable'\nimport { exists } from 'utils/sonraiUtils'\n\nimport { getNodeViewPushParams, getPrincipalType } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport { DAEMON } from 'utils/constants'\nimport TableWidget from 'components/TableWidget'\nimport Dropdown, {\n DropdownMenu,\n InlineDropdownAnchor,\n DropdownItem,\n} from 'components/Dropdown'\nimport messages from 'containers/NodeViewLayouts/UserNodeViewCardLayout/messages'\nimport {\n selectRoleContent,\n selectIsLoading,\n selectActionsPerformed,\n selectIsLoadingActions,\n} from './selectors'\nimport reducer from './reducer'\nimport { getRoleContent, getActionsPerformed } from './actions'\nimport sagas from './sagas'\n\nconst styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n },\n}\n\nexport class RoleNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n filter: 1,\n }\n\n props.getActionsPerformed({\n srn: this.props.nodeData.srn,\n range: this.state.filter.value,\n })\n\n props.getRoleContent(this.props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getKeysOwned = () => {\n let rows = []\n this.props.roleContent\n .getIn(['isOwnerOf', 'group'], List())\n .toJS()\n .forEach(item => {\n const key = item.key.label || '-'\n item.items.forEach(groupName => {\n rows.push({\n type: key,\n name: groupName.name || '-',\n srn: groupName.srn,\n })\n })\n })\n return rows\n }\n\n getAttachedPolicies = () => {\n let rows = []\n this.props.roleContent\n .getIn(['hasAttached', 'items'], List())\n .toJS()\n .forEach(policy => {\n const { name, active, srn } = policy\n rows.push({\n policyActive: active,\n policyName: name,\n srn,\n })\n })\n\n return rows\n }\n\n getPerformed = () => {\n const { actionsPerformed } = this.props\n if (!actionsPerformed.isEmpty()) {\n const data = actionsPerformed.map(action => {\n return {\n eventName: action.get('eventName') || '-',\n cityPerformedAt:\n action.get('performedAtCityValue') ||\n (exists(action.get('performedAtCityValues')) &&\n action.get('performedAtCityValues').join(', ')) ||\n '-',\n srn: action.get('srn'),\n }\n })\n return data.toJS()\n } else {\n return []\n }\n }\n\n getPrincipals = () => {\n const principals = []\n if (this.props.roleContent) {\n this.props.roleContent\n .getIn(['hasAttached', 'items'], [])\n .forEach(policy => {\n policy.getIn(['hasPolicyVersion', 'items'], []).forEach(version => {\n version.getIn(['hasPolicyEntry', 'items'], []).forEach(entry => {\n entry.getIn(['hasPrincipal', 'items'], []).forEach(principal => {\n principals.push({\n account: principal.get('principalAccount'),\n name: principal.get('principalName'),\n srn: principal.get('principalSRN'),\n type: getPrincipalType(principal.get('principalSRN')),\n })\n })\n })\n })\n })\n }\n return principals\n }\n\n handleRangeChange = val => {\n this.setState({\n filter: val.value,\n })\n this.props.getActionsPerformed({\n srn: this.props.nodeData.srn,\n range: val.value,\n })\n }\n\n getLayouts = () => {\n const numAttachedPolicies = this.getAttachedPolicies().length\n const numOwned = this.getKeysOwned().length\n const numPerformed = this.getPerformed().length\n\n return {\n policies: {\n md: { w: 8, h: numAttachedPolicies > 0 ? 2 : 1 },\n sm: { w: 6, h: numAttachedPolicies > 0 ? 2 : 1 },\n xs: { w: 4, h: numAttachedPolicies > 0 ? 2 : 1 },\n },\n owns: {\n md: { w: 3, h: numOwned > 0 ? 2 : 1 },\n sm: { w: 5, h: numOwned > 0 ? 2 : 1 },\n xs: { w: 3, h: numOwned > 0 ? 2 : 1 },\n },\n performed: {\n md: { w: 4, h: numPerformed > 0 ? 2 : 1 },\n sm: { w: 6, h: numPerformed > 0 ? 2 : 1 },\n xs: { w: 4, h: numPerformed > 0 ? 2 : 1 },\n },\n graph: {\n lg: { w: 4, h: 3 },\n md: { w: 3, h: 3 },\n sm: { w: 6, h: 3 },\n xs: { w: 4, h: 3 },\n },\n }\n }\n\n getGridContent = () => {\n return [\n
    \n \n
    ,\n
    \n \n
    ,\n
    \n \n \n {' '}\n \n\n this.handleRangeChange(filter)}\n >\n \n \n \n \n \n \n \n \n
    \n }\n onClickNodeView={this.onClickNodeView}\n loading={this.props.loadingActions}\n />\n ,\n ]\n }\n\n render() {\n let nodeData = {\n ...this.props.nodeData,\n servicePrincipals: this.getPrincipals(),\n }\n\n return (\n \n \n\n \n \n )\n }\n}\n\nRoleNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n setUserProfileTables: PropTypes.func,\n roleContent: ImmutablePropTypes.map.isRequired,\n getRoleContent: PropTypes.func.isRequired,\n loadingRoleContent: PropTypes.bool,\n userProfile: PropTypes.object,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func,\n }),\n getActionsPerformed: PropTypes.func,\n loadingActions: PropTypes.bool,\n loading: PropTypes.bool,\n actionsPerformed: PropTypes.object,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object,\n push: PropTypes.func,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n actionsPerformed: selectActionsPerformed,\n loadingActions: selectIsLoadingActions,\n userProfile: selectUserProfile,\n roleContent: selectRoleContent,\n loadingRoleContent: selectIsLoading,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getActionsPerformed,\n setUserProfileTables,\n push,\n getRoleContent,\n },\n dispatch\n )\n}\n\nconst withReducer = injectReducer({ key: 'roleNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'roleNodeViewCardLayout',\n saga: sagas,\n mode: DAEMON,\n})\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n injectIntl,\n withSaga,\n withReducer\n)(RoleNodeViewCardLayout)\n","/**\n *\n * PolicyEntryInfo\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport BorderlessButton from 'components/BorderlessButton'\nimport { Table } from 'reactstrap'\n\nconst styles = {\n active: {\n backgroundColor: '#fff',\n },\n activeSubkey: {\n fontWeight: 'bold',\n backgroundColor: 'rgb(249, 251, 255)',\n borderLeft: '1px solid #eee',\n },\n activeSubkeyButton: {\n backgroundColor: 'transparent',\n },\n wrapper: {\n borderTop: '1px solid #eee',\n borderBottom: '1px solid #eee',\n padding: '1em',\n paddingRight: '0',\n },\n properties: {\n padding: '1em 0 0 1em',\n },\n subkeys: {\n paddingLeft: '1em',\n },\n title: {\n textAlign: 'left',\n },\n code: {\n fontFamily: 'monospace',\n fontSize: '1.2em',\n lineHeight: '1.5em',\n marginBottom: '1em',\n paddingRight: '1em',\n wordBreak: 'break-word',\n wordWrap: 'break-word', //Needed for Firefox\n },\n label: {\n paddingRight: '1em',\n },\n}\n\nclass PolicyEntryInfo extends React.Component {\n renderPolicySubButton = (type, label) => {\n return (\n \n \n \n {label}\n \n \n \n )\n }\n\n render() {\n return (\n \n \n {this.props.policyEntry.name}\n \n {this.props.active && (\n
    \n
    \n Conditions:\n
    {this.props.policyEntry.conditions}
    \n
    \n
    \n Resource Filter:\n\n
    \n {this.props.policyEntry.resourceFilter}\n
    \n
    \n
    \n \n \n {this.renderPolicySubButton('allows', this.props.allowsLabel)}\n {this.renderPolicySubButton('denies', this.props.deniesLabel)}\n \n
    \n
    \n
    \n )}\n \n )\n }\n}\n\nPolicyEntryInfo.propTypes = {\n policyEntry: PropTypes.shape({\n name: PropTypes.string,\n conditions: PropTypes.string,\n resourceFilter: PropTypes.string,\n }),\n index: PropTypes.number,\n setContent: PropTypes.func,\n active: PropTypes.bool,\n activeSubkey: PropTypes.string,\n allowsLabel: PropTypes.node,\n deniesLabel: PropTypes.node,\n}\n\nexport default PolicyEntryInfo\n","/**\n *\n * PolicyVersionWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { Table } from 'reactstrap'\nimport _ from 'lodash'\nimport Card, { TopTitle, CardBody } from 'components/Card'\nimport PolicyEntryInfo from './PolicyEntryInfo'\nimport InfoCard from 'components/InfoCard'\n\nconst styles = {\n entryContainer: {\n display: 'grid',\n gridTemplateColumns: '30% 1fr',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n entryList: {\n overflow: 'auto',\n },\n permissionsTitle: {\n fontSize: '1.3em',\n padding: '0.3em 1em 1em 0',\n },\n policyEntryTitle: {\n fontSize: '1.3em',\n marginBottom: '0.5em',\n },\n tableContainer: {\n padding: '1em',\n backgroundColor: '#fff',\n },\n contentsWrapper: {\n backgroundColor: 'rgb(249, 251, 255)',\n padding: '1em',\n border: '1px solid #eee',\n overflow: 'auto',\n },\n}\n\nclass PolicyVersionWidget extends React.Component {\n state = {\n selectedPolicyIndex: 0,\n selectedSubKey: 'allows',\n }\n\n getSelectedPolicyEntry = () => {\n return _.get(\n this.props.hasPolicyEntry,\n ['items', this.state.selectedPolicyIndex],\n {}\n )\n }\n\n getSelectedSubKey = () => {\n return this.state.selectedSubKey || 'allows'\n }\n\n getTableContents = () => {\n return _.get(\n this.getSelectedPolicyEntry(),\n ['hasPermissionList', 'items', 0, this.getSelectedSubKey(), 'items'],\n []\n )\n }\n\n setContent = (policyIndex, subkey) => {\n this.setState({\n selectedPolicyIndex: policyIndex,\n selectedSubKey: subkey,\n })\n\n if (this.props.recalculateGrid) {\n setTimeout(this.props.recalculateGrid, 100)\n }\n }\n\n renderPolicyEntryList = () => {\n return this.props.hasPolicyEntry.items.map((policyEntry, index) => {\n return (\n \n )\n })\n }\n\n renderPermissionsList = permissions => {\n let x = []\n for (let i = 0; i < permissions.length; i++) {\n const permission = permissions[i]\n\n if (_.get(permission, ['hasServiceType', 'items', 'length'], 0) > 0) {\n for (let j = 0; j < permission.hasServiceType.items.length; j++) {\n x.push({\n name: permission.name,\n serviceType: permission.hasServiceType.items[j].name,\n })\n }\n } else {\n x.push({\n name: permission.name,\n serviceType: '-',\n })\n }\n }\n\n return x.map((cell, i) => (\n \n {cell.name}\n {cell.serviceType} \n \n ))\n }\n\n render() {\n if (this.props.loading) {\n return \n }\n\n if (\n !this.props.hasPolicyEntry ||\n this.props.hasPolicyEntry.items.length === 0\n ) {\n return \n }\n\n return (\n \n \n
    Policy Entries
    \n
    \n \n
    \n
    {this.renderPolicyEntryList()}
    \n
    \n
    \n {this.state.selectedSubKey === 'allows' ? 'Allows' : 'Denies'}\n
    \n
    \n \n \n \n \n \n \n \n \n {!_.isEmpty(this.getTableContents()) &&\n this.renderPermissionsList(this.getTableContents())}\n \n
    Permission Service Type
    \n
    \n
    \n
    \n \n
    \n )\n }\n}\n\nPolicyVersionWidget.propTypes = {\n loading: PropTypes.bool,\n hasPolicyEntry: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n conditions: PropTypes.string,\n resourceFilter: PropTypes.string,\n allows: PropTypes.shape({\n items: PropTypes.array,\n }),\n denies: PropTypes.shape({\n items: PropTypes.array,\n }),\n })\n ),\n }),\n recalculateGrid: PropTypes.func,\n}\n\nexport default PolicyVersionWidget\n","/*\n * PolicyNodeViewCardLayout Messages\n *\n * This contains all the text for the PolicyNodeViewCardLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n title: {\n id: 'app.containers.PolicyNodeViewCardLayout.title',\n defaultMessage: 'Data Details',\n },\n activeLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n typeLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n Description: {\n id: 'app.containers.PolicyNodeViewCardLayout.description',\n defaultMessage: 'Description',\n },\n group: {\n id: 'app.containers.PolicyNodeViewCardLayout.group',\n defaultMessage: 'Group',\n },\n lastModifiedLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.lastModifiedLabel',\n defaultMessage: 'Last Modified',\n },\n createdLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.createdLabel',\n defaultMessage: 'Created',\n },\n srnLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.srnLabel',\n defaultMessage: 'srn',\n },\n service: {\n id: 'app.containers.PolicyNodeViewCardLayout.service',\n defaultMessage: 'Service',\n },\n descriptionLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.description',\n defaultMessage: 'Description',\n },\n sizeLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.size',\n defaultMessage: 'Size',\n },\n bytes: {\n id: 'app.containers.PolicyNodeViewCardLayout.bytes',\n defaultMessage: 'Bytes',\n },\n publicRead: {\n id: 'app.containers.PolicyNodeViewCardLayout.publicRead',\n defaultMessage: 'Public Read',\n },\n publicWrite: {\n id: 'app.containers.PolicyNodeViewCardLayout.publicWrite',\n defaultMessage: 'Public Write',\n },\n webisteEnabled: {\n id: 'app.containers.PolicyNodeViewCardLayout.webisteEnabled',\n defaultMessage: 'Website Enabled',\n },\n auditEnabled: {\n id: 'app.containers.PolicyNodeViewCardLayout.auditEnabled',\n defaultMessage: 'Audit Enabled',\n },\n containerLabel: {\n id: 'app.containers.PolicyNodeViewCardLayout.containerLabel',\n defaultMessage: 'Container',\n },\n none: {\n id: 'app.containers.PolicyNodeViewCardLayout.none',\n defaultMessage: 'None',\n },\n dataItem: {\n id: 'app.containers.PolicyNodeViewCardLayout.dataItem',\n defaultMessage: 'This Data item is not part of a container',\n },\n record: {\n id: 'app.containers.PolicyNodeViewCardLayout.record',\n defaultMessage: 'Record',\n },\n performed: {\n id: 'app.containers.PolicyNodeViewCardLayout.performed',\n defaultMessage: 'Performed',\n },\n members: {\n id: 'app.containers.PolicyNodeViewCardLayout.performed',\n defaultMessage: 'Members',\n },\n groupsPolicies: {\n id: 'app.containers.PolicyNodeViewCardLayout.groupsPolicies',\n defaultMessage: 'Groups & Policies',\n },\n label: {\n id: 'app.containers.PolicyNodeViewCardLayout.label',\n defaultMessage: 'Label',\n },\n Policy: {\n id: 'app.containers.PolicyNodeViewCardLayout.Policy',\n defaultMessage: 'Policy',\n },\n public: {\n id: 'app.containers.PolicyNodeViewCardLayout.public',\n defaultMessage: 'Public',\n },\n usedIn: {\n id: 'app.containers.PolicyNodeViewCardLayout.usedIn',\n defaultMessage: 'Used In:',\n },\n Version: {\n id: 'app.containers.PolicyNodeViewCardLayout.version',\n defaultMessage: 'Version',\n },\n noPolicies: {\n id: 'app.containers.PolicyNodeViewCardLayout.noPolicies',\n defaultMessage: 'This policy has no versions',\n },\n name: {\n id: 'app.containers.PolicyNodeViewCardLayout.name',\n defaultMessage: 'Name',\n },\n subscription: {\n id: 'app.containers.PolicyNodeViewCardLayout.subscription',\n defaultMessage: 'Subscription',\n },\n})\n","export const GET_POLICY_CONTENT =\n 'app/PolicyNodeViewCardLayout/GET_POLICY_CONTENT'\nexport const SET_POLICY_CONTENT =\n 'app/PolicyNodeViewCardLayout/SET_POLICY_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_POLICY_CONTENT, GET_POLICY_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n policyContent: {},\n isLoading: false,\n})\n\nconst policyNodeViewCardLayoutReducer = handleActions(\n {\n [GET_POLICY_CONTENT]: state => state.set('isLoading', true),\n [SET_POLICY_CONTENT]: (state, { payload }) => {\n return state.set('policyContent', fromJS(payload)).set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('policyContent', Map()),\n },\n initialState\n)\n\nexport default policyNodeViewCardLayoutReducer\n","import { GET_POLICY_CONTENT, SET_POLICY_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getPolicyContent = createAction(GET_POLICY_CONTENT)\nexport const setPolicyContent = createAction(SET_POLICY_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { POLICY_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_POLICY_CONTENT } from './constants'\nimport { setPolicyContent } from './actions'\n\nfunction* getPolicyContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${POLICY_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Policies.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setPolicyContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* policyNodeSaga() {\n yield takeLatest(GET_POLICY_CONTENT, getPolicyContent)\n}\n\nexport default policyNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectPolicyNodeViewCardLayoutDomain = state =>\n state.get('policyNodeViewCardLayout', Map())\n\nexport const selectPolicyContent = createSelector(\n selectPolicyNodeViewCardLayoutDomain,\n state => state.get('policyContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectPolicyNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * PolicyNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List } from 'immutable'\nimport _ from 'lodash'\nimport TextLink from 'components/TextLink'\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { NodeViewDetailString, NodeViewDetailLabel } from 'components/NodeView'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport { injectIntl } from 'react-intl'\nimport JSONDisplay from 'components/JSONDisplay'\nimport EmptyWidgetResults from 'components/EmptyWidgetResults'\nimport PolicyVersionWidget from 'components/PolicyVersionWidget'\nimport BorderedCard from 'components/BorderedCard'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getPolicyContent } from './actions'\nimport { selectPolicyContent, selectIsLoading } from './selectors'\n\nconst styles = {\n descTitle: {\n fontSize: '1.3em',\n },\n niceline: {\n marginTop: '0.5em',\n marginBottom: '0.5em',\n },\n}\n\nexport class PolicyNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getPolicyContent(props.nodeData.srn)\n\n this.state = {\n selectedTabIndex: 0,\n isOpen: false,\n }\n }\n\n getVersions = () =>\n this.props.policyContent.getIn(['hasPolicyVersion', 'items'], List()).toJS()\n\n setTabIndex = index => {\n this.setState({\n selectedTabIndex: index,\n })\n }\n\n getTabs = () =>\n this.getVersions().map(version => ({\n id: version.version,\n text: version.version,\n }))\n\n getSelectedVersion = () => {\n return this.getVersions()[this.state.selectedTabIndex] || null\n }\n\n toggleJSONModal = () =>\n this.setState(oldState => ({ isOpen: !oldState.isOpen }))\n\n getGridContent = () => {\n const version = this.getSelectedVersion()\n return [\n
    {this.renderDesc()}
    ,\n ,\n ]\n }\n\n getPolicyJSON = () => {\n if (!this.props.isLoading) {\n return _.get(this.getVersions(), ['0', 'policyJSON'], null)\n }\n return null\n }\n\n getColumns = () => {\n return {\n xs: [\n {\n widthPercent: 100,\n items: ['description', 'policy', 'graph'],\n heights: {\n graph: 3,\n },\n },\n ],\n }\n }\n\n renderDesc = () => {\n if (this.props.policyContent.get('hasPolicyVersion')) {\n const desc = this.props.policyContent.getIn([\n 'hasPolicyVersion',\n 'items',\n 0,\n 'hasPolicyEntry',\n 'items',\n 0,\n 'hasPermissionList',\n 'items',\n 0,\n 'description',\n ])\n return (\n \n
    \n
    Permission List Description
    \n
    \n
    {desc}
    \n
    \n
    \n )\n } else {\n return null\n }\n }\n getHeaderContent = () => {\n const version = !_.isEmpty(this.getSelectedVersion())\n ? this.getSelectedVersion().version\n : null\n\n return [\n \n \n
    \n {this.props.intl.formatMessage(messages.Version)}\n {this.getPolicyJSON() && (\n \n (View Policy JSON)\n \n )}\n
    \n
    \n \n
    ,\n ]\n }\n\n render() {\n const json = this.getPolicyJSON()\n const { friendlyName, name } = this.props.nodeData\n return (\n \n \n\n \n \n \n {friendlyName || name || 'Policy'} JSON\n \n \n {json ? (\n \n ) : (\n \n )}\n \n \n \n )\n }\n}\n\nPolicyNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n isLoading: PropTypes.bool,\n policyContent: ImmutablePropTypes.map.isRequired,\n getPolicyContent: PropTypes.func.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n policyContent: selectPolicyContent,\n isLoading: selectIsLoading,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getPolicyContent,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'policyNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'policyNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(PolicyNodeViewCardLayout)\n","/*\n * ImageNodeViewCardLayout Messages\n *\n * This contains all the text for the ImageNodeViewCardLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n title: {\n id: 'app.containers.ImageNodeViewCardLayout.title',\n defaultMessage: 'Data Details',\n },\n activeLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n typeLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n group: {\n id: 'app.containers.ImageNodeViewCardLayout.group',\n defaultMessage: 'Group',\n },\n lastModifiedLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.lastModifiedLabel',\n defaultMessage: 'Last Modified',\n },\n createdLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.createdLabel',\n defaultMessage: 'Created',\n },\n srnLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.srnLabel',\n defaultMessage: 'srn',\n },\n service: {\n id: 'app.containers.ImageNodeViewCardLayout.service',\n defaultMessage: 'Service',\n },\n descriptionLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.descriptionLabel',\n defaultMessage: 'Description',\n },\n sizeLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.size',\n defaultMessage: 'Size',\n },\n bytes: {\n id: 'app.containers.ImageNodeViewCardLayout.bytes',\n defaultMessage: 'Bytes',\n },\n publicRead: {\n id: 'app.containers.ImageNodeViewCardLayout.publicRead',\n defaultMessage: 'Public Read',\n },\n publicWrite: {\n id: 'app.containers.ImageNodeViewCardLayout.publicWrite',\n defaultMessage: 'Public Write',\n },\n webisteEnabled: {\n id: 'app.containers.ImageNodeViewCardLayout.webisteEnabled',\n defaultMessage: 'Website Enabled',\n },\n auditEnabled: {\n id: 'app.containers.ImageNodeViewCardLayout.auditEnabled',\n defaultMessage: 'Audit Enabled',\n },\n containerLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.containerLabel',\n defaultMessage: 'Container',\n },\n stateLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.stateLabel',\n defaultMessage: 'State',\n },\n architectureLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.architectureLabel',\n defaultMessage: 'Architecture',\n },\n platformLabel: {\n id: 'app.containers.ImageNodeViewCardLayout.platformLabel',\n defaultMessage: 'Platform',\n },\n none: {\n id: 'app.containers.ImageNodeViewCardLayout.none',\n defaultMessage: 'None',\n },\n dataItem: {\n id: 'app.containers.ImageNodeViewCardLayout.dataItem',\n defaultMessage: 'This Data item is not part of a container',\n },\n record: {\n id: 'app.containers.ImageNodeViewCardLayout.record',\n defaultMessage: 'Record',\n },\n performed: {\n id: 'app.containers.ImageNodeViewCardLayout.performed',\n defaultMessage: 'Performed',\n },\n members: {\n id: 'app.containers.ImageNodeViewCardLayout.performed',\n defaultMessage: 'Members',\n },\n groupsPolicies: {\n id: 'app.containers.ImageNodeViewCardLayout.groupsPolicies',\n defaultMessage: 'Groups & Policies',\n },\n label: {\n id: 'app.containers.ImageNodeViewCardLayout.label',\n defaultMessage: 'Label',\n },\n Image: {\n id: 'app.containers.ImageNodeViewCardLayout.Image',\n defaultMessage: 'Image',\n },\n public: {\n id: 'app.containers.ImageNodeViewCardLayout.public',\n defaultMessage: 'Public',\n },\n usedIn: {\n id: 'app.containers.ImageNodeViewCardLayout.usedIn',\n defaultMessage: 'Used In',\n },\n})\n","export const GET_IMAGE_CONTENT = 'app/ImageNodeViewCardLayout/GET_IMAGE_CONTENT'\nexport const SET_IMAGE_CONTENT = 'app/ImageNodeViewCardLayout/SET_IMAGE_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_IMAGE_CONTENT, GET_IMAGE_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n imageContent: {},\n isLoading: false,\n})\n\nconst imageNodeViewCardLayoutReducer = handleActions(\n {\n [GET_IMAGE_CONTENT]: state => state.set('isLoading', true),\n [SET_IMAGE_CONTENT]: (state, { payload }) => {\n return state.set('imageContent', fromJS(payload)).set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('imageContent', Map()),\n },\n initialState\n)\n\nexport default imageNodeViewCardLayoutReducer\n","import { GET_IMAGE_CONTENT, SET_IMAGE_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getImageContent = createAction(GET_IMAGE_CONTENT)\nexport const setImageContent = createAction(SET_IMAGE_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { IMAGE_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_IMAGE_CONTENT } from './constants'\nimport { setImageContent } from './actions'\n\nfunction* getImageContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${IMAGE_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Image.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setImageContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* imageNodeSaga() {\n yield takeLatest(GET_IMAGE_CONTENT, getImageContent)\n}\n\nexport default imageNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectImageNodeViewCardLayoutDomain = state =>\n state.get('imageNodeViewCardLayout', Map())\n\nexport const selectImageContent = createSelector(\n selectImageNodeViewCardLayoutDomain,\n state => state.get('imageContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectImageNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * ImageNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { injectIntl } from 'react-intl'\nimport { List } from 'immutable'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport TableWidget from 'components/TableWidget'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getImageContent } from './actions'\nimport { selectImageContent, selectIsLoading } from './selectors'\n\nexport class ImageNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getImageContent(props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getComputes = () =>\n this.props.imageContent.getIn(['baseOf', 'items'], List()).toJS()\n\n getUsedIn = () => {\n return this.getComputes().map(compute => {\n const { launchTime, state, srn } = compute\n return {\n computeName: compute.ComputeName,\n launchTime,\n state,\n srn,\n networks: compute.isAttachedToNetwork.items\n .map(network => network.name)\n .join('\\n'),\n subnets: compute.isAttachedToSubnet.items\n .map(subnet => subnet.name)\n .join('\\n'),\n blockstorages: compute.isAttachedToBlockStorage.items\n .map(store => store.BlockStorageName)\n .join('\\n'),\n }\n })\n }\n\n getColumns = () => {\n const numUsedIn = this.getUsedIn().length\n return {\n md: [\n {\n widthPercent: 50,\n items: ['computes'],\n heights: {\n computes: numUsedIn > 0 ? 2 : 1,\n },\n },\n {\n widthPercent: 50,\n items: ['graph'],\n heights: {\n graph: 3,\n },\n },\n ],\n xs: [\n {\n widthPercent: 100,\n items: ['computes', 'graph'],\n heights: {\n computes: numUsedIn > 0 ? 2 : 1,\n graph: 3,\n },\n },\n ],\n }\n }\n\n getGridContent = () => {\n return [\n
    \n \n
    ,\n ]\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nImageNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n imageContent: ImmutablePropTypes.map.isRequired,\n getImageContent: PropTypes.func.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n isLoading: PropTypes.bool,\n userProfile: ImmutablePropTypes.map.isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n isLoading: selectIsLoading,\n userProfile: selectUserProfile,\n imageContent: selectImageContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getImageContent,\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({\n key: 'imageNodeViewCardLayout',\n reducer,\n})\n\nconst withSaga = injectSaga({\n key: 'imageNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(ImageNodeViewCardLayout)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n actionsTitle: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.actionsTitle',\n defaultMessage: 'Actions (Last 7 Days)',\n },\n subnetsTitle: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.subnetsTitle',\n defaultMessage: 'Subnets',\n },\n nodeViewType: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.nodeViewType',\n defaultMessage: 'Compute',\n },\n blockStorageTitle: {\n id:\n 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.blockStorageTitle',\n defaultMessage: 'Block Storage',\n },\n networksTitle: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.networksTitle',\n defaultMessage: 'Networks',\n },\n accountLabel: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id:\n 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n launchTimeLabel: {\n id:\n 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.launchTimeLabel',\n defaultMessage: 'Launch Time',\n },\n typeLabel: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n stateLabel: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.stateLabel',\n defaultMessage: 'State',\n },\n basedOnLabel: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.basedOnLabel',\n defaultMessage: 'Based On',\n },\n activeLabel: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n ebsOptimizedLabel: {\n id:\n 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.ebsOptimizedLabel',\n defaultMessage: 'EBS Optimized',\n },\n encryptionEnabledLabel: {\n id:\n 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.encryptionEnabledLabel',\n defaultMessage: 'Encryption Enabled',\n },\n architectureLabel: {\n id:\n 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.architectureLabel',\n defaultMessage: 'Architecture',\n },\n timezoneLabel: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.timezoneLabel',\n defaultMessage: 'Timezone',\n },\n isPublicLabel: {\n id: 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.isPublicLabel',\n defaultMessage: 'Public',\n },\n networkConnection: {\n id:\n 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.networkConnection',\n defaultMessage: 'Network Connections',\n },\n securityGroups: {\n id:\n 'app.container.NodeViewLayouts.ComputeNodeViewCardLayout.securityGroups',\n defaultMessage: 'Security Groups',\n },\n})\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nimport BorderedCard from 'components/BorderedCard'\nimport { TopTitle, CardBody } from 'components/Card'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport TextLink from 'components/TextLink'\n\nimport messages from './messages'\n\nconst styles = {\n card: {\n width: '100%',\n height: '100%',\n },\n cardBody: {\n justifyContent: 'right',\n },\n title: {\n fontSize: '14px',\n fontWeight: '300',\n borderBottom: '1px solid #eee',\n marginRight: '0px',\n },\n rowDataCell: {\n display: 'inline',\n fontSize: '12px',\n },\n rowArrowCell: {\n display: 'inline',\n fontSize: '8px',\n padding: '10px',\n position: 'relative',\n top: '-2px',\n },\n}\n\nclass NetworkConnectionsWidget extends Component {\n /**\n * This method will take the nested data structure from the query:\n *\n * isAttachedToInterface { # interface\n * name\n * items {\n * name\n * isAttachedToSubnet { # subnet\n * items {\n * isPartOf { items { name } } # vpc\n * }\n * }\n * }\n * }\n *\n * and turn it into a list of:\n * [\n * [ interface, subnet, vpc ],\n * [ ... ],\n * ...\n * ]\n */\n getRowData = () => {\n return this.props.computeContent.isAttachedToInterface.items.flatMap(\n interfaze => {\n // get a list of [subnet, vpc]\n const subnetsWithVPCs = interfaze.isAttachedToSubnet.items.flatMap(\n subnet => {\n return subnet.isPartOf.items.map(vpc => [subnet, vpc])\n }\n )\n\n return subnetsWithVPCs.map(subnetWithVPCs => {\n return [interfaze, ...subnetWithVPCs]\n })\n }\n )\n }\n\n renderRow = (rowData, i) => {\n const [interfaze, subnet, vpc] = rowData\n return (\n
    \n
    \n this.props.handleClick(interfaze.srn)}\n >\n {interfaze.name}\n \n
    \n\n
    \n \n
    \n
    \n this.props.handleClick(subnet.srn)}\n >\n {subnet.name}\n \n
    \n
    \n \n
    \n
    \n this.props.handleClick(vpc.srn)}\n >\n {vpc.name}\n \n
    \n
    \n )\n }\n\n renderCardBody = () => {\n if (this.props.isLoading) {\n return \n }\n const rowData = this.getRowData()\n return
    {rowData.map(this.renderRow)}
    \n }\n\n render() {\n return (\n \n \n \n \n {this.renderCardBody()}\n \n )\n }\n}\n\nNetworkConnectionsWidget.propTypes = {\n handleClick: PropTypes.func.isRequired,\n isLoading: PropTypes.bool,\n computeContent: PropTypes.object,\n}\n\nexport default NetworkConnectionsWidget\n","export const GET_COMPUTE_CONTENT =\n 'app/ComputeNodeViewCardLayout/GET_COMPUTE_CONTENT'\nexport const SET_COMPUTE_CONTENT =\n 'app/ComputeNodeViewCardLayout/SET_COMPUTE_CONTENT'\nexport const GET_INBOUND_PUBLIC_FILTERS =\n 'app/ComputeNodeViewCardLayout/GET_INBOUND_PUBLIC_FILTERS'\nexport const SET_INBOUND_PUBLIC_FILTERS =\n 'app/ComputeNodeViewCardLayout/SET_INBOUND_PUBLIC_FILTERS'\nexport const GET_INBOUND_PRIVATE_FILTERS =\n 'app/ComputeNodeViewCardLayout/GET_INBOUND_PRIVATE_FILTERS'\nexport const SET_INBOUND_PRIVATE_FILTERS =\n 'app/ComputeNodeViewCardLayout/SET_INBOUND_PRIVATE_FILTERS'\nexport const GET_INBOUND_PUBLIC_PATH =\n 'app/ComputeNodeViewCardLayout/GET_INBOUND_PUBLIC_PATH'\nexport const SET_INBOUND_PUBLIC_PATH =\n 'app/ComputeNodeViewCardLayout/SET_INBOUND_PUBLIC_PATH'\nexport const GET_INBOUND_PRIVATE_PATH =\n 'app/ComputeNodeViewCardLayout/GET_INBOUND_PRIVATE_PATH'\nexport const SET_INBOUND_PRIVATE_PATH =\n 'app/ComputeNodeViewCardLayout/SET_INBOUND_PRIVATE_PATH'\n\nexport const GET_OUTBOUND_PUBLIC_FILTERS =\n 'app/ComputeNodeViewCardLayout/GET_OUTBOUND_PUBLIC_FILTERS'\nexport const SET_OUTBOUND_PUBLIC_FILTERS =\n 'app/ComputeNodeViewCardLayout/SET_OUTBOUND_PUBLIC_FILTERS'\nexport const GET_OUTBOUND_PRIVATE_FILTERS =\n 'app/ComputeNodeViewCardLayout/GET_OUTBOUND_PRIVATE_FILTERS'\nexport const SET_OUTBOUND_PRIVATE_FILTERS =\n 'app/ComputeNodeViewCardLayout/SET_OUTBOUND_PRIVATE_FILTERS'\nexport const GET_OUTBOUND_PUBLIC_PATH =\n 'app/ComputeNodeViewCardLayout/GET_OUTBOUND_PUBLIC_PATH'\nexport const SET_OUTBOUND_PUBLIC_PATH =\n 'app/ComputeNodeViewCardLayout/SET_OUTBOUND_PUBLIC_PATH'\nexport const GET_OUTBOUND_PRIVATE_PATH =\n 'app/ComputeNodeViewCardLayout/GET_OUTBOUND_PRIVATE_PATH'\nexport const SET_OUTBOUND_PRIVATE_PATH =\n 'app/ComputeNodeViewCardLayout/SET_OUTBOUND_PRIVATE_PATH'\n\nexport const GET_INDIRECT_INBOUND_PUBLIC_FILTERS =\n 'app/ComputeNodeViewCardLayout/GET_INDIRECT_INBOUND_PUBLIC_FILTERS'\nexport const SET_INDIRECT_INBOUND_PUBLIC_FILTERS =\n 'app/ComputeNodeViewCardLayout/SET_INDIRECT_INBOUND_PUBLIC_FILTERS'\nexport const GET_INDIRECT_INBOUND_PRIVATE_FILTERS =\n 'app/ComputeNodeViewCardLayout/GET_INDIRECT_INBOUND_PRIVATE_FILTERS'\nexport const SET_INDIRECT_INBOUND_PRIVATE_FILTERS =\n 'app/ComputeNodeViewCardLayout/SET_INDIRECT_INBOUND_PRIVATE_FILTERS'\nexport const GET_INDIRECT_INBOUND_PUBLIC_PATH =\n 'app/ComputeNodeViewCardLayout/GET_INDIRECT_INBOUND_PUBLIC_PATH'\nexport const SET_INDIRECT_INBOUND_PUBLIC_PATH =\n 'app/ComputeNodeViewCardLayout/SET_INDIRECT_INBOUND_PUBLIC_PATH'\nexport const GET_INDIRECT_INBOUND_PRIVATE_PATH =\n 'app/ComputeNodeViewCardLayout/GET_INDIRECT_INBOUND_PRIVATE_PATH'\nexport const SET_INDIRECT_INBOUND_PRIVATE_PATH =\n 'app/ComputeNodeViewCardLayout/SET_INDIRECT_INBOUND_PRIVATE_PATH'\n\nexport const GET_COMPUTE_SECURITY_GROUPS =\n 'app/ComputeNodeViewCardLayout/GET_COMPUTE_SECURITY_GROUPS'\nexport const SET_COMPUTE_SECURITY_GROUPS =\n 'app/ComputeNodeViewCardLayout/SET_COMPUTE_SECURITY_GROUPS'\nexport const ERR_COMPUTE_SECURITY_GROUPS =\n 'app/ComputeNodeViewCardLayout/ERR_COMPUTE_SECURITY_GROUPS'\n","import { handleActions } from 'redux-actions'\nimport { fromJS } from 'immutable'\nimport {\n SET_COMPUTE_CONTENT,\n GET_COMPUTE_CONTENT,\n GET_INBOUND_PUBLIC_FILTERS,\n SET_INBOUND_PUBLIC_FILTERS,\n GET_INBOUND_PRIVATE_FILTERS,\n SET_INBOUND_PRIVATE_FILTERS,\n GET_INBOUND_PUBLIC_PATH,\n SET_INBOUND_PUBLIC_PATH,\n GET_INBOUND_PRIVATE_PATH,\n SET_INBOUND_PRIVATE_PATH,\n GET_OUTBOUND_PUBLIC_FILTERS,\n SET_OUTBOUND_PUBLIC_FILTERS,\n GET_OUTBOUND_PRIVATE_FILTERS,\n SET_OUTBOUND_PRIVATE_FILTERS,\n GET_OUTBOUND_PUBLIC_PATH,\n SET_OUTBOUND_PUBLIC_PATH,\n GET_OUTBOUND_PRIVATE_PATH,\n SET_OUTBOUND_PRIVATE_PATH,\n GET_INDIRECT_INBOUND_PUBLIC_FILTERS,\n SET_INDIRECT_INBOUND_PUBLIC_FILTERS,\n GET_INDIRECT_INBOUND_PRIVATE_FILTERS,\n SET_INDIRECT_INBOUND_PRIVATE_FILTERS,\n GET_INDIRECT_INBOUND_PUBLIC_PATH,\n SET_INDIRECT_INBOUND_PUBLIC_PATH,\n GET_INDIRECT_INBOUND_PRIVATE_PATH,\n SET_INDIRECT_INBOUND_PRIVATE_PATH,\n GET_COMPUTE_SECURITY_GROUPS,\n SET_COMPUTE_SECURITY_GROUPS,\n ERR_COMPUTE_SECURITY_GROUPS,\n} from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n computeContent: {},\n isLoading: false,\n inboundPublicFilters: {},\n loadingInboundPublicFilters: false,\n inboundPrivateFilters: {},\n loadingInboundPrivateFilters: false,\n inboundPublicPath: {},\n loadingInboundPublicPath: false,\n inboundPrivatePath: {},\n loadingInboundPrivatePath: false,\n outboundPublicFilters: {},\n loadingOutboundPublicFilters: false,\n outboundPrivateFilters: {},\n loadingOutboundPrivateFilters: false,\n outboundPublicPath: {},\n loadingOutboundPublicPath: false,\n outboundPrivatePath: {},\n loadingOutboundPrivatePath: false,\n indirectInboundPublicFilters: {},\n loadingIndirectInboundPublicFilters: false,\n indirectInboundPrivateFilters: {},\n loadingIndirectInboundPrivateFilters: false,\n indirectInboundPublicPath: {},\n loadingIndirectInboundPublicPath: false,\n indirectInboundPrivatePath: {},\n loadingIndirectInboundPrivatePath: false,\n securityGroups: {},\n loadingSecurityGroups: false,\n errorSecurityGroups: false,\n})\n\nconst computeNodeViewCardLayoutReducer = handleActions(\n {\n [GET_COMPUTE_CONTENT]: state => state.set('isLoading', true),\n [SET_COMPUTE_CONTENT]: (state, { payload }) => {\n return state\n .set('computeContent', fromJS(payload))\n .set('isLoading', false)\n },\n [GET_INBOUND_PUBLIC_FILTERS]: state =>\n state.set('loadingInboundPublicFilters', true),\n [SET_INBOUND_PUBLIC_FILTERS]: (state, { payload }) => {\n return state\n .set('inboundPublicFilters', fromJS(payload))\n .set('loadingInboundPublicFilters', false)\n },\n [GET_INBOUND_PRIVATE_FILTERS]: state =>\n state.set('loadingInboundPrivateFilters', true),\n [SET_INBOUND_PRIVATE_FILTERS]: (state, { payload }) => {\n return state\n .set('inboundPrivateFilters', fromJS(payload))\n .set('loadingInboundPrivateFilters', false)\n },\n [GET_INBOUND_PUBLIC_PATH]: state =>\n state.set('loadingInboundPublicPath', true),\n [SET_INBOUND_PUBLIC_PATH]: (state, { payload }) => {\n return state\n .set('inboundPublicPath', fromJS(payload))\n .set('loadingInboundPublicPath', false)\n },\n [GET_INBOUND_PRIVATE_PATH]: state =>\n state.set('loadingInboundPrivatePath', true),\n [SET_INBOUND_PRIVATE_PATH]: (state, { payload }) => {\n return state\n .set('inboundPrivatePath', fromJS(payload))\n .set('loadingInboundPrivatePath', false)\n },\n [GET_OUTBOUND_PUBLIC_FILTERS]: state =>\n state.set('loadingOutboundPublicFilters', true),\n [SET_OUTBOUND_PUBLIC_FILTERS]: (state, { payload }) => {\n return state\n .set('outboundPublicFilters', fromJS(payload))\n .set('loadingOutboundPublicFilters', false)\n },\n [GET_OUTBOUND_PRIVATE_FILTERS]: state =>\n state.set('loadingOutboundPrivateFilters', true),\n [SET_OUTBOUND_PRIVATE_FILTERS]: (state, { payload }) => {\n return state\n .set('outboundPrivateFilters', fromJS(payload))\n .set('loadingOutboundPrivateFilters', false)\n },\n [GET_OUTBOUND_PUBLIC_PATH]: state =>\n state.set('loadingOutboundPublicPath', true),\n [SET_OUTBOUND_PUBLIC_PATH]: (state, { payload }) => {\n return state\n .set('outboundPublicPath', fromJS(payload))\n .set('loadingOutboundPublicPath', false)\n },\n [GET_OUTBOUND_PRIVATE_PATH]: state =>\n state.set('loadingOutboundPrivatePath', true),\n [SET_OUTBOUND_PRIVATE_PATH]: (state, { payload }) => {\n return state\n .set('outboundPrivatePath', fromJS(payload))\n .set('loadingOutboundPrivatePath', false)\n },\n [GET_INDIRECT_INBOUND_PUBLIC_FILTERS]: state =>\n state.set('loadingIndirectInboundPublicFilters', true),\n [SET_INDIRECT_INBOUND_PUBLIC_FILTERS]: (state, { payload }) => {\n return state\n .set('indirectInboundPublicFilters', fromJS(payload))\n .set('loadingIndirectInboundPublicFilters', false)\n },\n [GET_INDIRECT_INBOUND_PRIVATE_FILTERS]: state =>\n state.set('loadingIndirectInboundPrivateFilters', true),\n [SET_INDIRECT_INBOUND_PRIVATE_FILTERS]: (state, { payload }) => {\n return state\n .set('indirectInboundPrivateFilters', fromJS(payload))\n .set('loadingIndirectInboundPrivateFilters', false)\n },\n [GET_INDIRECT_INBOUND_PUBLIC_PATH]: state =>\n state.set('loadingIndirectInboundPublicPath', true),\n [SET_INDIRECT_INBOUND_PUBLIC_PATH]: (state, { payload }) => {\n return state\n .set('indirectInboundPublicPath', fromJS(payload))\n .set('loadingIndirectInboundPublicPath', false)\n },\n [GET_INDIRECT_INBOUND_PRIVATE_PATH]: state =>\n state.set('loadingIndirectInboundPrivatePath', true),\n [SET_INDIRECT_INBOUND_PRIVATE_PATH]: (state, { payload }) => {\n return state\n .set('indirectInboundPrivatePath', fromJS(payload))\n .set('loadingIndirectInboundPrivatePath', false)\n },\n [GET_COMPUTE_SECURITY_GROUPS]: state =>\n state\n .set('loadingSecurityGroups', true)\n .set('errorSecurityGroups', false),\n [SET_COMPUTE_SECURITY_GROUPS]: (state, { payload }) =>\n state\n .set('loadingSecurityGroups', false)\n .set('errorSecurityGroups', false)\n .set('securityGroups', fromJS(payload)),\n [ERR_COMPUTE_SECURITY_GROUPS]: state =>\n state\n .set('loadingSecurityGroups', false)\n .set('errorSecurityGroups', true),\n [CLEAR_DATA]: () => initialState,\n },\n initialState\n)\n\nexport default computeNodeViewCardLayoutReducer\n","import {\n GET_COMPUTE_CONTENT,\n SET_COMPUTE_CONTENT,\n GET_INBOUND_PUBLIC_FILTERS,\n SET_INBOUND_PUBLIC_FILTERS,\n GET_INBOUND_PRIVATE_FILTERS,\n SET_INBOUND_PRIVATE_FILTERS,\n GET_INBOUND_PUBLIC_PATH,\n SET_INBOUND_PUBLIC_PATH,\n GET_INBOUND_PRIVATE_PATH,\n SET_INBOUND_PRIVATE_PATH,\n GET_OUTBOUND_PUBLIC_FILTERS,\n SET_OUTBOUND_PUBLIC_FILTERS,\n GET_OUTBOUND_PRIVATE_FILTERS,\n SET_OUTBOUND_PRIVATE_FILTERS,\n GET_OUTBOUND_PUBLIC_PATH,\n SET_OUTBOUND_PUBLIC_PATH,\n GET_OUTBOUND_PRIVATE_PATH,\n SET_OUTBOUND_PRIVATE_PATH,\n GET_INDIRECT_INBOUND_PUBLIC_FILTERS,\n SET_INDIRECT_INBOUND_PUBLIC_FILTERS,\n GET_INDIRECT_INBOUND_PRIVATE_FILTERS,\n SET_INDIRECT_INBOUND_PRIVATE_FILTERS,\n GET_INDIRECT_INBOUND_PUBLIC_PATH,\n SET_INDIRECT_INBOUND_PUBLIC_PATH,\n GET_INDIRECT_INBOUND_PRIVATE_PATH,\n SET_INDIRECT_INBOUND_PRIVATE_PATH,\n GET_COMPUTE_SECURITY_GROUPS,\n SET_COMPUTE_SECURITY_GROUPS,\n ERR_COMPUTE_SECURITY_GROUPS,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getComputeContent = createAction(GET_COMPUTE_CONTENT)\nexport const setComputeContent = createAction(SET_COMPUTE_CONTENT)\nexport const getInboundPublicFilters = createAction(GET_INBOUND_PUBLIC_FILTERS)\nexport const setInboundPublicFilters = createAction(SET_INBOUND_PUBLIC_FILTERS)\n\nexport const getInboundPrivateFilters = createAction(\n GET_INBOUND_PRIVATE_FILTERS\n)\nexport const setInboundPrivateFilters = createAction(\n SET_INBOUND_PRIVATE_FILTERS\n)\n\nexport const getInboundPublicPath = createAction(GET_INBOUND_PUBLIC_PATH)\nexport const setInboundPublicPath = createAction(SET_INBOUND_PUBLIC_PATH)\nexport const getInboundPrivatePath = createAction(GET_INBOUND_PRIVATE_PATH)\nexport const setInboundPrivatePath = createAction(SET_INBOUND_PRIVATE_PATH)\n\nexport const getOutboundPublicFilters = createAction(\n GET_OUTBOUND_PUBLIC_FILTERS\n)\nexport const setOutboundPublicFilters = createAction(\n SET_OUTBOUND_PUBLIC_FILTERS\n)\n\nexport const getOutboundPrivateFilters = createAction(\n GET_OUTBOUND_PRIVATE_FILTERS\n)\nexport const setOutboundPrivateFilters = createAction(\n SET_OUTBOUND_PRIVATE_FILTERS\n)\n\nexport const getOutboundPublicPath = createAction(GET_OUTBOUND_PUBLIC_PATH)\nexport const setOutboundPublicPath = createAction(SET_OUTBOUND_PUBLIC_PATH)\nexport const getOutboundPrivatePath = createAction(GET_OUTBOUND_PRIVATE_PATH)\nexport const setOutboundPrivatePath = createAction(SET_OUTBOUND_PRIVATE_PATH)\n\nexport const getIndirectInboundPublicFilters = createAction(\n GET_INDIRECT_INBOUND_PUBLIC_FILTERS\n)\nexport const setIndirectInboundPublicFilters = createAction(\n SET_INDIRECT_INBOUND_PUBLIC_FILTERS\n)\n\nexport const getIndirectInboundPrivateFilters = createAction(\n GET_INDIRECT_INBOUND_PRIVATE_FILTERS\n)\nexport const setIndirectInboundPrivateFilters = createAction(\n SET_INDIRECT_INBOUND_PRIVATE_FILTERS\n)\n\nexport const getIndirectInboundPublicPath = createAction(\n GET_INDIRECT_INBOUND_PUBLIC_PATH\n)\nexport const setIndirectInboundPublicPath = createAction(\n SET_INDIRECT_INBOUND_PUBLIC_PATH\n)\nexport const getIndirectInboundPrivatePath = createAction(\n GET_INDIRECT_INBOUND_PRIVATE_PATH\n)\nexport const setIndirectInboundPrivatePath = createAction(\n SET_INDIRECT_INBOUND_PRIVATE_PATH\n)\n\nexport const getComputeSecurityGroups = createAction(\n GET_COMPUTE_SECURITY_GROUPS\n)\nexport const setComputesecurityGroups = createAction(\n SET_COMPUTE_SECURITY_GROUPS\n)\nexport const errComputeSecurityGroups = createAction(\n ERR_COMPUTE_SECURITY_GROUPS\n)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport {\n COMPUTE_NODE_VIEW_QUERY,\n COMPUTE_INBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY,\n COMPUTE_INBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY,\n COMPUTE_INBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY,\n COMPUTE_INBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY,\n COMPUTE_OUTBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY,\n COMPUTE_OUTBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY,\n COMPUTE_OUTBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY,\n COMPUTE_OUTBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY,\n COMPUTE_INDIRECT_INBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY,\n COMPUTE_INDIRECT_INBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY,\n COMPUTE_INDIRECT_INBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY,\n COMPUTE_INDIRECT_INBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY,\n COMPUTE_SECURITY_GROUP_QUERY,\n} from 'static-queries'\n\nimport {\n GET_COMPUTE_CONTENT,\n GET_INBOUND_PUBLIC_FILTERS,\n GET_INBOUND_PRIVATE_FILTERS,\n GET_INBOUND_PUBLIC_PATH,\n GET_INBOUND_PRIVATE_PATH,\n GET_OUTBOUND_PUBLIC_FILTERS,\n GET_OUTBOUND_PRIVATE_FILTERS,\n GET_OUTBOUND_PUBLIC_PATH,\n GET_OUTBOUND_PRIVATE_PATH,\n GET_INDIRECT_INBOUND_PUBLIC_FILTERS,\n GET_INDIRECT_INBOUND_PRIVATE_FILTERS,\n GET_INDIRECT_INBOUND_PUBLIC_PATH,\n GET_INDIRECT_INBOUND_PRIVATE_PATH,\n GET_COMPUTE_SECURITY_GROUPS,\n} from './constants'\nimport {\n setComputeContent,\n setInboundPublicFilters,\n setInboundPrivateFilters,\n setInboundPublicPath,\n setInboundPrivatePath,\n setOutboundPublicFilters,\n setOutboundPrivateFilters,\n setOutboundPublicPath,\n setOutboundPrivatePath,\n setIndirectInboundPublicFilters,\n setIndirectInboundPrivateFilters,\n setIndirectInboundPublicPath,\n setIndirectInboundPrivatePath,\n setComputesecurityGroups,\n errComputeSecurityGroups\n} from './actions'\n\nfunction* getComputeContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setComputeContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getInboundPublicFilters(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_INBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setInboundPublicFilters(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getInboundPrivateFilters(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_INBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setInboundPrivateFilters(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getInboundPublicPath(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_INBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setInboundPublicPath(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getInboundPrivatePath(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_INBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setInboundPrivatePath(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getOutboundPublicFilters(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_OUTBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setOutboundPublicFilters(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getOutboundPrivateFilters(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_OUTBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setOutboundPrivateFilters(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getOutboundPublicPath(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_OUTBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setOutboundPublicPath(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getOutboundPrivatePath(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_OUTBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setOutboundPrivatePath(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getIndirectInboundPublicFilters(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_INDIRECT_INBOUND_PUBLIC_FILTERS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setIndirectInboundPublicFilters(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getIndirectInboundPrivateFilters(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_INDIRECT_INBOUND_PRIVATE_FILTERS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setIndirectInboundPrivateFilters(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getIndirectInboundPublicPath(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_INDIRECT_INBOUND_PUBLIC_PATHS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setIndirectInboundPublicPath(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getIndirectInboundPrivatePath(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_INDIRECT_INBOUND_PRIVATE_PATHS_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n\n const content = results.data.Compute\n if (content.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setIndirectInboundPrivatePath(content))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getComputeSecurityGroups(action) {\n try {\n const client = yield getClient()\n const results = yield client.query({\n query: gql`\n ${COMPUTE_SECURITY_GROUP_QUERY}\n `,\n variables: { srn: action.payload },\n })\n const compute = _.get(results, ['data', 'Compute', 'items', 0])\n if (compute.items === null) {\n throw new Error('did not receive data.Compute.items[0]')\n }\n\n const { cloudType } = compute\n if (!cloudType) {\n throw new Error(`Compute ${action.payload} does not have cloudType`)\n }\n\n const securityGroups = []\n\n switch (cloudType) {\n // if it's 'aws', the security groups are in includedPolicy { items { /* here */} }\n case 'aws': {\n const networkPolcies = _.get(compute, ['includedInPolicy', 'items'])\n if (!networkPolcies) {\n throw new Error(\n `aws Compute ${\n action.payload\n } did recieve key includedInpolicy.items`\n )\n }\n networkPolcies.forEach(it => securityGroups.push(it))\n break\n }\n\n /*\n * if it's 'aws', the security groups are in\n * isAttachedToInterface {\n * includedPolicy {\n * items {\n * # here\n * }\n * }\n * }\n */\n case 'azure': {\n const interfaces = _.get(compute, ['isAttachedToInterface', 'items'])\n if (!interfaces) {\n throw new Error(\n `aws Compute ${\n action.payload\n } did recieve key isAttachedToInterface.items`\n )\n }\n\n const allNetworkPolcies = interfaces.flatMap(interfaze => {\n const networkPolcies = _.get(interfaze, ['includedInPolicy', 'items'])\n if (!networkPolcies) {\n throw new Error(\n `aws Compute ${action.payload} interface ${\n interfaze.srn\n } did recieve key includedInpolicy.items`\n )\n }\n return networkPolcies\n })\n\n _.uniqBy(allNetworkPolcies, ({ srn }) => srn).forEach(it =>\n securityGroups.push(it)\n )\n break\n }\n\n default:\n // eslint-disable-next-line no-console\n console.warn(\n 'Security groups currently not supported for cloudType: ' + cloudType\n )\n }\n yield put(setComputesecurityGroups(securityGroups))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\n 'There was a problem fetching security groups for resource: ',\n e\n )\n yield put(errComputeSecurityGroups())\n }\n}\n\nfunction* computeNodeSaga() {\n yield takeLatest(GET_COMPUTE_CONTENT, getComputeContent)\n yield takeLatest(GET_INBOUND_PUBLIC_FILTERS, getInboundPublicFilters)\n yield takeLatest(GET_INBOUND_PRIVATE_FILTERS, getInboundPrivateFilters)\n yield takeLatest(GET_INBOUND_PUBLIC_PATH, getInboundPublicPath)\n yield takeLatest(GET_INBOUND_PRIVATE_PATH, getInboundPrivatePath)\n yield takeLatest(GET_OUTBOUND_PUBLIC_FILTERS, getOutboundPublicFilters)\n yield takeLatest(GET_OUTBOUND_PRIVATE_FILTERS, getOutboundPrivateFilters)\n yield takeLatest(GET_OUTBOUND_PUBLIC_PATH, getOutboundPublicPath)\n yield takeLatest(GET_OUTBOUND_PRIVATE_PATH, getOutboundPrivatePath)\n\n yield takeLatest(\n GET_INDIRECT_INBOUND_PUBLIC_FILTERS,\n getIndirectInboundPublicFilters\n )\n yield takeLatest(\n GET_INDIRECT_INBOUND_PRIVATE_FILTERS,\n getIndirectInboundPrivateFilters\n )\n yield takeLatest(\n GET_INDIRECT_INBOUND_PUBLIC_PATH,\n getIndirectInboundPublicPath\n )\n yield takeLatest(\n GET_INDIRECT_INBOUND_PRIVATE_PATH,\n getIndirectInboundPrivatePath\n )\n yield takeLatest(GET_COMPUTE_SECURITY_GROUPS, getComputeSecurityGroups)\n}\n\nexport default computeNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectComputeNodeViewCardLayoutDomain = state =>\n state.get('computeNodeViewCardLayout') || Map()\n\nexport const selectComputeContent = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('computeContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n\nexport const selectInboundPublicFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('inboundPublicFilters', Map())\n)\n\nexport const selectLoadingInboundPublicFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingInboundPublicFilters')\n)\n\nexport const selectInboundPrivateFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('inboundPrivateFilters') || Map()\n)\n\nexport const selectLoadingInboundPrivateFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingInboundPrivateFilters')\n)\n\nexport const selectInboundPublicPath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('inboundPublicPath') || Map()\n)\n\nexport const selectLoadingInboundPublicPath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingInboundPublicPath')\n)\n\nexport const selectInboundPrivatePath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('inboundPrivatePath') || Map()\n)\n\nexport const selectLoadingInboundPrivatePath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingInboundPrivatePath')\n)\n\nexport const selectOutboundPublicFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('outboundPublicFilters') || Map()\n)\n\nexport const selectLoadingOutboundPublicFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingOutboundPublicFilters')\n)\n\nexport const selectOutboundPrivateFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('outboundPrivateFilters') || Map()\n)\n\nexport const selectLoadingOutboundPrivateFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingOutboundPrivateFilters')\n)\n\nexport const selectOutboundPublicPath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('outboundPublicPath') || Map()\n)\n\nexport const selectLoadingOutboundPublicPath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingOutboundPublicPath')\n)\n\nexport const selectOutboundPrivatePath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('outboundPrivatePath') || Map()\n)\n\nexport const selectLoadingOutboundPrivatePath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingOutboundPrivatePath')\n)\n\nexport const selectIndirectInboundPublicFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('indirectInboundPublicFilters') || Map()\n)\n\nexport const selectLoadingIndirectInboundPublicFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingIndirectInboundPublicFilters')\n)\n\nexport const selectIndirectInboundPrivateFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('indirectInboundPrivateFilters') || Map()\n)\n\nexport const selectLoadingIndirectInboundPrivateFilters = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingIndirectInboundPrivateFilters')\n)\n\nexport const selectIndirectInboundPublicPath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('indirectInboundPublicPath') || Map()\n)\n\nexport const selectLoadingIndirectInboundPublicPath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingIndirectInboundPublicPath')\n)\n\nexport const selectIndirectInboundPrivatePath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('indirectInboundPrivatePath') || Map()\n)\n\nexport const selectLoadingIndirectInboundPrivatePath = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingIndirectInboundPrivatePath')\n)\n\nexport const selectSecurityGroups = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('securityGroups') || Map()\n)\n\nexport const selectLoadingSecurityGroups = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('loadingSecurityGroups')\n)\n\nexport const selectErrorSecurityGroups = createSelector(\n selectComputeNodeViewCardLayoutDomain,\n state => state.get('errorSecurityGroups')\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { List, Map } from 'immutable'\nimport { Table } from 'reactstrap'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport Icon from 'components/Icon'\nimport TextLink from 'components/TextLink'\nimport PathWidget from 'components/PathWidget'\nimport { exists, flattenData, getNameFromSrn } from 'utils/sonraiUtils'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport class FilterAndPath extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n showPath: false,\n }\n\n this.styles = {\n pathWidget: {\n height: '300px',\n marginBottom: '1em',\n border: `1px solid ${props.theme.neutralLight}`,\n },\n tableStyle: {\n fontSize: '12px',\n },\n title: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n padding: '1em 0',\n alignItems: 'center',\n },\n expandPath: {\n fontSize: '0.9em',\n },\n disabledSection: {\n color: props.theme.neutralMedium,\n display: 'grid',\n gridTemplateColumns: '220px 1fr',\n },\n }\n }\n\n togglePath = () => {\n this.setState(currentState => ({\n showPath: !currentState.showPath,\n }))\n\n if (this.props.onToggle) {\n this.props.onToggle()\n }\n }\n\n renderFilterTable = () => {\n const flattened = flattenData(this.props.filters.toJS())\n\n let filters = []\n\n flattened.forEach(row => {\n const portRangeMax = row['Portrange_maxPort']\n const portRangeMin = row['Portrange_minPort']\n\n let port\n\n if (\n portRangeMin === portRangeMax ||\n !exists(portRangeMin) ||\n portRangeMin === '-'\n ) {\n port = portRangeMax\n } else if (!exists(portRangeMax) || portRangeMax === '-') {\n port = portRangeMin\n } else {\n port = `${portRangeMin} - ${portRangeMax}`\n }\n\n const cidr =\n row['Cidr_name'] === '-'\n ? getNameFromSrn(row['Cidr_srn'])\n : row['Cidr_name']\n const protocol =\n row['Protocol_name'] === '-'\n ? getNameFromSrn(row['Protocol_srn'])\n : row['Protocol_name']\n\n filters.push({\n protocol,\n cidr,\n port,\n })\n })\n\n return (\n \n \n \n \n \n \n \n \n \n {filters.map((row, index) => (\n \n \n \n \n \n ))}\n \n
    ProtocolCIDRPort
    {row.protocol}{row.cidr}{row.port}
    \n )\n }\n\n renderFilters = () => {\n if (this.props.filters.get('items', List()).size === 0) {\n return (\n
    \n {this.props.filterLabel}: None\n
    \n )\n }\n\n return (\n
    \n
    \n
    {this.props.filterLabel}
    \n
    \n {this.renderFilterTable()}\n
    \n )\n }\n\n renderPath = () => {\n if (this.props.path.get('items', List()).size === 0) {\n return (\n
    \n {this.props.pathLabel}: None\n
    \n )\n }\n\n return (\n
    \n
    \n
    {this.props.pathLabel}
    \n \n {this.state.showPath ? (\n \n Hide Path \n \n ) : (\n \n Show Path \n \n )}\n \n
    \n\n {this.props.path.get('items', List()).size > 0 && this.state.showPath && (\n
    \n \n
    \n )}\n
    \n )\n }\n\n render() {\n return (\n
    \n {this.renderFilters()}\n\n {this.renderPath()}\n
    \n )\n }\n}\n\nFilterAndPath.propTypes = {\n path: ImmutablePropTypes.map.isRequired,\n filters: ImmutablePropTypes.map.isRequired,\n filterLabel: PropTypes.node,\n pathLabel: PropTypes.node,\n loadingPath: PropTypes.bool,\n onDoubleClick: PropTypes.func,\n theme: themeShape,\n onToggle: PropTypes.func,\n}\nexport default themeable(FilterAndPath)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { bindActionCreators } from 'redux'\nimport { List } from 'immutable'\n\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport Card, { CardBody, TopTitle } from 'components/Card'\n\nimport FilterAndPath from './FilterAndPath'\n\nexport class AccessWidget extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n content: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n width: '100%',\n height: '100%',\n gridColumnGap: '3em',\n },\n\n columnHeader: {\n display: 'grid',\n gridTemplateColumns: '220px 1fr',\n fontWeight: 400,\n },\n }\n }\n\n onDoubleClick = ({ nodes }) => {\n if (nodes.length > 0 && nodes[0].includes('srn:')) {\n const srn = nodes[0]\n this.props.push(getNodeViewPushParams(srn, getTypeFromSrn(srn)))\n }\n }\n\n getExposedToPublic = () => {\n return (\n this.props.publicFilters.get('items', List()).size > 0 &&\n this.props.publicPath.get('items', List()).size > 0\n )\n }\n\n onToggle = () => {\n if (this.props.recalculateGrid) {\n setTimeout(this.props.recalculateGrid, 100)\n }\n }\n\n getExposedToPrivate = () => {\n return (\n this.props.privateFilters.get('items', List()).size > 0 &&\n this.props.privatePath.get('items', List()).size > 0\n )\n }\n\n render() {\n return (\n \n \n {this.props.title}\n \n \n
    \n
    \n
    \n
    Exposed to Public Access:
    \n {this.getExposedToPublic() ? 'Yes' : 'No'}\n
    \n \n
    \n\n
    \n
    \n
    Exposed to Private Access:
    \n {this.getExposedToPrivate() ? 'Yes' : 'No'}\n
    \n \n
    \n
    \n
    \n
    \n )\n }\n}\n\nAccessWidget.propTypes = {\n publicFilters: ImmutablePropTypes.map.isRequired,\n publicPath: ImmutablePropTypes.map.isRequired,\n privateFilters: ImmutablePropTypes.map.isRequired,\n privatePath: ImmutablePropTypes.map.isRequired,\n title: PropTypes.node,\n loadingPublicFilters: PropTypes.bool,\n loadingPrivateFilters: PropTypes.bool,\n loadingPublicPath: PropTypes.bool,\n loadingPrivatePath: PropTypes.bool,\n push: PropTypes.func,\n recalculateGrid: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n },\n dispatch\n )\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(AccessWidget)\n","/**\n *\n * ComputeNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { injectIntl } from 'react-intl'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List, isImmutable } from 'immutable'\nimport _ from 'lodash'\nimport { Responsive } from 'react-grid-layout'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { exists } from 'utils/sonraiUtils'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport { NodeViewDetailString, NodeViewDetailLabel } from 'components/NodeView'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport ListCard from 'containers/AccessActivity/ListCard'\nimport NodeViewMiniPopout from 'containers/NodeViewMiniPopout'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SizeMe from 'components/SizeMe'\n\nimport NetworkConnectionsWidget from './NetworkConnectionsWidget'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport {\n getComputeContent,\n getInboundPublicFilters,\n getInboundPrivateFilters,\n getInboundPublicPath,\n getInboundPrivatePath,\n getOutboundPublicFilters,\n getOutboundPrivateFilters,\n getOutboundPublicPath,\n getOutboundPrivatePath,\n getIndirectInboundPublicFilters,\n getIndirectInboundPrivateFilters,\n getIndirectInboundPublicPath,\n getIndirectInboundPrivatePath,\n getComputeSecurityGroups,\n} from './actions'\nimport {\n selectIsLoading,\n selectComputeContent,\n selectLoadingInboundPublicFilters,\n selectInboundPublicFilters,\n selectInboundPrivateFilters,\n selectLoadingInboundPrivateFilters,\n selectLoadingInboundPublicPath,\n selectInboundPublicPath,\n selectInboundPrivatePath,\n selectLoadingInboundPrivatePath,\n selectLoadingOutboundPublicFilters,\n selectOutboundPublicFilters,\n selectOutboundPrivateFilters,\n selectLoadingOutboundPrivateFilters,\n selectLoadingOutboundPublicPath,\n selectOutboundPublicPath,\n selectOutboundPrivatePath,\n selectLoadingOutboundPrivatePath,\n selectLoadingIndirectInboundPublicFilters,\n selectIndirectInboundPublicFilters,\n selectIndirectInboundPrivateFilters,\n selectLoadingIndirectInboundPrivateFilters,\n selectLoadingIndirectInboundPublicPath,\n selectIndirectInboundPublicPath,\n selectIndirectInboundPrivatePath,\n selectLoadingIndirectInboundPrivatePath,\n selectSecurityGroups,\n selectLoadingSecurityGroups,\n selectErrorSecurityGroups,\n} from './selectors'\n\nimport AccessWidget from './AccessWidget'\n\nconst ResponsiveGridLayout = SizeMe(Responsive)\n\nexport class ComputeNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getComputeContent(props.nodeData.srn)\n props.getInboundPublicFilters(props.nodeData.srn)\n props.getInboundPrivateFilters(props.nodeData.srn)\n props.getInboundPublicPath(props.nodeData.srn)\n props.getInboundPrivatePath(props.nodeData.srn)\n props.getOutboundPublicFilters(props.nodeData.srn)\n props.getOutboundPrivateFilters(props.nodeData.srn)\n props.getOutboundPublicPath(props.nodeData.srn)\n props.getOutboundPrivatePath(props.nodeData.srn)\n props.getIndirectInboundPublicFilters(props.nodeData.srn)\n props.getIndirectInboundPrivateFilters(props.nodeData.srn)\n props.getIndirectInboundPublicPath(props.nodeData.srn)\n props.getIndirectInboundPrivatePath(props.nodeData.srn)\n props.getComputeSecurityGroups(props.nodeData.srn)\n\n this.styles = {\n accessTable: {\n display: 'grid',\n gridTemplateColumns: '30% 1fr 1fr',\n gridTemplateAreas: 'category public private',\n gridColumnGap: '1em',\n },\n pathWidget: {\n height: '300px',\n },\n }\n\n this.state = {\n miniNodeViewOpen: false,\n miniNodeViewNodeId: '',\n }\n }\n\n closeMiniModeView = () => {\n this.setState({\n miniNodeViewNodeId: '',\n miniNodeViewOpen: false,\n })\n }\n\n openMiniNodeView = nodeId => {\n this.setState({\n miniNodeViewNodeId: nodeId,\n miniNodeViewOpen: true,\n })\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getActivity = () =>\n this.props.computeContent\n ? this.props.computeContent\n .getIn(['isPartOfAction', 'items'], List())\n .toJS()\n .map(action => ({\n eventName: action.eventName,\n createdDate: action.createdDate,\n performedBy: _.get(action, ['performedBy', 'items', 0, 'name']),\n srn: action.srn,\n }))\n : []\n\n getSubnets = () =>\n this.props.computeContent\n ? this.props.computeContent\n .getIn(['isAttachedToSubnet', 'items'], List())\n .toJS()\n .map(subnet => ({ label: subnet.name, srn: subnet.srn }))\n : []\n\n getNetworks = () =>\n this.props.computeContent\n ? this.props.computeContent\n .getIn(['isAttachedToNetwork', 'items'], List())\n .toJS()\n .map(network => ({ label: network.name, srn: network.srn }))\n : []\n\n getBlockStorage = () =>\n this.props.computeContent\n ? this.props.computeContent\n .getIn(['isAttachedToBlockStorage', 'items'], List())\n .toJS()\n .map(block => ({ label: block.name, srn: block.srn }))\n : []\n\n getAttachedInterface = () =>\n this.props.computeContent\n ? this.props.computeContent\n .getIn(['isAttachedToInterface', 'items'], List())\n .toJS()\n : []\n\n getHeaderContent = () => {\n return [\n \n \n {this.props.intl.formatMessage(messages.basedOnLabel)}\n \n {exists(this.props.computeContent) &&\n !this.props.computeContent.isEmpty() && (\n \n )}\n ,\n ]\n }\n\n getColumns = () => {\n return {\n lg: [\n {\n widthPercent: 33,\n items: [\n 'actions',\n 'subnets',\n 'blocks',\n 'networks',\n 'interface',\n 'graph',\n ],\n heights: { actions: 2, graph: 3, interface: 2 },\n },\n {\n widthPercent: 66,\n items: ['inbound', 'outbound', 'indirect'],\n },\n ],\n xs: [\n {\n widthPercent: 100,\n items: [\n 'actions',\n 'subnets',\n 'blocks',\n 'networks',\n 'interface',\n 'inbound',\n 'outbound',\n 'indirect',\n 'graph',\n ],\n heights: { actions: 2, graph: 3, interface: 2 },\n },\n ],\n }\n }\n\n getGridContent = () => {\n const layout = [\n { x: 0, y: 0, w: 1, h: 2, i: 'securityGroups' },\n { x: 1, y: 0, w: 3, h: 2, i: 'networkConnections' },\n { x: 0, y: 2, w: 4, h: 4, i: 'inboundAccess' },\n { x: 0, y: 6, w: 4, h: 4, i: 'outboundAccess' },\n { x: 0, y: 10, w: 4, h: 4, i: 'indirectAccess' },\n ]\n\n return (\n
    \n \n
    \n this.openMiniNodeView(target.srn)}\n push={this.props.push}\n title={}\n />\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n \n
    \n )\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nComputeNodeViewCardLayout.propTypes = {\n computeContent: ImmutablePropTypes.map.isRequired,\n getComputeContent: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n isLoading: PropTypes.bool,\n getInboundPublicFilters: PropTypes.func.isRequired,\n getInboundPrivateFilters: PropTypes.func.isRequired,\n getInboundPublicPath: PropTypes.func.isRequired,\n getInboundPrivatePath: PropTypes.func.isRequired,\n getComputeSecurityGroups: PropTypes.func.isRequired,\n inboundPublicFilters: ImmutablePropTypes.map.isRequired,\n inboundPrivateFilters: ImmutablePropTypes.map.isRequired,\n inboundPublicPath: ImmutablePropTypes.map.isRequired,\n inboundPrivatePath: ImmutablePropTypes.map.isRequired,\n loadingInboundPublicFilters: PropTypes.bool,\n loadingInboundPrivateFilters: PropTypes.bool,\n loadingInboundPublicPath: PropTypes.bool,\n loadingInboundPrivatePath: PropTypes.bool,\n getOutboundPublicFilters: PropTypes.func.isRequired,\n getOutboundPrivateFilters: PropTypes.func.isRequired,\n getOutboundPublicPath: PropTypes.func.isRequired,\n getOutboundPrivatePath: PropTypes.func.isRequired,\n outboundPublicFilters: ImmutablePropTypes.map.isRequired,\n outboundPrivateFilters: ImmutablePropTypes.map.isRequired,\n outboundPublicPath: ImmutablePropTypes.map.isRequired,\n outboundPrivatePath: ImmutablePropTypes.map.isRequired,\n loadingOutboundPublicFilters: PropTypes.bool,\n loadingOutboundPrivateFilters: PropTypes.bool,\n loadingOutboundPublicPath: PropTypes.bool,\n loadingOutboundPrivatePath: PropTypes.bool,\n getIndirectInboundPublicFilters: PropTypes.func.isRequired,\n getIndirectInboundPrivateFilters: PropTypes.func.isRequired,\n getIndirectInboundPublicPath: PropTypes.func.isRequired,\n getIndirectInboundPrivatePath: PropTypes.func.isRequired,\n indirectInboundPublicFilters: ImmutablePropTypes.map.isRequired,\n indirectInboundPrivateFilters: ImmutablePropTypes.map.isRequired,\n indirectInboundPublicPath: ImmutablePropTypes.map.isRequired,\n indirectInboundPrivatePath: ImmutablePropTypes.map.isRequired,\n loadingIndirectInboundPublicFilters: PropTypes.bool,\n loadingIndirectInboundPrivateFilters: PropTypes.bool,\n loadingIndirectInboundPublicPath: PropTypes.bool,\n loadingIndirectInboundPrivatePath: PropTypes.bool,\n securityGroups: ImmutablePropTypes.map.isRequired,\n loadingSecurityGroups: PropTypes.bool,\n errorSecurityGroups: PropTypes.bool,\n\n setUserProfileTables: PropTypes.func,\n userProfile: PropTypes.object,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func,\n }),\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n isLoading: selectIsLoading,\n computeContent: selectComputeContent,\n loadingInboundPublicFilters: selectLoadingInboundPublicFilters,\n inboundPublicFilters: selectInboundPublicFilters,\n loadingInboundPrivateFilters: selectLoadingInboundPrivateFilters,\n inboundPrivateFilters: selectInboundPrivateFilters,\n inboundPublicPath: selectInboundPublicPath,\n loadingInboundPublicPath: selectLoadingInboundPublicPath,\n inboundPrivatePath: selectInboundPrivatePath,\n loadingInboundPrivatePath: selectLoadingInboundPrivatePath,\n loadingOutboundPublicFilters: selectLoadingOutboundPublicFilters,\n outboundPublicFilters: selectOutboundPublicFilters,\n loadingOutboundPrivateFilters: selectLoadingOutboundPrivateFilters,\n outboundPrivateFilters: selectOutboundPrivateFilters,\n outboundPublicPath: selectOutboundPublicPath,\n loadingOutboundPublicPath: selectLoadingOutboundPublicPath,\n outboundPrivatePath: selectOutboundPrivatePath,\n loadingOutboundPrivatePath: selectLoadingOutboundPrivatePath,\n loadingIndirectInboundPublicFilters: selectLoadingIndirectInboundPublicFilters,\n indirectInboundPublicFilters: selectIndirectInboundPublicFilters,\n loadingIndirectInboundPrivateFilters: selectLoadingIndirectInboundPrivateFilters,\n indirectInboundPrivateFilters: selectIndirectInboundPrivateFilters,\n indirectInboundPublicPath: selectIndirectInboundPublicPath,\n loadingIndirectInboundPublicPath: selectLoadingIndirectInboundPublicPath,\n indirectInboundPrivatePath: selectIndirectInboundPrivatePath,\n loadingIndirectInboundPrivatePath: selectLoadingIndirectInboundPrivatePath,\n securityGroups: selectSecurityGroups,\n loadingSecurityGroups: selectLoadingSecurityGroups,\n errorSecurityGroups: selectErrorSecurityGroups,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n setUserProfileTables,\n push,\n getComputeContent,\n getInboundPublicFilters,\n getInboundPrivateFilters,\n getInboundPublicPath,\n getInboundPrivatePath,\n getOutboundPublicFilters,\n getOutboundPrivateFilters,\n getOutboundPublicPath,\n getOutboundPrivatePath,\n getIndirectInboundPublicFilters,\n getIndirectInboundPrivateFilters,\n getIndirectInboundPublicPath,\n getIndirectInboundPrivatePath,\n getComputeSecurityGroups,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'computeNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'computeNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(ComputeNodeViewCardLayout)\n","/**\n *\n * GenericNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport { NodeViewDetailString, NodeViewDetailLabel } from 'components/NodeView'\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap'\nimport JSONDisplay from 'components/JSONDisplay'\nimport EmptyWidgetResults from 'components/EmptyWidgetResults'\nimport TextLink from 'components/TextLink'\nexport class GenericNodeViewCardLayout extends React.Component {\n state = {\n isOpen: false,\n }\n getColumns = () => {\n return {\n xs: [\n {\n widthPercent: 100,\n items: ['graph'],\n heights: {\n graph: 3,\n },\n },\n ],\n }\n }\n\n toggleJSONModal = () =>\n this.setState(oldState => ({ isOpen: !oldState.isOpen }))\n\n getHeaderContent = () => {\n const { version, policyJSON, label } = this.props.nodeData\n if (label === 'PolicyVersion') {\n return [\n \n \n
    \n Version\n {policyJSON && (\n \n (View Policy JSON)\n \n )}\n
    {' '}\n
    \n \n
    ,\n ]\n }\n }\n\n render() {\n const { friendlyName, name, policyJSON } = this.props.nodeData\n return (\n \n \n\n \n \n \n {friendlyName || name || 'Policy'} JSON\n \n \n {policyJSON ? (\n \n ) : (\n \n )}\n \n \n \n )\n }\n}\n\nGenericNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n nodeData: PropTypes.object,\n nodeId: PropTypes.string.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nexport default GenericNodeViewCardLayout\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n classificationLabel: {\n id:\n 'app.container.NodeViewLayouts.ActionTypeNodeViewCardLayout.classificationLabel',\n defaultMessage: 'Action Classification',\n },\n cloudTypeLabel: {\n id:\n 'app.container.NodeViewLayouts.ActionTypeNodeViewCardLayout.cloudTypeLabel',\n defaultMessage: 'Cloud Type',\n },\n nodeViewType: {\n id: 'app.container.NodeViewLayouts.ActionTypeNodeViewCardLayout.actiontype',\n defaultMessage: 'Actiontype',\n },\n permissionIdsTitle: {\n id:\n 'app.container.NodeViewLayouts.ActionTypeNodeViewCardLayout.permissionIdsTitle',\n defaultMessage: 'Identites With Permissions',\n },\n executedIdsTitle: {\n id:\n 'app.container.NodeViewLayouts.ActionTypeNodeViewCardLayout.executedIdsTitle',\n defaultMessage: 'Identities Executed (Last 7 Days)',\n },\n})\n","export const GET_ACTIONTYPE_CONTENT =\n 'app/ActionTypeNodeViewCardLayout/GET_ACTIONTYPE_CONTENT'\nexport const SET_ACTIONTYPE_CONTENT =\n 'app/ActionTypeNodeViewCardLayout/SET_ACTIONTYPE_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_ACTIONTYPE_CONTENT, GET_ACTIONTYPE_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n actiontypeContent: {},\n isLoading: false,\n})\n\nconst actiontypeNodeViewCardLayoutReducer = handleActions(\n {\n [GET_ACTIONTYPE_CONTENT]: state => state.set('isLoading', true),\n [SET_ACTIONTYPE_CONTENT]: (state, { payload }) => {\n return state\n .set('actiontypeContent', fromJS(payload))\n .set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('actiontypeContent', Map()),\n },\n initialState\n)\n\nexport default actiontypeNodeViewCardLayoutReducer\n","import { GET_ACTIONTYPE_CONTENT, SET_ACTIONTYPE_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getActiontypeContent = createAction(GET_ACTIONTYPE_CONTENT)\nexport const setActiontypeContent = createAction(SET_ACTIONTYPE_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { ACTION_TYPE_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_ACTIONTYPE_CONTENT } from './constants'\nimport { setActiontypeContent } from './actions'\n\nfunction* getActiontypeContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${ACTION_TYPE_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.ActionTypes.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setActiontypeContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* actiontypeNodeSaga() {\n yield takeLatest(GET_ACTIONTYPE_CONTENT, getActiontypeContent)\n}\n\nexport default actiontypeNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectActiontypeNodeViewCardLayoutDomain = state =>\n state.get('actiontypeNodeViewCardLayout', Map())\n\nexport const selectActiontypeContent = createSelector(\n selectActiontypeNodeViewCardLayoutDomain,\n state => state.get('actiontypeContent', Map())\n)\n\nexport const selectIsLoading = createSelector(\n selectActiontypeNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * ActionTypeNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport { injectIntl } from 'react-intl'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List } from 'immutable'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport TableWidget from 'components/TableWidget'\nimport { NodeViewDetailString, NodeViewDetailLabel } from 'components/NodeView'\n\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getActiontypeContent } from './actions'\nimport { selectActiontypeContent, selectIsLoading } from './selectors'\n\nexport class ActionTypeNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getActiontypeContent(props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getIdentitiesExecuted = () => {\n return this.props.actiontypeContent\n .getIn(['isPartOfAction', 'items'], List())\n .toJS()\n .map(events => {\n return {\n eventName: events.eventName,\n performedBy: _.get(events, ['performedBy', 'items', 0, 'name']),\n srn: _.get(events, ['performedBy', 'items', 0, 'srn']),\n }\n })\n }\n\n getIdentitiesWithPermissions = () => {\n return this.props.actiontypeContent\n .getIn(\n [\n 'isPartOfPermission',\n 'items',\n '0',\n 'isAllowedBy',\n 'items',\n '0',\n 'isPartOfPolicyEntry',\n 'items',\n '0',\n 'isPartOfPolicyVersion',\n 'items',\n '0',\n 'isPartOfPolicy',\n 'items',\n '0',\n 'isAttachedTo',\n 'items',\n ],\n List()\n )\n .toJS()\n .map(identities => {\n return {\n Identity: identities.IdentityName,\n Type: identities.__typename,\n srn: identities.srn,\n }\n })\n }\n\n getClassificationType = () => {\n return this.props.actiontypeContent.getIn([\n 'hasClassification',\n 'items',\n 0,\n 'ClassificationType',\n ])\n }\n\n getColumns = () => {\n const numIdentitiesEx = this.getIdentitiesExecuted().length\n const numIdentitiesPerms = this.getIdentitiesWithPermissions().length\n\n return {\n md: [\n {\n widthPercent: 50,\n items: ['identitiesExecuted', 'identitiesWithPermissions'],\n heights: {\n identitiesExecuted: numIdentitiesEx > 0 ? 2 : 1,\n identitiesWithPermissions: numIdentitiesPerms > 0 ? 2 : 1,\n },\n },\n {\n widthPercent: 50,\n items: ['graph'],\n heights: {\n graph: 3,\n },\n },\n ],\n xs: [\n {\n widthPercent: 100,\n items: ['identitiesExecuted', 'identitiesWithPermissions', 'graph'],\n heights: {\n identitiesExecuted: numIdentitiesEx > 0 ? 2 : 1,\n identitiesWithPermissions: numIdentitiesPerms > 0 ? 2 : 1,\n graph: 3,\n },\n },\n ],\n }\n }\n\n getGridContent = () => {\n return [\n
    \n \n
    ,\n
    \n \n
    ,\n ]\n }\n\n getHeaderContent = () => {\n return [\n \n \n {this.props.intl.formatMessage(messages.classificationLabel)}\n \n \n ,\n ]\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nActionTypeNodeViewCardLayout.propTypes = {\n actiontypeContent: ImmutablePropTypes.map.isRequired,\n horizontal: PropTypes.bool,\n isLoading: PropTypes.bool,\n getActiontypeContent: PropTypes.func.isReequired,\n setUserProfileTables: PropTypes.func.isRequired,\n userProfile: PropTypes.object.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n isLoading: selectIsLoading,\n actiontypeContent: selectActiontypeContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getActiontypeContent,\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({\n key: 'actiontypeNodeViewCardLayout',\n reducer,\n})\n\nconst withSaga = injectSaga({\n key: 'actiontypeNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(ActionTypeNodeViewCardLayout)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n accessKeyLabel: {\n id: 'app.containers.ActionNodeViewCardLayout.roleLabel',\n defaultMessage: 'AccessKey',\n },\n accountUserLabel: {\n id: 'app.containers.ActionNodeViewCardLayout.roleLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n nodeViewType: {\n id: 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.action',\n defaultMessage: 'Action',\n },\n regionLabel: {\n id: 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.regionLabel',\n defaultMessage: 'Region',\n },\n sourceIPLabel: {\n id: 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.sourceIPLabel',\n defaultMessage: 'Source IP',\n },\n typeLabel: {\n id: 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n succeededLabel: {\n id: 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.succeededLabel',\n defaultMessage: 'Succeeded',\n },\n userAgentLabel: {\n id: 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.userAgentLabel',\n defaultMessage: 'User Agent',\n },\n eventNameLabel: {\n id: 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.eventNameLabel',\n defaultMessage: 'Event Name',\n },\n performedByTitle: {\n id:\n 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.performedByTitle',\n defaultMessage: 'Performed By',\n },\n performedOnTitle: {\n id:\n 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.performedOnTitle',\n defaultMessage: 'Performed On',\n },\n actionTypesTitle: {\n id:\n 'app.container.NodeViewLayouts.ActionNodeViewCardLayout.actionTypesTitle',\n defaultMessage: 'Action Types',\n },\n accountLabel: {\n id: 'app.containers.ActionNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n eventDetailsTitle: {\n id: 'app.containers.ActionNodeViewCardLayout.eventDetailsTitle',\n defaultMessage: 'Event Details',\n },\n firstEventDetailsTitle: {\n id: 'app.containers.ActionNodeViewCardLayout.firstEventDetailsTitle',\n defaultMessage: 'First Event Details',\n },\n firstEventDetailsTooltip: {\n id: 'app.containers.ActionNodeViewCardLayout.firstEventDetailsTooltip',\n defaultMessage:\n 'First event in this series of coalesced events. Sonrai coalesces events based on: performed by, access key, event name, granted access key, user agent, succeeded',\n },\n originalIdentityLabel: {\n id: 'app.containers.ActionNodeViewCardLayout.originalIdentityLabel',\n defaultMessage: 'Original Identity',\n },\n performedByUser: {\n id: 'app.containers.ActionNodeViewCardLayout.performedByUser',\n defaultMessage: 'This action was performed by {type}',\n },\n performedByUserAndRole: {\n id: 'app.containers.ActionNodeViewCardLayout.performedByUserAndRole',\n defaultMessage: 'This action was performed by {type} that assumed Role',\n },\n roleLabel: {\n id: 'app.containers.ActionNodeViewCardLayout.roleLabel',\n defaultMessage: 'Role',\n },\n})\n","export const GET_ACTION_CONTENT =\n 'app/AccountNodeViewCardLayout/GET_ACTION_CONTENT'\nexport const SET_ACTION_CONTENT =\n 'app/AccountNodeViewCardLayout/SET_ACTION_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_ACTION_CONTENT, GET_ACTION_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n actionContent: {},\n isLoading: false,\n})\n\nconst actionNodeViewCardLayoutReducer = handleActions(\n {\n [GET_ACTION_CONTENT]: state => state.set('isLoading', true),\n [SET_ACTION_CONTENT]: (state, { payload }) => {\n return state.set('actionContent', fromJS(payload)).set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('actionContent', Map()),\n },\n initialState\n)\n\nexport default actionNodeViewCardLayoutReducer\n","import { GET_ACTION_CONTENT, SET_ACTION_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getActionContent = createAction(GET_ACTION_CONTENT)\nexport const setActionContent = createAction(SET_ACTION_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { ACTION_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_ACTION_CONTENT } from './constants'\nimport { setActionContent } from './actions'\n\nfunction* getActionContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${ACTION_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Actions.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setActionContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(`error fetching action content`, e)\n }\n}\n\nfunction* actionNodeSaga() {\n yield takeLatest(GET_ACTION_CONTENT, getActionContent)\n}\n\nexport default actionNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectActionNodeViewCardLayoutDomain = state =>\n state.get('actionNodeViewCardLayout', Map())\n\nexport const selectActionContent = createSelector(\n selectActionNodeViewCardLayoutDomain,\n state => state.get('actionContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectActionNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * ActionNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport { injectIntl } from 'react-intl'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List, Map, isImmutable } from 'immutable'\n\nimport Badge from 'components/Badge'\nimport { TopTitle } from 'components/Card'\nimport CloudAccount from 'components/CloudAccount'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport BorderedCard from 'components/BorderedCard'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport TextLink from 'components/TextLink'\nimport Tooltip from 'components/Tooltip'\nimport NodeViewMiniPopout from 'containers/NodeViewMiniPopout'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport TableWidget from 'components/TableWidget'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport NodeViewDetailMetadataBody, {\n DISPJSON,\n} from 'components/NodeView/NodeViewDetailMetadataBody'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\n\nimport messages from './messages'\n\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getActionContent } from './actions'\nimport { selectActionContent, selectIsLoading } from './selectors'\nimport { SEARCH_INLINE } from '../../../components/NodeView/NodeViewDetailMetadataBody'\n\nconst styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n marginRight: '0px',\n },\n performedBy: {\n table: {\n tableLayout: 'fixed',\n width: '100%',\n },\n tableCell: {\n padding: '4px',\n paddingTop: '8px',\n paddingBottom: '8px',\n },\n tableCellLabel: {\n width: '128px',\n },\n tableCellValue: {},\n tableCellTextRow: {\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n },\n tableCellTextRowNoEllip: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n },\n tableRow: {\n borderTop: '1px solid #eee',\n },\n },\n}\n\nexport class ActionNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getActionContent(props.nodeData.srn)\n this.state = {\n miniNodeViewOpen: false,\n miniNodeViewNodeId: '',\n }\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getPerformedOn = () => {\n return this.props.actionContent\n .getIn(['performedOn', 'items'], List())\n .toJS()\n .map(resource => {\n const value = {\n ..._.pick(resource, ['name', 'type', 'active', 'region']),\n swimlanes: _.get(resource, ['swimlane', 'items'], [])\n .map(({ title }) => title)\n .join(', '),\n ..._.pick(resource, ['tagSet', 'createdDate', 'modifiedDate', 'srn']),\n }\n return value\n })\n }\n\n getNameFromResource = resource => {\n if (isImmutable(resource)) {\n return this.getNameFromResource(resource.toJS())\n }\n const friendlyName = resource.friendlyName\n if (friendlyName) return friendlyName\n\n const name = resource.name\n if (name) return name\n\n const srn = resource.srn\n if (srn) return srn\n\n return ''\n }\n\n closeMiniNodeView = () => {\n this.setState({\n miniNodeViewNodeId: '',\n miniNodeViewOpen: false,\n })\n }\n\n openMiniNodeView = nodeId => {\n this.setState({\n miniNodeViewNodeId: nodeId,\n miniNodeViewOpen: true,\n })\n }\n\n getPerformedByWidget = () => {\n if (this.props.isLoading) {\n return (\n \n \n \n )\n }\n\n const performedByLabel = (\n this.props.actionContent.get('performedByLabel') || List()\n ).toJS()\n\n let user = this.props.actionContent\n .getIn(['performedBy', 'items'], List())\n .filter(it => {\n const srn = it.get('srn')\n const type = getTypeFromSrn(srn)\n return (\n type !== 'Role' && type !== 'AccessKey' && !srn.includes('Account')\n )\n })\n .get(0, null)\n\n let account = this.props.actionContent\n .getIn(['performedBy', 'items'], List())\n .filter(it => {\n const srn = it.get('srn')\n const type = getTypeFromSrn(srn)\n return (\n type !== 'Role' && type !== 'AccessKey' && srn.includes('Account')\n )\n })\n .get(0, null)\n // if action was performed by account user, but not some original user, treat the\n // account user like the original user\n if (user == null && account != null) {\n user = account\n account = null\n }\n\n const role = performedByLabel.includes('Role')\n ? this.props.actionContent\n .getIn(['performedBy', 'items'], List())\n .filter(it => {\n const srn = it.get('srn')\n const type = getTypeFromSrn(srn)\n return type === 'Role'\n })\n .get(0, Map())\n : null\n\n const accessKey = performedByLabel.includes('AccessKey')\n ? this.props.actionContent\n .getIn(['performedBy', 'items'], List())\n .filter(it => {\n const srn = it.get('srn')\n const type = getTypeFromSrn(srn)\n return type === 'AccessKey'\n })\n .get(0, Map())\n : null\n\n let typeFromSRN = ''\n if (user != null) {\n typeFromSRN = user.get('srn')\n } else if (role != null) {\n typeFromSRN = role.get('srn')\n } else if (account != null) {\n typeFromSRN = account.get('srn')\n }\n const originalIdentityType = getTypeFromSrn(typeFromSRN) || ''\n\n return (\n \n Performed By\n {/*\n * show the user assumed role only if the action has a role and a user\n */}\n {role === null || (user === null && role !== null) ? (\n

    \n \n

    \n ) : (\n

    \n \n

    \n )}\n \n \n {user != null && (\n \n \n \n \n \n
    \n this.openMiniNodeView(user.get('srn'))}\n >\n {this.getNameFromResource(user)}\n \n
    \n
    \n \n
    \n \n
    \n )}\n {account != null && (\n \n \n \n \n \n
    \n \n
    \n \n
    \n )}\n {role != null && (\n \n \n \n \n \n
    \n this.openMiniNodeView(role.get('srn'))}\n >\n {this.getNameFromResource(role)}\n \n
    \n
    \n \n
    \n \n
    \n )}\n {accessKey != null && (\n \n \n \n \n \n
    \n \n this.openMiniNodeView(accessKey.get('srn'))\n }\n >\n {this.getNameFromResource(accessKey)}\n \n
    \n
    \n \n
    \n \n
    \n )}\n \n
    \n \n
    \n )\n }\n\n getEventDetails = () => {\n if (this.props.isLoading) {\n return \n }\n\n return (\n
    \n \n
    \n )\n }\n\n getGridContent = () => {\n return [\n
    {this.getPerformedByWidget()}
    ,\n
    \n \n
    ,\n
    \n \n \n {!this.props.isLoading &&\n this.props.actionContent.get('coalescedCount') > 1 ? (\n \n \n \n }\n position=\"right\"\n tooltipContent={\n
    \n {\n \n }\n
    \n }\n />\n ) : (\n \n \n \n )}\n
    \n {this.getEventDetails()}\n
    \n
    ,\n ]\n }\n\n getLayouts = () => {\n return {\n performedby: {\n lg: { w: 3, h: 2 },\n md: { w: 3, h: 2 },\n sm: { w: 3, h: 2 },\n xs: { w: 3, h: 2 },\n },\n performedon: {\n lg: { w: 5, h: 2 },\n md: { w: 5, h: 2 },\n sm: { w: 5, h: 2 },\n xs: { w: 5, h: 2 },\n },\n eventdetails: {\n sm: { w: 8 },\n xs: { w: 1 },\n },\n }\n }\n\n getCols = () => {\n return {\n lg: 8,\n md: 8,\n sm: 8,\n xs: 1,\n }\n }\n\n getHeaderBadge = () => {\n if (\n this.props.nodeData.coalescedCount &&\n this.props.nodeData.coalescedCount > 1\n ) {\n return (\n \n \n \n }\n anchor={\n \n \n  Coalesced\n \n }\n />\n )\n }\n }\n\n render() {\n const nodeData = {\n ...this.props.nodeData,\n performedOnValue: this.getPerformedOn(),\n }\n\n return (\n \n \n \n \n )\n }\n}\n\nActionNodeViewCardLayout.propTypes = {\n actionContent: ImmutablePropTypes.map.isRequired,\n getActionContent: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n setUserProfileTables: PropTypes.func.isRequired,\n userProfile: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n isLoading: PropTypes.bool,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n actionContent: selectActionContent,\n isLoading: selectIsLoading,\n userProfile: selectUserProfile,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getActionContent,\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'actionNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'actionNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(ActionNodeViewCardLayout)\n","/*\n * IdentityNodeViewCardLayout Messages\n *\n * This contains all the text for the IdentityNodeViewCardLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n title: {\n id: 'app.containers.IdentityNodeViewCardLayout.title',\n defaultMessage: 'Data Details',\n },\n activeLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n typeLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n group: {\n id: 'app.containers.IdentityNodeViewCardLayout.group',\n defaultMessage: 'Group',\n },\n lastModifiedLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.lastModifiedLabel',\n defaultMessage: 'Last Modified',\n },\n createdLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.createdLabel',\n defaultMessage: 'Created',\n },\n srnLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.srnLabel',\n defaultMessage: 'srn',\n },\n service: {\n id: 'app.containers.IdentityNodeViewCardLayout.service',\n defaultMessage: 'Service',\n },\n descriptionLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.description',\n defaultMessage: 'Description',\n },\n sizeLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.size',\n defaultMessage: 'Size',\n },\n bytes: {\n id: 'app.containers.IdentityNodeViewCardLayout.bytes',\n defaultMessage: 'Bytes',\n },\n publicRead: {\n id: 'app.containers.IdentityNodeViewCardLayout.publicRead',\n defaultMessage: 'Public Read',\n },\n publicWrite: {\n id: 'app.containers.IdentityNodeViewCardLayout.publicWrite',\n defaultMessage: 'Public Write',\n },\n webisteEnabled: {\n id: 'app.containers.IdentityNodeViewCardLayout.webisteEnabled',\n defaultMessage: 'Website Enabled',\n },\n auditEnabled: {\n id: 'app.containers.IdentityNodeViewCardLayout.auditEnabled',\n defaultMessage: 'Audit Enabled',\n },\n containerLabel: {\n id: 'app.containers.IdentityNodeViewCardLayout.containerLabel',\n defaultMessage: 'Container',\n },\n none: {\n id: 'app.containers.IdentityNodeViewCardLayout.none',\n defaultMessage: 'None',\n },\n dataItem: {\n id: 'app.containers.IdentityNodeViewCardLayout.dataItem',\n defaultMessage: 'This Data item is not part of a container',\n },\n record: {\n id: 'app.containers.IdentityNodeViewCardLayout.record',\n defaultMessage: 'Record',\n },\n performed: {\n id: 'app.containers.IdentityNodeViewCardLayout.performed',\n defaultMessage: 'Performed (Last 24 Hours)',\n },\n members: {\n id: 'app.containers.IdentityNodeViewCardLayout.performed',\n defaultMessage: 'Members',\n },\n groupsPolicies: {\n id: 'app.containers.IdentityNodeViewCardLayout.groupsPolicies',\n defaultMessage: 'Groups & Policies',\n },\n label: {\n id: 'app.containers.IdentityNodeViewCardLayout.label',\n defaultMessage: 'Label',\n },\n Identity: {\n id: 'app.containers.IdentityNodeViewCardLayout.Identity',\n defaultMessage: 'Identity',\n },\n})\n","export const GET_IDENTITY_CONTENT =\n 'app/IdentityNodeViewCardLayout/GET_IDENTITY_CONTENT'\nexport const SET_IDENTITY_CONTENT =\n 'app/IdentityNodeViewCardLayout/SET_IDENTITY_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_IDENTITY_CONTENT, GET_IDENTITY_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n identityContent: {},\n isLoading: false,\n})\n\nconst identityNodeViewCardLayoutReducer = handleActions(\n {\n [GET_IDENTITY_CONTENT]: state => state.set('isLoading', true),\n [SET_IDENTITY_CONTENT]: (state, { payload }) => {\n return state\n .set('identityContent', fromJS(payload))\n .set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('identityContent', Map()),\n },\n initialState\n)\n\nexport default identityNodeViewCardLayoutReducer\n","import { GET_IDENTITY_CONTENT, SET_IDENTITY_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getIdentityContent = createAction(GET_IDENTITY_CONTENT)\nexport const setIdentityContent = createAction(SET_IDENTITY_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { IDENTITY_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_IDENTITY_CONTENT } from './constants'\nimport { setIdentityContent } from './actions'\n\nfunction* getIdentityContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${IDENTITY_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Identities.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setIdentityContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* identityNodeSaga() {\n yield takeLatest(GET_IDENTITY_CONTENT, getIdentityContent)\n}\n\nexport default identityNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectIdentityNodeViewCardLayoutDomain = state =>\n state.get('identityNodeViewCardLayout', Map())\n\nexport const selectIdentityContent = createSelector(\n selectIdentityNodeViewCardLayoutDomain,\n state => state.get('identityContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectIdentityNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * IdentityNodeViewCardLayout\n *\n */\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List } from 'immutable'\nimport { injectIntl } from 'react-intl'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport TableWidget from 'components/TableWidget'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getIdentityContent } from './actions'\nimport { selectIdentityContent, selectIsLoading } from './selectors'\n\nexport class IdentityNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getIdentityContent(props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getMemberOf = () => {\n let rows = []\n this.props.identityContent\n .getIn(['isMemberOf', 'items'], List())\n .toJS()\n .forEach(group => {\n const { hasAttached } = group\n const groupActive = group.active\n const groupName = group.name\n hasAttached.items.forEach(policy => {\n const { active, name, srn } = policy\n rows.push({\n groupActive,\n groupName,\n policyActive: active,\n policyName: name,\n srn,\n })\n })\n })\n\n this.props.identityContent\n .getIn(['hasAttached', 'items'], List())\n .toJS()\n .forEach(policy => {\n const { name, active, srn } = policy\n rows.push({\n groupName: 'Direct Attached',\n policyActive: active,\n policyName: name,\n srn,\n })\n })\n return rows\n }\n\n getPerformed = () => {\n const identityContent = this.props.identityContent\n .getIn(['performed', 'group'], List())\n .toJS()\n\n return identityContent.map(action => {\n return { action: action.key.eventName, count: identityContent.length }\n })\n }\n\n getColumns = () => {\n const numGroups = this.getMemberOf().length\n const numPerformed = this.getPerformed().length\n\n return {\n xs: [\n {\n widthPercent: 100,\n items: ['groups', 'performed', 'graph'],\n heights: {\n groups: numGroups > 0 ? 2 : 1,\n performed: numPerformed > 0 ? 2 : 1,\n graph: 3,\n },\n },\n ],\n }\n }\n\n getGridContent = () => {\n return [\n
    \n \n
    ,\n
    \n \n
    ,\n ]\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nIdentityNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n isLoading: PropTypes.bool,\n identityContent: ImmutablePropTypes.map.isRequired,\n getIdentityContent: PropTypes.func.isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n userProfile: PropTypes.object.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func,\n }).isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n isLoading: selectIsLoading,\n identityContent: selectIdentityContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n setUserProfileTables,\n getIdentityContent,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({\n key: 'identityNodeViewCardLayout',\n reducer,\n})\n\nconst withSaga = injectSaga({\n key: 'identityNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(IdentityNodeViewCardLayout)\n","/*\n * GroupNodeViewCardLayout Messages\n *\n * This contains all the text for the GroupNodeViewCardLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n title: {\n id: 'app.containers.GroupNodeViewCardLayout.title',\n defaultMessage: 'Data Details',\n },\n activeLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.activeLabel',\n defaultMessage: 'Active',\n },\n typeLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.accountLabel',\n defaultMessage: 'Account',\n },\n createdOnLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.createdOnLabel',\n defaultMessage: 'Created On',\n },\n group: {\n id: 'app.containers.GroupNodeViewCardLayout.group',\n defaultMessage: 'Group',\n },\n lastModifiedLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.lastModifiedLabel',\n defaultMessage: 'Last Modified',\n },\n createdLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.createdLabel',\n defaultMessage: 'Created',\n },\n srnLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.srnLabel',\n defaultMessage: 'srn',\n },\n service: {\n id: 'app.containers.GroupNodeViewCardLayout.service',\n defaultMessage: 'Service',\n },\n descriptionLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.description',\n defaultMessage: 'Description',\n },\n sizeLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.size',\n defaultMessage: 'Size',\n },\n bytes: {\n id: 'app.containers.GroupNodeViewCardLayout.bytes',\n defaultMessage: 'Bytes',\n },\n publicRead: {\n id: 'app.containers.GroupNodeViewCardLayout.publicRead',\n defaultMessage: 'Public Read',\n },\n publicWrite: {\n id: 'app.containers.GroupNodeViewCardLayout.publicWrite',\n defaultMessage: 'Public Write',\n },\n webisteEnabled: {\n id: 'app.containers.GroupNodeViewCardLayout.webisteEnabled',\n defaultMessage: 'Website Enabled',\n },\n auditEnabled: {\n id: 'app.containers.GroupNodeViewCardLayout.auditEnabled',\n defaultMessage: 'Audit Enabled',\n },\n containerLabel: {\n id: 'app.containers.GroupNodeViewCardLayout.containerLabel',\n defaultMessage: 'Container',\n },\n none: {\n id: 'app.containers.GroupNodeViewCardLayout.none',\n defaultMessage: 'None',\n },\n dataItem: {\n id: 'app.containers.GroupNodeViewCardLayout.dataItem',\n defaultMessage: 'This Data item is not part of a container',\n },\n record: {\n id: 'app.containers.GroupNodeViewCardLayout.record',\n defaultMessage: 'Record',\n },\n performed: {\n id: 'app.containers.GroupNodeViewCardLayout.performed',\n defaultMessage: 'Performed',\n },\n members: {\n id: 'app.containers.GroupNodeViewCardLayout.performed',\n defaultMessage: 'Members',\n },\n groupsPolicies: {\n id: 'app.containers.GroupNodeViewCardLayout.groupsPolicies',\n defaultMessage: 'Groups & Policies',\n },\n})\n","export const GET_GROUP_CONTENT = 'app/GroupNodeViewCardLayout/GET_GROUP_CONTENT'\nexport const SET_GROUP_CONTENT = 'app/GroupNodeViewCardLayout/SET_GROUP_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_GROUP_CONTENT, GET_GROUP_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n groupContent: {},\n isLoading: false,\n})\n\nconst groupNodeViewCardLayoutReducer = handleActions(\n {\n [GET_GROUP_CONTENT]: state => state.set('isLoading', true),\n [SET_GROUP_CONTENT]: (state, { payload }) => {\n return state.set('groupContent', fromJS(payload)).set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('groupContent', Map()),\n },\n initialState\n)\n\nexport default groupNodeViewCardLayoutReducer\n","import { GET_GROUP_CONTENT, SET_GROUP_CONTENT } from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getGroupContent = createAction(GET_GROUP_CONTENT)\nexport const setGroupContent = createAction(SET_GROUP_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { GROUP_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_GROUP_CONTENT } from './constants'\nimport { setGroupContent } from './actions'\n\nfunction* getGroupContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${GROUP_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Groups.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setGroupContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* groupNodeSaga() {\n yield takeLatest(GET_GROUP_CONTENT, getGroupContent)\n}\n\nexport default groupNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectGroupNodeViewCardLayoutDomain = state =>\n state.get('groupNodeViewCardLayout', Map())\n\nexport const selectGroupContent = createSelector(\n selectGroupNodeViewCardLayoutDomain,\n state => state.get('groupContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectGroupNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * GroupNodeViewCardLayout\n *\n */\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List } from 'immutable'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport TableWidget from 'components/TableWidget'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\n\nimport { injectIntl } from 'react-intl'\n\nimport messages from './messages'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getGroupContent } from './actions'\nimport { selectGroupContent, selectIsLoading } from './selectors'\nexport class GroupNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getGroupContent(props.nodeData.srn)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getMembers = () => {\n const members = this.props.groupContent\n .getIn(['hasMember', 'items'], List())\n .toJS()\n return members.map(member => {\n const { name, srn, friendlyName } = member\n return {\n name: name,\n srn: srn,\n friendlyName: friendlyName === null ? '' : friendlyName,\n }\n })\n }\n\n getMemberOf = () => {\n let rows = []\n this.props.groupContent\n .getIn(['isMemberOf', 'items'], List())\n .toJS()\n .forEach(group => {\n const { hasAttached } = group\n const groupActive = group.active\n const groupName = group.name\n hasAttached.items.forEach(policy => {\n const { active, name, srn } = policy\n rows.push({\n groupActive,\n groupName,\n policyActive: active,\n policyName: name,\n srn,\n })\n })\n })\n\n this.props.groupContent\n .getIn(['hasAttached', 'items'], List())\n .toJS()\n .forEach(policy => {\n const { name, active, srn } = policy\n rows.push({\n groupName: 'Direct Attached',\n policyActive: active,\n policyName: name,\n srn,\n })\n })\n\n return rows\n }\n\n getColumns = () => {\n const numGroups = this.getMemberOf().length\n const numMembers = this.getMembers().length\n\n return {\n xs: [\n {\n widthPercent: 100,\n items: ['groups', 'members', 'graph'],\n heights: {\n groups: numGroups > 0 ? 2 : 1,\n members: numMembers > 0 ? 2 : 1,\n graph: 3,\n },\n },\n ],\n }\n }\n\n getGridContent = () => {\n return [\n
    \n \n
    ,\n
    \n \n
    ,\n ]\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nGroupNodeViewCardLayout.propTypes = {\n groupContent: ImmutablePropTypes.map.isRequired,\n horizontal: PropTypes.bool,\n isLoading: PropTypes.bool,\n getGroupContent: PropTypes.func.isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n userProfile: PropTypes.object.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n isLoading: selectIsLoading,\n groupContent: selectGroupContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getGroupContent,\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'groupNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'groupNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(GroupNodeViewCardLayout)\n","export const GET_AUDIT_CONTENT = 'app/AuditNodeViewCardLayout/GET_AUDIT_CONTENT'\nexport const SET_AUDIT_CONTENT = 'app/AuditNodeViewCardLayout/SET_AUDIT_CONTENT'\nexport const TOGGLE_SECONDARY_AUDIT =\n 'app/AuditNodeViewCardLayout/TOGGLE_SECONDARY_AUDIT'\nexport const SET_HAS_SECONDARY_AUDIT =\n 'app/AuditNodeViewCardLayout/SET_HAS_SECONDARY_AUDIT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport { SET_AUDIT_CONTENT, GET_AUDIT_CONTENT } from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n auditContent: {},\n isLoading: false,\n})\n\nconst auditNodeViewCardLayoutReducer = handleActions(\n {\n [GET_AUDIT_CONTENT]: state => state.set('isLoading', true),\n [SET_AUDIT_CONTENT]: (state, { payload }) => {\n return state.set('auditContent', fromJS(payload)).set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('auditContent', Map()),\n },\n initialState\n)\n\nexport default auditNodeViewCardLayoutReducer\n","import {\n GET_AUDIT_CONTENT,\n SET_AUDIT_CONTENT,\n TOGGLE_SECONDARY_AUDIT,\n SET_HAS_SECONDARY_AUDIT,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getAuditContent = createAction(GET_AUDIT_CONTENT)\nexport const setAuditContent = createAction(SET_AUDIT_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { AUDIT_NODE_VIEW_QUERY } from 'static-queries'\n\nimport { GET_AUDIT_CONTENT } from './constants'\nimport { setAuditContent } from './actions'\n\nfunction* getAuditContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${AUDIT_NODE_VIEW_QUERY}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const content = results.data.Audits.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setAuditContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* auditNodeSaga() {\n yield takeLatest(GET_AUDIT_CONTENT, getAuditContent)\n}\n\nexport default auditNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectAuditNodeViewCardLayoutDomain = state =>\n state.get('auditNodeViewCardLayout', Map())\n\nexport const selectAuditContent = createSelector(\n selectAuditNodeViewCardLayoutDomain,\n state => state.get('auditContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectAuditNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * AuditNodeViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { injectIntl } from 'react-intl'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List } from 'immutable'\nimport color from 'color'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport TableWidget from 'components/TableWidget'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getAuditContent } from './actions'\nimport { selectAuditContent, selectIsLoading } from './selectors'\n\nexport class AuditNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getAuditContent(props.nodeData.srn)\n\n this.styles = {\n button: {\n height: '1.85rem',\n fontSize: '0.85rem',\n border: `1px solid ${props.theme.primary}`,\n padding: '0.25rem 0.5rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n color: color(props.theme.neutralDark).darken(0.6),\n },\n }\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getAudits = () => {\n return this.props.auditContent.getIn(['audits', 'items'], List()).toJS()\n }\n\n getGridContent = () => {\n return [\n
    \n \n
    ,\n ]\n }\n\n getColumns = () => {\n return {\n xs: [\n {\n widthPercent: 100,\n items: ['table', 'graph'],\n heights: {\n table: 3,\n graph: 3,\n },\n },\n ],\n }\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nAuditNodeViewCardLayout.propTypes = {\n auditContent: ImmutablePropTypes.map.isRequired,\n getAuditContent: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n isLoading: PropTypes.bool,\n userProfile: ImmutablePropTypes.map.isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n isLoading: selectIsLoading,\n userProfile: selectUserProfile,\n auditContent: selectAuditContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getAuditContent,\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'auditNodeViewCardLayout', reducer })\n\nconst withSaga = injectSaga({\n key: 'auditNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl,\n themeable\n)(AuditNodeViewCardLayout)\n","export const GET_SECRET_STORE_CONTENT =\n 'app/SecretStoreNodeViewCardLayout/GET_SECRET_STORE_CONTENT'\nexport const SET_SECRET_STORE_CONTENT =\n 'app/SecretStoreNodeViewCardLayout/SET_SECRET_STORE_CONTENT'\nexport const GET_VAULT_STORE_CONTENT =\n 'app/SecretStoreNodeViewCardLayout/GET_VAULT_STORE_CONTENT'\n\nexport const SECRET_STORE_TYPES = {\n VAULT: 'HashiCorpVault',\n VAULT_AWS: 'HashiCorpVaultAWS',\n}\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport {\n SET_SECRET_STORE_CONTENT,\n GET_SECRET_STORE_CONTENT,\n GET_VAULT_STORE_CONTENT,\n} from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n secretStoreContent: {},\n isLoading: false,\n})\n\nconst secretStoreNodeViewCardLayoutReducer = handleActions(\n {\n [GET_SECRET_STORE_CONTENT]: state => state.set('isLoading', true),\n [GET_VAULT_STORE_CONTENT]: state => state.set('isLoading', true),\n [SET_SECRET_STORE_CONTENT]: (state, { payload }) => {\n return state\n .set('secretStoreContent', fromJS(payload))\n .set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('secretStoreContent', Map()),\n },\n initialState\n)\n\nexport default secretStoreNodeViewCardLayoutReducer\n","import {\n GET_SECRET_STORE_CONTENT,\n SET_SECRET_STORE_CONTENT,\n GET_VAULT_STORE_CONTENT,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getSecretStoreContent = createAction(GET_SECRET_STORE_CONTENT)\nexport const setSecretStoreContent = createAction(SET_SECRET_STORE_CONTENT)\nexport const getVaultStoreContent = createAction(GET_VAULT_STORE_CONTENT)\n","import { put, takeLatest, all } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\n\nimport { GET_SECRET_STORE_CONTENT, GET_VAULT_STORE_CONTENT } from './constants'\nimport { setSecretStoreContent } from './actions'\n\nfunction* getSecretStoreContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n query secretStoreNodeViewQuery($srn: String!) {\n SecretStores(where: { srn: { value: $srn } }) {\n items {\n contains(\n where: {\n label: { op: EQ, value: \"Secret\" }\n active: { op: EQ, value: true }\n }\n ) {\n count\n items {\n srn\n name\n friendlyName\n ... on Secret {\n metadata\n }\n }\n }\n }\n }\n }\n `,\n variables: {\n srn: action.payload,\n },\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n const content = results.data.SecretStores.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setSecretStoreContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* getVaultStoreContent(action) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n query secretStoreNodeViewQuery($srn: String!) {\n SecretStores(where: { srn: { value: $srn } }) {\n items {\n contains(\n where: {\n label: { op: EQ, value: \"SecretStore\" }\n active: { op: EQ, value: true }\n }\n ) {\n count\n items {\n srn\n name\n friendlyName\n ... on Secretstore {\n type\n metadata\n }\n }\n }\n }\n }\n }\n `,\n variables: {\n srn: action.payload,\n },\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n const content = results.data.SecretStores.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setSecretStoreContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* secretStoreNodeSaga() {\n yield all([\n yield takeLatest(GET_SECRET_STORE_CONTENT, getSecretStoreContent),\n yield takeLatest(GET_VAULT_STORE_CONTENT, getVaultStoreContent),\n ])\n}\n\nexport default secretStoreNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectSecretStoreNodeViewCardLayoutDomain = state =>\n state.get('secretStoreNodeViewCardLayout') || Map()\n\nexport const selectSecretStoreContent = createSelector(\n selectSecretStoreNodeViewCardLayoutDomain,\n state => state.get('secretStoreContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectSecretStoreNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { injectIntl } from 'react-intl'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List } from 'immutable'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams, metadataToObj } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport TableWidget from 'components/TableWidget'\n\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getSecretStoreContent, getVaultStoreContent } from './actions'\nimport { selectSecretStoreContent, selectIsLoading } from './selectors'\nimport { SECRET_STORE_TYPES } from './constants'\n\nexport class SecretStoreNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n if (this.props.nodeData.type === SECRET_STORE_TYPES.VAULT) {\n props.getVaultStoreContent(props.nodeData.srn)\n } else {\n props.getSecretStoreContent(props.nodeData.srn)\n }\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n getContainsCount = () =>\n this.props.secretStoreContent.getIn(['contains', 'count'])\n\n getContents = () => {\n const baseContent = this.props.secretStoreContent\n .getIn(['contains', 'items'], List())\n .toJS()\n\n if (this.props.nodeData.type === SECRET_STORE_TYPES.VAULT_AWS) {\n return baseContent.map(({ metadata, ...secret }) => {\n const mappedMetadata = metadataToObj(metadata)\n return {\n ...secret,\n roleCredentialType: mappedMetadata['role.credential_type'],\n }\n })\n }\n\n return baseContent\n }\n\n getLayouts = () => {\n const hasContents = this.getContents().length > 0\n\n return {\n contents: {\n lg: { w: 8, h: hasContents ? 3 : 1 },\n md: { w: 7, h: hasContents ? 3 : 1 },\n sm: { w: 6, h: hasContents ? 3 : 1 },\n xs: { w: 4, h: hasContents ? 3 : 1 },\n },\n graph: {\n lg: { w: 8, h: 3 },\n md: { w: 7, h: 3 },\n sm: { w: 6, h: 3 },\n xs: { w: 4, h: 3 },\n },\n }\n }\n\n isTopLevel = () => {\n return this.props.nodeData.type === SECRET_STORE_TYPES.VAULT\n }\n\n getGridContent = () => {\n const title = this.isTopLevel() ? 'Contains Stores' : 'Contains Secrets'\n\n return [\n
    \n \n
    ,\n ]\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nSecretStoreNodeViewCardLayout.propTypes = {\n getSecretStoreContent: PropTypes.func.isRequired,\n getVaultStoreContent: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n isLoading: PropTypes.bool,\n secretStoreContent: ImmutablePropTypes.map.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n userProfile: PropTypes.object.isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n secretStoreContent: selectSecretStoreContent,\n isLoading: selectIsLoading,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n setUserProfileTables,\n push,\n getSecretStoreContent,\n getVaultStoreContent,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({\n key: 'secretStoreNodeViewCardLayout',\n reducer,\n})\n\nconst withSaga = injectSaga({\n key: 'secretStoreNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(SecretStoreNodeViewCardLayout)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { fromJS } from 'immutable'\nimport _ from 'lodash'\n\nimport InfoCard, { Property } from 'components/InfoCard'\nimport { metadataToObj } from 'utils/sonraiUtils'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport CodeBlock from 'components/CodeBlock'\n\nexport class AwsVaultSecret extends React.Component {\n getLayouts = () => {\n return {\n contents: {\n lg: { w: 8 },\n md: { w: 7 },\n sm: { w: 6 },\n xs: { w: 4 },\n },\n graph: {\n lg: { w: 8, h: 2 },\n md: { w: 7, h: 2 },\n sm: { w: 6, h: 2 },\n xs: { w: 4, h: 2 },\n },\n }\n }\n\n getLabelFromMetadata = key => {\n const parts = key.split('.')\n\n const label = parts[parts.length - 1]\n return _.startCase(label)\n }\n\n getGridContent = () => {\n const name = this.props.nodeData.name || ''\n const type = _.get(name.split('/'), 1)\n\n if (type === 'roles') {\n const metadata = fromJS(metadataToObj(this.props.nodeData.metadata))\n .delete('role.default_sts_ttl')\n .delete('role.max_sts_ttl')\n .map((value, key) => {\n if (key === 'role.role_arns' || key === 'role.policy_arns') {\n try {\n value = JSON.parse(value).map(val =>
    {val}
    )\n } catch (e) {\n //eslint-disable-next-line no-console\n console.warn('could not parse json from metadata', e)\n }\n }\n\n if (key === 'role.policy_document') {\n try {\n const parsedValue = JSON.stringify(JSON.parse(value), null, 4)\n value = {parsedValue}\n } catch (e) {\n //eslint-disable-next-line no-console\n console.warn('could not parse json from metadata', e)\n }\n }\n\n return (\n \n )\n })\n .toList()\n .toJS()\n\n return [\n
    \n {metadata}\n
    ,\n ]\n }\n\n return []\n }\n\n render() {\n return (\n \n \n\n \n \n )\n }\n}\n\nAwsVaultSecret.propTypes = {\n horizontal: PropTypes.bool,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nexport default AwsVaultSecret\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { injectIntl } from 'react-intl'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\n\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport AwsVaultSecret from './AwsVaultSecret'\nconst SECRET_TYPES = {\n VAULT_AWS: 'HashiCorpVaultAWS',\n}\n\nexport class SecretNodeViewCardLayout extends React.Component {\n getLayouts = () => {\n return {\n graph: {\n lg: { w: 8, h: 3 },\n md: { w: 7, h: 3 },\n sm: { w: 6, h: 3 },\n xs: { w: 4, h: 3 },\n },\n }\n }\n\n getGridContent = () => {\n return []\n }\n\n render() {\n if (this.props.nodeData.type === SECRET_TYPES.VAULT_AWS) {\n return \n }\n\n return (\n \n \n\n \n \n )\n }\n}\n\nSecretNodeViewCardLayout.propTypes = {\n horizontal: PropTypes.bool,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n setUserProfileTables: PropTypes.func.isRequired,\n userProfile: PropTypes.object.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n injectIntl\n)(SecretNodeViewCardLayout)\n","export const GET_ENCRYPTION_KEY_CONTENT =\n 'app/EncryptionKeyNodeViewCardLayout/GET_ENCRYPTION_KEY_CONTENT'\nexport const SET_ENCRYPTION_KEY_CONTENT =\n 'app/EncryptionKeyNodeViewCardLayout/SET_ENCRYPTION_KEY_CONTENT'\n","import { handleActions } from 'redux-actions'\nimport { fromJS, Map } from 'immutable'\nimport {\n GET_ENCRYPTION_KEY_CONTENT,\n SET_ENCRYPTION_KEY_CONTENT,\n} from './constants'\nimport { CLEAR_DATA } from 'containers/NodeSolutionCenter/constants'\n\nconst initialState = fromJS({\n encryptionKeyContent: {},\n isLoading: false,\n})\n\nconst encryptionKeyNodeViewCardLayoutReducer = handleActions(\n {\n [GET_ENCRYPTION_KEY_CONTENT]: state => state.set('isLoading', true),\n [SET_ENCRYPTION_KEY_CONTENT]: (state, { payload }) => {\n return state\n .set('encryptionKeyContent', fromJS(payload))\n .set('isLoading', false)\n },\n [CLEAR_DATA]: state => state.set('encryptionKeyContent', Map()),\n },\n initialState\n)\n\nexport default encryptionKeyNodeViewCardLayoutReducer\n","import {\n GET_ENCRYPTION_KEY_CONTENT,\n SET_ENCRYPTION_KEY_CONTENT,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getEncryptionKeyContent = createAction(GET_ENCRYPTION_KEY_CONTENT)\nexport const setEncryptionKeyContent = createAction(SET_ENCRYPTION_KEY_CONTENT)\n","import { put, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { GET_ENCRYPTION_KEY_CONTENT } from './constants'\nimport { setEncryptionKeyContent } from './actions'\nimport { ENCRYPTION_KEY_NODE_VIEW_QUERY } from 'static-queries'\n\nfunction* getEncryptionKeyContent(action) {\n const { srn } = action.payload\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${ENCRYPTION_KEY_NODE_VIEW_QUERY}\n `,\n variables: {\n srn,\n },\n })\n\n const content = results.data.EncryptionKeys.items\n if (content === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setEncryptionKeyContent(_.get(content, 0)))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* EncryptionKeyNodeSaga() {\n yield takeLatest(GET_ENCRYPTION_KEY_CONTENT, getEncryptionKeyContent)\n}\n\nexport default EncryptionKeyNodeSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectEncryptionKeyNodeViewCardLayoutDomain = state =>\n state.get('encryptionKeyNodeViewCardLayout', Map())\n\nexport const selectEncryptionKeyContent = createSelector(\n selectEncryptionKeyNodeViewCardLayoutDomain,\n state => state.get('encryptionKeyContent') || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectEncryptionKeyNodeViewCardLayoutDomain,\n state => state.get('isLoading')\n)\n","/**\n *\n * EncryptionKeyViewCardLayout\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport { injectIntl } from 'react-intl'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { List, Map } from 'immutable'\nimport BorderedCard from 'components/BorderedCard'\nimport DataTable from 'components/DataTable'\nimport { TopTitle } from 'components/Card'\nimport PolicyVersionWidget from 'components/PolicyVersionWidget'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { setUserProfileTables } from 'containers/UserProfileData/actions'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport TextLink from 'components/TextLink'\nimport reducer from './reducer'\nimport sagas from './sagas'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\n\nimport { getEncryptionKeyContent } from './actions'\nimport { selectEncryptionKeyContent, selectIsLoading } from './selectors'\n\nexport class EncryptionKeyNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n\n props.getEncryptionKeyContent({ srn: props.nodeData.srn })\n\n this.styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n marginRight: '0px',\n },\n prevNext: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n modalHeader: {\n fontSize: '17px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: '60vw',\n color: props.theme.secondary,\n },\n modalFooter: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n }\n\n this.state = {\n selectedTabIndex: 0,\n selectedPolicyIndex: 0,\n isOpen: false,\n }\n }\n\n setTabIndex = index => {\n this.setState({\n selectedTabIndex: index,\n })\n }\n\n getVersions = () =>\n this.props.encryptionKeyContent\n .getIn(\n [\n 'hasAttached',\n 'items',\n this.state.selectedPolicyIndex,\n 'hasPolicyVersion',\n 'items',\n ],\n List()\n )\n .toJS()\n\n getSelectedVersion = () => {\n return this.getVersions()[this.state.selectedTabIndex] || null\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n onClickPolicy = srn => {\n this.props.push(getNodeViewPushParams(srn, getTypeFromSrn(srn)))\n }\n\n getProtected = () => {\n const data = this.props.encryptionKeyContent\n .getIn(['protects', 'items'], List())\n .toJS()\n\n return data.map(item => ({\n protects: item.friendlyName || item.name || '',\n type: item.label || '',\n srn: item.srn,\n }))\n }\n\n getAlias = () => {\n return this.props.encryptionKeyContent\n .getIn(['hasAlias', 'items'], List())\n .toJS()\n }\n\n getLayouts = () => {\n return {\n alias: {\n lg: { w: 4, h: 2 },\n md: { w: 4, h: 2 },\n sm: { w: 4, h: 2 },\n xs: { w: 4, h: 2 },\n },\n protects: {\n lg: { w: 4, h: 2 },\n md: { w: 4, h: 2 },\n sm: { w: 4, h: 2 },\n xs: { w: 4, h: 2 },\n },\n policy: {\n lg: { w: 8, h: 3 },\n md: { w: 8, h: 3 },\n sm: { w: 8, h: 3 },\n xs: { w: 8, h: 3 },\n },\n graph: {\n lg: { w: 7, h: 3 },\n md: { w: 7, h: 3 },\n sm: { w: 7, h: 3 },\n xs: { w: 7, h: 3 },\n },\n }\n }\n\n getCols = () => {\n return {\n lg: 8,\n md: 8,\n sm: 8,\n xs: 1,\n }\n }\n\n handleNextPolicy = currentIndex => {\n this.setState({ selectedPolicyIndex: currentIndex + 1 })\n }\n\n handlePrevPolicy = currentIndex => {\n this.setState({ selectedPolicyIndex: currentIndex - 1 })\n }\n\n renderPolicyNav = () => {\n const { selectedPolicyIndex } = this.state\n const isFirst = selectedPolicyIndex === 0\n const isLast =\n selectedPolicyIndex ===\n this.props.encryptionKeyContent.getIn(['hasAttached', 'items'], List())\n .size -\n 1\n return (\n
    \n \n this.setState(oldState => ({\n selectedPolicyIndex: oldState.selectedPolicyIndex - 1,\n }))\n }\n >\n Prev\n \n
    \n {this.state.selectedPolicyIndex + 1} of{' '}\n {\n this.props.encryptionKeyContent.getIn(\n ['hasAttached', 'items'],\n List()\n ).size\n }\n
    \n \n this.setState(oldState => ({\n selectedPolicyIndex: oldState.selectedPolicyIndex + 1,\n }))\n }\n >\n Next\n \n
    \n )\n }\n\n togglePolicyEntriesModal = () =>\n this.setState(oldState => ({ isOpen: !oldState.isOpen }))\n\n renderPolicyEntriesModal = () => {\n const version = this.getSelectedVersion()\n const root =\n this.props.encryptionKeyContent.getIn([\n 'hasAttached',\n 'items',\n this.state.selectedPolicyIndex,\n ]) || Map()\n\n const title =\n root.get('friendlyName') || root.get('name') || root.get('srn') || ''\n return (\n \n \n \n \n this.onClickPolicy(\n this.props.encryptionKeyContent.getIn([\n 'hasAttached',\n 'items',\n this.state.selectedPolicyIndex,\n 'srn',\n ])\n )\n }\n title={title}\n >\n {title}\n \n \n \n \n \n \n \n \n Close\n \n {this.renderPolicyNav()}\n \n \n )\n }\n\n getPolicies = () => {\n const policies = this.props.encryptionKeyContent\n .getIn(['hasAttached', 'items'], List())\n .toJS()\n .map(item => ({\n name: item.name || item.srn || '',\n srn: item.srn || '',\n showPolicy: '',\n account: item.account || '',\n cloudType: item.cloudType || '',\n createdDate: item.createdDate || '',\n createdBy: item.createdBy || '',\n }))\n return policies\n }\n\n handlePolicyModal = srn => {\n const index = this.props.encryptionKeyContent\n .getIn(['hasAttached', 'items'], List())\n .findIndex(item => item.get('srn') === srn)\n\n if (index !== -1) {\n this.setState({\n selectedPolicyIndex: index,\n isOpen: true,\n })\n }\n }\n\n getGridContent = () => {\n return [\n
    \n \n Protects\n \n \n
    ,\n
    \n \n Alias\n \n \n
    ,\n
    \n \n Polices \n this.onClickPolicy(srn)}\n data={this.getPolicies()}\n customColumnConfig={{\n name: {\n maxWidth: 250,\n },\n showPolicy: {\n width: 200,\n minWidth: 160,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: ({ data: { srn } }) => {\n return (\n this.handlePolicyModal(srn)}\n >\n Show Policy Entries\n \n )\n },\n },\n }}\n />\n \n
    ,\n ]\n }\n\n render() {\n return (\n \n \n {!this.props.isLoading && this.renderPolicyEntriesModal()}\n \n \n )\n }\n}\n\nEncryptionKeyNodeViewCardLayout.propTypes = {\n theme: themeShape,\n isLoading: PropTypes.bool,\n encryptionKeyContent: ImmutablePropTypes.map.isRequired,\n getEncryptionKeyContent: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n push: PropTypes.func.isRequired,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n}\n\nconst mapStateToProps = createStructuredSelector({\n isLoading: selectIsLoading,\n userProfile: selectUserProfile,\n encryptionKeyContent: selectEncryptionKeyContent,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getEncryptionKeyContent,\n setUserProfileTables,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({\n key: 'encryptionKeyNodeViewCardLayout',\n reducer,\n})\n\nconst withSaga = injectSaga({\n key: 'encryptionKeyNodeViewCardLayout',\n saga: sagas,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n injectIntl\n)(themeable(EncryptionKeyNodeViewCardLayout))\n","import loadable from 'utils/loadable'\nexport default loadable(() => import('./index'))\n","import loadable from 'utils/loadable'\nexport default loadable(() => import('./index'))","import loadable from 'utils/loadable'\nexport default loadable(() => import('./index'))\n","/*\n *\n * SolutionCenter reducer\n *\n */\n\nimport { fromJS, List, Map } from 'immutable'\nimport { handleActions } from 'redux-actions'\n\nimport {\n GET_DATA_SUCCESS,\n SET_SWIMLANE_DATA_LOADING,\n GET_SWIMLANE_DATA_SUCCESS,\n GET_DATA,\n CLEAR_DATA,\n GET_CRM_DATA_SUCCESS,\n SET_RESOURCE_MONITORING,\n SET_TICKET_COUNT,\n FETCH_RESOURCE_GROUPS,\n FETCH_RESOURCE_GROUPS_SUCCESS,\n SET_SHOULD_UPDATE_NODE_SWIMLANES,\n FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR,\n FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR_SUCCESS,\n FETCH_UBER_POLICY,\n FETCH_UBER_POLICY_ERROR,\n FETCH_UBER_POLICY_SUCCESS,\n SET_CRM_TICKETS,\n} from './constants'\n\nconst initialState = fromJS({\n detailsLoading: true,\n isLoading: false,\n data: undefined,\n isMonitored: undefined,\n fetchingKeyVaultCreds: Map(),\n deletingKeyVaultCreds: Map(),\n updatingKeyVaultCreds: Map(),\n keyVaultCreds: Map(),\n keyVaultError: null,\n resourceGroups: null,\n fetchingResourceGroup: false,\n shouldUpdateNodeSwimlanes: false,\n fetchingEffectivePermissions: false,\n fetchingUsedEffectivePermissions: false,\n effectivePermissions: null,\n usedEffectivePermissions: null,\n uberPolicy: {\n data: null,\n loading: false,\n error: null,\n },\n crmTickets: [],\n ticketCount: null,\n})\n\nconst nodeSolutionCenter = handleActions(\n {\n [GET_DATA]: state => state.set('detailsLoading', true),\n [GET_DATA_SUCCESS]: (state, { payload }) => {\n return state.set('detailsLoading', false).set('data', payload.data)\n },\n [SET_SWIMLANE_DATA_LOADING]: (state, { payload }) => {\n return state.set('swimlaneDetailsLoading', payload.loading)\n },\n [GET_SWIMLANE_DATA_SUCCESS]: (state, { payload }) => {\n let highestImportance = -1\n if (!state.get('importance') && payload.data) {\n payload.data.forEach(swimmy => {\n if (swimmy.defaultImportance > highestImportance) {\n highestImportance = swimmy.defaultImportance\n }\n })\n }\n\n const newdude =\n highestImportance <= 0\n ? state.set('importance', 5)\n : state.set('importance', highestImportance)\n\n if (newdude.hasIn(['data', 'Resources', 'items', 0])) {\n return newdude\n .setIn(\n ['data', 'Resources', 'items', 0, 'swimlane', 'items'],\n fromJS(payload.data)\n )\n .set('swimlaneDetailsFailure', false)\n .set('swimlaneDetailsLoading', false)\n } else {\n return newdude\n .set('swimlaneDetailsFailure', true)\n .set('swimlaneDetailsLoading', false)\n }\n },\n [GET_CRM_DATA_SUCCESS]: (state, { payload }) => {\n return state\n .set('isMonitored', payload.isMonitored)\n .set('importance', payload.importance)\n },\n [SET_RESOURCE_MONITORING]: (state, { payload }) => {\n if (!payload) {\n // removed this t\\because it broke stuff,\n // actual fix is to refetch data on enable\n //.set('monitoredProperties', [])\n //.set('changeDetectionOptions', [])\n return state.set('isMonitored', payload)\n }\n return state.set('isMonitored', payload)\n },\n [CLEAR_DATA]: state => {\n return state\n .set('data', undefined)\n .set('tags', List())\n .set('isMonitored', undefined)\n .set('monitoredProperties', [])\n .set('changeDetectionOptions', [])\n .set('alertLogsCount', 0)\n .set(\n 'uberPolicy',\n fromJS({\n loading: false,\n error: null,\n data: null,\n })\n )\n },\n [SET_TICKET_COUNT]: (state, { payload }) =>\n state.set('ticketCount', payload),\n [FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR]: (state, { payload }) =>\n state.set(\n payload.usedPermissions\n ? 'fetchingEffectivePermissions'\n : 'fetchingUsedEffectivePermissions',\n true\n ),\n [FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR_SUCCESS]: (state, { payload }) =>\n state\n .set(\n payload.usedPermissions\n ? 'fetchingUsedEffectivePermissions'\n : 'fetchingEffectivePermissions',\n false\n )\n .set(\n payload.usedPermissions\n ? 'usedEffectivePermissions'\n : 'effectivePermissions',\n fromJS(payload.effectivePermissions)\n ),\n [FETCH_RESOURCE_GROUPS]: state => state.set('fetchingResourceGroups', true),\n [FETCH_RESOURCE_GROUPS_SUCCESS]: (state, { payload }) =>\n state\n .set('resourceGroups', fromJS(payload.groups))\n .set('fetchingResourceGroups', false),\n [FETCH_UBER_POLICY]: state =>\n state.set(\n 'uberPolicy',\n fromJS({\n loading: true,\n data: null,\n error: null,\n })\n ),\n [FETCH_UBER_POLICY_ERROR]: (state, { payload }) =>\n state.set(\n 'uberPolicy',\n fromJS({\n loading: false,\n data: null,\n error: payload,\n })\n ),\n [FETCH_UBER_POLICY_SUCCESS]: (state, { payload }) =>\n state.set(\n 'uberPolicy',\n fromJS({\n loading: false,\n data: payload,\n error: null,\n })\n ),\n [SET_SHOULD_UPDATE_NODE_SWIMLANES]: (state, { payload }) =>\n state.set('shouldUpdateNodeSwimlanes', payload),\n [SET_CRM_TICKETS]: (state, { payload }) =>\n state.set('crmTickets', fromJS(payload)),\n },\n initialState\n)\n\nexport default nodeSolutionCenter\n","import { all, put, takeLatest, takeEvery, call } from 'redux-saga/effects'\nimport {\n getDataSuccess,\n setSwimlaneDataLoading,\n getSwimlaneDataSucces,\n setSwimlaneDataFailure,\n getCrmDataSuccess,\n setResourceMonitoring,\n fetchEffectivePermissionsForActorSuccess,\n fetchUberPolicySuccess,\n fetchUberPolicyError,\n setTicketCount,\n setCrmTickets,\n} from './actions'\nimport { updateRapsheetResourceMonitor } from 'containers/RapSheet/actions'\nimport { setChangeDetectionData } from 'containers/ChangeDetectionManager/actions'\nimport {\n FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR,\n GET_DATA,\n TOGGLE_RESOURCE_MONITORING,\n RELOAD_SWIMLANES,\n FETCH_UBER_POLICY,\n GET_TICKET_COUNT,\n GET_CRM_TICKETS,\n} from './constants'\nimport { getClient } from 'apolloClient'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { isMonitored } from 'utils/sonraiUtils'\nimport { TYPES_WITH_CRM, DATA_TYPES_FOR_CRM } from 'appConstants'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { formatChangeDetectionProperties } from 'utils/sonraiUtils'\n\nfunction* getNameInfoOnSrn(srn) {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n query getNameInfoOnEntity {\n Resources(\n where: { srn: { value: \"${srn}\"}}\n ) {\n items {\n name\n friendlyName\n srn\n }\n }\n }\n `,\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n if (\n response.data &&\n response.data.Resources.items &&\n !_.isEmpty(response.data.Resources.items)\n ) {\n return _.first(response.data.Resources.items)\n }\n return {}\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error(`${err}`)\n }\n}\n\nfunction* getInfoOnField(field, listOfSrns) {\n const extendedInfo = yield all(\n listOfSrns.map(srn => call(getNameInfoOnSrn, srn))\n )\n\n return {\n [field]: extendedInfo,\n }\n}\n\nfunction* getData(action) {\n try {\n const client = getClient()\n\n const response = yield client.query({\n query: action.payload.query,\n variables: action.payload.variables,\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n\n const items = _.first(response.data.Resources.items)\n\n const fieldsWithSrns = _.keys(items).filter(key => {\n if (Array.isArray(items[key]) && 'swimlaneSRNs' !== key) {\n if (\n items[key].find(\n item => typeof item === 'string' && item.startsWith('srn:')\n )\n ) {\n return key\n }\n }\n })\n const arrOfFieldsWithSrnsInfo = yield all(\n fieldsWithSrns.map(field => call(getInfoOnField, field, items[field]))\n )\n\n if (items && !_.isEmpty(fieldsWithSrns)) {\n fieldsWithSrns.forEach((field, index) => {\n response.data.Resources.items[0][field] =\n arrOfFieldsWithSrnsInfo[index][field]\n })\n }\n\n yield put(\n getDataSuccess({\n data: response.data,\n })\n )\n const resourceSrn = action.payload.variables.srn\n\n const type = getTypeFromSrn(resourceSrn).toLowerCase()\n\n const field = TYPES_WITH_CRM.includes(type)\n ? response.data[_.keys(response.data)[0]].items[0] &&\n response.data[_.keys(response.data)[0]].items[0].sonraiConfig\n : undefined\n\n const properties = yield call(getChangeDetectionProperties, resourceSrn)\n const changeDetectionProperties = formatChangeDetectionProperties(\n properties\n )\n\n const changeDetectionOptions = yield call(getChangeDetectionOptions, type)\n changeDetectionOptions.forEach(option => {\n if (\n option.keyType !== 'PATH' ||\n option.keyName === 'activeFrom' ||\n option.keyName === 'accessedUsing' ||\n option.keyName === 'accessedFrom'\n ) {\n option.actionClassification = []\n }\n })\n // Get's rid of the Activity action classification as this is not a valid action classification type (should do this server side)\n changeDetectionOptions.forEach(option => {\n if (!_.isEmpty(option.actionClassification)) {\n option.actionClassification = [...option.actionClassification].filter(\n x => x !== 'Activity'\n )\n }\n })\n\n yield put(\n setChangeDetectionData({\n changeDetectionOptions,\n changeDetectionProperties,\n })\n )\n\n yield put(\n getCrmDataSuccess({\n isMonitored: isMonitored(field),\n importance: items !== undefined ? items.importance : null,\n })\n )\n\n if (action.payload.swimlaneQuery) {\n yield put(setSwimlaneDataLoading({ loading: true }))\n yield getSwimlaneData({\n payload: {\n query: action.payload.swimlaneQuery,\n variables: action.payload.variables,\n },\n })\n } else {\n yield put(setSwimlaneDataLoading({ loading: false }))\n yield put(setSwimlaneDataFailure(false))\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error fetching data', e)\n }\n}\n\nfunction* getSwimlaneData(action) {\n try {\n const client = getClient()\n\n const response = yield client.query({\n query: action.payload.query,\n variables: action.payload.variables,\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n\n if (response.errors) {\n throw response.errors\n }\n\n const items = _.get(response, ['data', 'Resources', 'items'])\n if (items == null || items.length === 0) {\n throw 'could not get resource from :' + JSON.stringify(response)\n }\n\n const resource = items[0]\n const swimlanes = _.get(resource, ['swimlane', 'items'])\n if (swimlanes == null || swimlanes.length === 0) {\n throw 'could not get swimlanes from :' + JSON.stringify(resource)\n }\n\n yield put(\n getSwimlaneDataSucces({\n data: swimlanes,\n })\n )\n } catch (e) {\n yield put(setSwimlaneDataFailure(true))\n //eslint-disable-next-line no-console\n console.error('Error fetching data', e)\n }\n}\n\nfunction* getTicketCount(action) {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n query getTicketCountForResource {\n TicketRollups(\n where: {\n resourceSRN: {\n op: EQ\n value: \"${action.payload}\"\n }\n ticketType: {\n value: \"ALL\"\n }\n swimlaneSrns: { value: \"ALL\" }\n ticketKey: { op: EQ, value: \"ALL\" }\n status: { op: IN_LIST, values: [\"NEW\", \"IN_PROGRESS\"] }\n severityCategory: { op: EQ, value: \"ALL\" }\n actionClassification: { value: \"ALL\" }\n resourceType: { op: EQ, value: \"ALL\" }\n resourceLabel: { op: EQ, value: \"ALL\" }\n orgName: { value: \"ALL\" }\n account: { value: \"ALL\" }\n }\n ) {\n items {\n count\n }\n }\n }\n `,\n })\n\n if (response.errors) {\n throw new Error(response.errors)\n }\n\n const count = _.get(response, [\n 'data',\n 'TicketRollups',\n 'items',\n 0,\n 'count',\n ])\n\n if (count === undefined) {\n yield put(setTicketCount(null))\n } else {\n yield put(setTicketCount(count))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`${e} there was an error getting ticketCount`)\n }\n}\n\nfunction* getChangeDetectionProperties(resourceSrn) {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n query {\n CDConfigs(where: { resourceSrn: { value: \"${resourceSrn}\" }, active: { value: true }, }) {\n items {\n keyType\n keyName\n alertLevel\n actionClassification\n }\n }\n }\n `,\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n return response.data.CDConfigs.items\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting change detection properties', e)\n }\n}\n\nfunction* getChangeDetectionOptions(resourceType = '') {\n const type = DATA_TYPES_FOR_CRM.includes(resourceType.toLowerCase())\n ? 'Data'\n : 'Identity'\n\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n query getOptions {\n getChangeDetectionOptions(resourceType: ${type}) {\n keyType\n keyName\n actionClassification\n }\n }\n `,\n })\n return response.data.getChangeDetectionOptions\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting changeDetectionOptions', e)\n }\n}\n\nfunction* getCRMTickets(action) {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n query getCRMTicketsForResource {\n Tickets(\n where: {\n resourceSRN: {\n op: EQ\n value: \"${action.payload}\"\n }\n ticketType: {\n op: IN_LIST\n values: [\"Access\", \"Activity\", \"Property\"]\n }\n status: { op: IN_LIST, values: [\"NEW\", \"IN_PROGRESS\"] }\n }\n ) {\n items(\n limit: 1000,\n ) {\n srn\n resourceId\n createdDate\n createdBy\n orgName\n assignedTo\n transitionedBy\n transitionDate\n isSnoozed\n snoozedUntil\n ticketType\n ticketKey\n description\n title\n status\n account\n firstSeen\n lastSeen\n flag\n evidence {\n conditions\n path\n count\n fieldType\n boolValue\n intValue\n longValue\n value\n prevBoolValue\n prevIntValue\n prevLongValue\n prevValue\n resourceSet\n conditions\n path\n regionSet\n userAgentSet\n }\n resourceSRN\n severityNumeric\n severityCategory\n swimlaneSRNs\n actionClassification\n resourceLabel\n resourceType\n }\n }\n }\n `,\n })\n\n if (response.errors) {\n throw new Error(response.errors)\n }\n\n const tickets = _.get(response, ['data', 'Tickets', 'items'])\n\n if (!tickets) {\n throw new Error('Received null items')\n } else {\n yield put(setCrmTickets(tickets))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`${e} there was an error getting CRM tickets`)\n }\n}\n\nfunction* toggleResourceMonitoring(action) {\n const { isMonitored, srn } = action.payload\n const change = !isMonitored\n //optimiticly update change\n yield put(setResourceMonitoring(change))\n yield put(updateRapsheetResourceMonitor({ srn: srn, isMonitored: change }))\n // actually make change\n const client = getClient()\n const response = yield client.mutate({\n mutation: gql`\n mutation toggleResourceMonitoring {\n setMonitor(monitorStatusBySrn: {srn: \"${srn}\", monitor: ${change} }){\n srn\n monitor\n }\n }\n `,\n })\n\n // compare result of change to our assumption, if they are the same do nothing, if not, correct the data\n const update = response.data.setMonitor[0].monitor\n\n if (update !== change) {\n yield put(updateRapsheetResourceMonitor({ srn: srn, isMonitored: update }))\n yield put(setResourceMonitoring(update))\n }\n}\n\nexport function* fetchEffectivePermissionsForActor(action) {\n const client = yield getClient()\n\n const epfilter = {\n permissionActivity: {\n op: action.payload.usedPermissions ? 'LT' : 'GT',\n value: 30,\n },\n }\n\n try {\n const results = yield client.query({\n query: gql`\n query effectivePermission${\n action.payload.usedPermissions ? 'Used' : ''\n }(\n $epfilter: EffectivePermissionFilterType\n $srn: String!\n ) {\n Actors(where: { srn: { value: $srn } }) {\n items(limit: 1) {\n hasEffectivePermissions(\n distinct: [\n identityChain,\n permission, \n permissionSrn, \n policySrn,\n policyEntryConditions, \n policyEntryResourceFilter, \n resourceId\n ]\n where: { includes: [$epfilter] \n }) {\n items {\n identityChain,\n permission,\n permissionSrn,\n policySrn,\n policyEntryConditions\n policyEntryResourceFilter\n resourceId\n }\n }\n }\n }\n }\n `,\n variables: {\n srn: action.payload.srn,\n epfilter,\n },\n })\n\n if (results.data) {\n const permissions = _.get(\n results.data,\n ['Actors', 'items', '0', 'hasEffectivePermissions', 'items'],\n []\n )\n\n yield put(\n fetchEffectivePermissionsForActorSuccess({\n usedPermissions: action.payload.usedPermissions,\n effectivePermissions: permissions,\n })\n )\n } else {\n throw new Error('Error fetching effective permissions')\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nexport function* fetchUberPolicy(action) {\n const client = yield getClient()\n\n try {\n const results = yield client.query({\n query: gql`\n query fetchUberPolicyForNode($srn: String!) {\n AnalyticsResults(\n where: {\n type: { value: AWS_UBER_POLICY }\n resourceSrn: { value: $srn }\n }\n ) {\n items {\n data\n }\n }\n }\n `,\n variables: {\n srn: action.payload,\n },\n })\n\n if (results.errors) {\n throw new Error(results.errors)\n }\n\n const policy = _.get(results, [\n 'data',\n 'AnalyticsResults',\n 'items',\n 0,\n 'data',\n 0,\n 'policy',\n ])\n\n if (!policy) {\n throw new Error('No results returned')\n }\n\n yield put(fetchUberPolicySuccess(policy))\n } catch (e) {\n yield put(fetchUberPolicyError(e.message))\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* nodeSolutionCenterSaga() {\n yield all([\n takeLatest(GET_DATA, getData),\n takeLatest(GET_TICKET_COUNT, getTicketCount),\n takeLatest(GET_CRM_TICKETS, getCRMTickets),\n takeLatest(TOGGLE_RESOURCE_MONITORING, toggleResourceMonitoring),\n takeLatest(RELOAD_SWIMLANES, getSwimlaneData),\n takeEvery(\n FETCH_EFFECTIVE_PERMISSION_FOR_ACTOR,\n fetchEffectivePermissionsForActor\n ),\n takeLatest(FETCH_UBER_POLICY, fetchUberPolicy),\n ])\n}\n\nexport default nodeSolutionCenterSaga\n","/**\n *\n * NodeSolutionCenter\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport _ from 'lodash'\nimport { getNameForHelmet } from 'utils/sonraiUtils'\nimport { Helmet } from 'react-helmet'\nimport MissingDataNode from 'components/MissingDataNode'\nimport { NODE_VIEW_TYPES } from 'appConstants'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { DAEMON } from 'utils/constants'\nimport AccountNodeViewCardLayout from 'containers/NodeViewLayouts/AccountNodeViewCardLayout'\nimport UserNodeViewCardLayout from 'containers/NodeViewLayouts/UserNodeViewCardLayout'\nimport DataNodeViewCardLayout from 'containers/NodeViewLayouts/DataNodeViewCardLayout'\nimport DataContainerNodeViewCardLayout from 'containers/NodeViewLayouts/DataContainerNodeViewCardLayout'\nimport DataStoreNodeViewCardLayout from 'containers/NodeViewLayouts/DataStoreNodeViewCardLayout'\nimport PublicKeyNodeViewCardLayout from 'containers/NodeViewLayouts/PublicKeyNodeViewCardLayout'\nimport RoleNodeViewCardLayout from 'containers/NodeViewLayouts/RoleNodeViewCardLayout'\nimport PolicyNodeViewCardLayout from 'containers/NodeViewLayouts/PolicyNodeViewCardLayout'\nimport ImageNodeViewCardLayout from 'containers/NodeViewLayouts/ImageNodeViewCardLayout'\nimport ComputeNodeViewCardLayout from 'containers/NodeViewLayouts/ComputeNodeViewCardLayout'\nimport GenericNodeViewCardLayout from 'containers/NodeViewLayouts/GenericNodeViewCardLayout'\nimport ActionTypeNodeViewCardLayout from 'containers/NodeViewLayouts/ActionTypeNodeViewCardLayout'\nimport ActionNodeViewCardLayout from 'containers/NodeViewLayouts/ActionNodeViewCardLayout'\nimport IdentityNodeViewCardLayout from 'containers/NodeViewLayouts/IdentityNodeViewCardLayout'\nimport GroupNodeViewCardLayout from 'containers/NodeViewLayouts/GroupNodeViewCardLayout'\nimport AuditNodeViewCardLayout from 'containers/NodeViewLayouts/AuditNodeViewCardLayout'\nimport SecretStoreNodeViewCardLayout from 'containers/NodeViewLayouts/SecretStoreNodeViewCardLayout'\nimport SecretNodeViewCardLayout from 'containers/NodeViewLayouts/SecretNodeViewCardLayout'\nimport EncryptionKeyNodeViewCardLayout from 'containers/NodeViewLayouts/EncryptionKeyNodeViewCardLayout'\n\nimport K8sClusterNodeViewCardLayout from 'containers/NodeViewLayouts/K8sClusterNodeViewCardLayout/loadable'\nimport K8sNamespaceNodeViewCardLayout from 'containers/NodeViewLayouts/K8sNamespaceNodeViewCardLayout/loadable'\nimport K8sWorkloadNodeViewCardLayout from 'containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/loadable'\n\nimport LoadingAnim from 'components/LoadingAnim'\nimport { exists } from 'utils/sonraiUtils'\nimport { getNodeInfoQuery, getTypeFromSrn } from 'utils/graphDataUtils'\nimport {\n selectQueryNames,\n selectQueryTypes,\n} from 'containers/SonraiData/selectors'\n\nimport { fetchTags } from 'containers/SonraiData/actions'\n\nimport {\n selectData,\n selectTagOptions,\n selectNodeId,\n selectNodeData,\n selectDetailsLoading,\n selectIsMonitored,\n selectShouldUpdateNodeSwimlanes,\n} from './selectors'\nimport {\n getData,\n setShouldUpdateNodeSwimlanes,\n getTicketCount,\n getCrmTickets,\n} from './actions'\nimport reducer from './reducers'\nimport sagas from './sagas'\nimport { TYPES_WITH_CRM } from 'appConstants'\nimport { fetchPolicies } from 'containers/ControlFrameworkData/actions'\nimport { selectPolicies } from 'containers/ControlFrameworkData/selectors'\n\nexport class NodeSolutionCenter extends React.Component {\n constructor(props) {\n super(props)\n\n if (this.props.tagOptions.isEmpty()) {\n this.props.fetchTags()\n }\n\n if (this.props.policies.isEmpty()) {\n this.props.fetchPolicies()\n }\n\n this.fetchData()\n\n this.styles = {\n wrapper: {\n height: '100%',\n width: '100%',\n display: 'grid',\n gridTemplateRows: 'auto auto 1fr',\n gridTemplateAreas: '\"header\"\"tabs\"\"body\"',\n overflow: 'auto',\n },\n }\n }\n\n componentDidUpdate(oldProps) {\n if (\n oldProps.nodeId !== this.props.nodeId ||\n (oldProps.queryNames.isEmpty() && !this.props.queryNames.isEmpty())\n ) {\n this.fetchData()\n }\n }\n\n fetchData = () => {\n if (!this.props.queryNames.isEmpty()) {\n const query = getNodeInfoQuery(\n this.props.nodeId,\n this.props.queryNames,\n this.props.types\n )\n\n this.props.getTicketCount(this.props.nodeId)\n this.props.getCrmTickets(this.props.nodeId)\n\n this.props.getData({\n query: query,\n variables: {\n srn: this.props.nodeId,\n },\n })\n }\n }\n\n getNodeType = () => {\n return this.props.type || getTypeFromSrn(this.props.nodeId)\n }\n\n getNodeCardClass = () => {\n const type = this.getNodeType().toLowerCase()\n switch (type) {\n case NODE_VIEW_TYPES.ACCOUNT:\n if ('K8SCluster' === this.props.nodeData.type) {\n return K8sClusterNodeViewCardLayout\n }\n return AccountNodeViewCardLayout\n case NODE_VIEW_TYPES.ACTION:\n return ActionNodeViewCardLayout\n case NODE_VIEW_TYPES.USER:\n return UserNodeViewCardLayout\n case NODE_VIEW_TYPES.DATA:\n case NODE_VIEW_TYPES.DATA_OBJECT:\n return DataNodeViewCardLayout\n case NODE_VIEW_TYPES.DATA_STORE:\n return DataStoreNodeViewCardLayout\n case NODE_VIEW_TYPES.CONTAINER:\n return DataContainerNodeViewCardLayout\n case NODE_VIEW_TYPES.PUBLIC_KEY:\n return PublicKeyNodeViewCardLayout\n case NODE_VIEW_TYPES.POLICY:\n return PolicyNodeViewCardLayout\n case NODE_VIEW_TYPES.IMAGE:\n return ImageNodeViewCardLayout\n case NODE_VIEW_TYPES.COMPUTE:\n return ComputeNodeViewCardLayout\n case NODE_VIEW_TYPES.ACTION_TYPE:\n return ActionTypeNodeViewCardLayout\n case NODE_VIEW_TYPES.IDENTITY:\n return IdentityNodeViewCardLayout\n case NODE_VIEW_TYPES.GROUP:\n return GroupNodeViewCardLayout\n case NODE_VIEW_TYPES.AUDIT:\n return AuditNodeViewCardLayout\n case NODE_VIEW_TYPES.RESOURCE_GROUP:\n if ('kubernetes' === this.props.nodeData.cloudType) {\n return K8sNamespaceNodeViewCardLayout\n }\n return GenericNodeViewCardLayout\n case NODE_VIEW_TYPES.ROLE:\n return RoleNodeViewCardLayout\n case NODE_VIEW_TYPES.SECRET_STORE:\n return SecretStoreNodeViewCardLayout\n case NODE_VIEW_TYPES.SECRET:\n return SecretNodeViewCardLayout\n case NODE_VIEW_TYPES.ENCRYPTION_KEY:\n return EncryptionKeyNodeViewCardLayout\n case NODE_VIEW_TYPES.WORKLOAD:\n if ('kubernetes' === this.props.nodeData.cloudType) {\n return K8sWorkloadNodeViewCardLayout\n }\n return GenericNodeViewCardLayout\n default:\n return GenericNodeViewCardLayout\n }\n }\n\n render() {\n if (this.props.shouldReloadSwimlanes) {\n this.props.setShouldUpdateNodeSwimlanes(false)\n }\n const hasCRM = TYPES_WITH_CRM.includes(\n getTypeFromSrn(this.props.nodeId).toLowerCase()\n )\n\n if (\n this.props.detailsLoading ||\n (hasCRM && !exists(this.props.isMonitored))\n ) {\n return \n }\n\n if (_.isEmpty(this.props.nodeData)) {\n return \n }\n\n const Component = this.getNodeCardClass()\n\n const name = getNameForHelmet(this.props.nodeData)\n return (\n
    \n \n \n
    \n )\n }\n}\n\nNodeSolutionCenter.propTypes = {\n detailsLoading: PropTypes.bool,\n fetchTags: PropTypes.func,\n getData: PropTypes.func,\n horizontal: PropTypes.bool,\n //Used in the selectors!!\n //eslint-disable-next-line react/no-unused-prop-types\n location: PropTypes.shape({\n pathname: PropTypes.string,\n search: PropTypes.string,\n }),\n nodeId: PropTypes.string,\n nodeData: PropTypes.object,\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n queryNames: ImmutablePropTypes.iterable.isRequired,\n type: PropTypes.string,\n types: ImmutablePropTypes.map,\n tagOptions: ImmutablePropTypes.iterable.isRequired,\n isMonitored: PropTypes.bool,\n shouldReloadSwimlanes: PropTypes.bool,\n setShouldUpdateNodeSwimlanes: PropTypes.func.isRequired,\n policies: ImmutablePropTypes.iterable,\n fetchPolicies: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n data: selectData,\n detailsLoading: selectDetailsLoading,\n queryNames: selectQueryNames,\n types: selectQueryTypes,\n tagOptions: selectTagOptions,\n nodeId: selectNodeId,\n nodeData: selectNodeData,\n isMonitored: selectIsMonitored,\n shouldReloadSwimlanes: selectShouldUpdateNodeSwimlanes,\n policies: selectPolicies,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getData,\n fetchTags,\n fetchPolicies,\n setShouldUpdateNodeSwimlanes,\n getTicketCount,\n getCrmTickets,\n },\n dispatch\n )\n}\n\nconst withReducer = injectReducer({ key: 'nodeSolutionCenter', reducer })\n\nconst withSaga = injectSaga({\n key: 'nodeSolutionCenter',\n saga: sagas,\n mode: DAEMON,\n})\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, withSaga, withReducer)(NodeSolutionCenter)\n","export const ASSIGN_TICKET_ESCALTION_ERROR = `app/containers/CreateUpdateTicketModal/ASSIGN_TICKET_ESCALTION_ERROR`\n\nexport const FETCH_TICKET_TEMPLATES = `app/containers/CreateUpdateTicketModal/FETCH_TICKET_TEMPLATES`\nexport const FETCH_TICKET_TEMPLATES_ERROR = `app/containers/CreateUpdateTicketModal/FETCH_TICKET_TEMPLATES_ERROR`\nexport const FETCH_TICKET_TEMPLATES_SUCCESS = `app/containers/CreateUpdateTicketModal/FETCH_TICKET_TEMPLATES_SUCCESS`\n\nexport const FETCH_TICKET_TEMPLATE_FIELD_SELECT = `app/containers/CreateUpdateTicketModal/FETCH_TICKET_TEMPLATE_FIELD_SELECT`\nexport const FETCH_TICKET_TEMPLATE_FIELD_SELECT_ERROR = `app/containers/CreateUpdateTicketModal/FETCH_TICKET_TEMPLATE_FIELD_SELECT_ERROR`\nexport const FETCH_TICKET_TEMPLATE_FIELD_SELECT_SUCCESS = `app/containers/CreateUpdateTicketModal/FETCH_TICKET_TEMPLATE_FIELD_SELECT_SUCCESS`\n\nexport const SAVE_CUSTOM_TICKET = `app/containers/CreateUpdateTicketModal/SAVE_CUSTOM_TICKET`\nexport const SAVE_CUSTOM_TICKET_ERROR = `app/containers/CreateUpdateTicketModal/SAVE_CUSTOM_TICKET_ERROR`\nexport const SAVE_CUSTOM_TICKET_SUCCES = `app/containers/CreateUpdateTicketModal/SAVE_CUST_TICKET_SUCCES`\n\nexport const UPDATE_CUSTOM_TICKET = `app/containers/CreateUpdateTicketModal/UPDATE_CUSTOM_TICKET`\nexport const UPDATE_CUSTOM_TICKET_ERROR = `app/containers/CreateUpdateTicketModal/UPDATE_CUSTOM_TICKET_ERROR`\nexport const UPDATE_CUSTOM_TICKET_SUCCES = `app/containers/CreateUpdateTicketModal/UPDATE_CUSTOM_TICKET_SUCCES`\n\nexport const SET_TICKET_TYPE = `app/CreateUpdateTicketModal/SET_TICKET_TYPE`\nexport const SET_SELECTED_TICKET_TEMPLATE = `app/CreateUpdateTicketModal/SET_SELECTED_TICKET_TEMPLATE`\nexport const CLEAR_STATE = `app/CreateUpdateTicketModal/CLEAR_STATE`\nexport const SET_TICKET_TEMPLATE_FIELD_VALUE = `app/containers/CreateUpdateTicketModal/SET_TICKET_TEMPLATE_FIELD_VALUE`\n","import { handleActions } from 'redux-actions'\nimport { fromJS } from 'immutable'\nimport {\n ASSIGN_TICKET_ESCALTION_ERROR,\n FETCH_TICKET_TEMPLATES,\n FETCH_TICKET_TEMPLATES_ERROR,\n FETCH_TICKET_TEMPLATES_SUCCESS,\n FETCH_TICKET_TEMPLATE_FIELD_SELECT,\n FETCH_TICKET_TEMPLATE_FIELD_SELECT_ERROR,\n FETCH_TICKET_TEMPLATE_FIELD_SELECT_SUCCESS,\n SAVE_CUSTOM_TICKET,\n SAVE_CUSTOM_TICKET_ERROR,\n SAVE_CUSTOM_TICKET_SUCCES,\n UPDATE_CUSTOM_TICKET,\n UPDATE_CUSTOM_TICKET_ERROR,\n UPDATE_CUSTOM_TICKET_SUCCES,\n SET_TICKET_TYPE,\n SET_SELECTED_TICKET_TEMPLATE,\n CLEAR_STATE,\n SET_TICKET_TEMPLATE_FIELD_VALUE,\n} from './constants'\n\nexport const fieldSelectInitialState = fromJS({\n select: {\n loading: false,\n error: false,\n data: null,\n },\n value: null,\n})\n\nexport const initialState = fromJS({\n ticketType: null,\n selectedTicketTemplate: null,\n createTicketStatus: {\n loading: false,\n error: false,\n assignEscalationError: false,\n },\n ticketTemplates: {\n loading: false,\n error: false,\n data: null,\n },\n ticketTemplateFields: {},\n})\n\nfunction setFieldInitialStateIfUnset(state, field) {\n if (!state.getIn(['ticketTemplateFields', field.name])) {\n return state.setIn(\n ['ticketTemplateFields', field.name],\n fieldSelectInitialState\n )\n } else {\n return state\n }\n}\n\nconst createTicketModalReducer = handleActions(\n {\n [FETCH_TICKET_TEMPLATES]: state =>\n state\n .setIn(['ticketTemplates', 'loading'], true)\n .setIn(['ticketTemplates', 'error'], false),\n [FETCH_TICKET_TEMPLATES_ERROR]: state =>\n state\n .setIn(['ticketTemplates', 'loading'], false)\n .setIn(['ticketTemplates', 'error'], true),\n [FETCH_TICKET_TEMPLATES_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['ticketTemplates', 'loading'], false)\n .setIn(['ticketTemplates', 'error'], false)\n .setIn(['ticketTemplates', 'data'], fromJS(payload.data)),\n [SET_TICKET_TYPE]: (state, { payload }) => state.set('ticketType', payload),\n [SET_SELECTED_TICKET_TEMPLATE]: (state, { payload }) =>\n state.set('selectedTicketTemplate', payload),\n [CLEAR_STATE]: state =>\n initialState\n // we want to keep ticket templates otherwise we need to refech them\n .set('ticketTemplates', state.get('ticketTemplates')),\n\n [SET_TICKET_TEMPLATE_FIELD_VALUE]: (state, { payload: { field, value } }) =>\n setFieldInitialStateIfUnset(state, field).setIn(\n ['ticketTemplateFields', field.name, 'value'],\n value\n ),\n [FETCH_TICKET_TEMPLATE_FIELD_SELECT]: (state, { payload: { field } }) =>\n setFieldInitialStateIfUnset(state, field)\n .setIn(['ticketTemplateFields', field.name, 'select', 'loading'], true)\n .setIn(['ticketTemplateFields', field.name, 'select', 'error'], false),\n [FETCH_TICKET_TEMPLATE_FIELD_SELECT_ERROR]: (\n state,\n { payload: { field } }\n ) =>\n state\n .setIn(['ticketTemplateFields', field.name, 'select', 'loading'], false)\n .setIn(['ticketTemplateFields', field.name, 'select', 'error'], true),\n [FETCH_TICKET_TEMPLATE_FIELD_SELECT_SUCCESS]: (\n state,\n { payload: { field, data } }\n ) =>\n state\n .setIn(['ticketTemplateFields', field.name, 'select', 'loading'], false)\n .setIn(['ticketTemplateFields', field.name, 'select', 'error'], false)\n .setIn(\n ['ticketTemplateFields', field.name, 'select', 'data'],\n fromJS(data)\n ),\n [SAVE_CUSTOM_TICKET]: state =>\n state\n .setIn(['createTicketStatus', 'error'], false)\n .setIn(['createTicketStatus', 'assignEscalationError'], false)\n .setIn(['createTicketStatus', 'loading'], true),\n [SAVE_CUSTOM_TICKET_ERROR]: state =>\n state\n .setIn(['createTicketStatus', 'error'], true)\n .setIn(['createTicketStatus', 'loading'], false),\n [SAVE_CUSTOM_TICKET_SUCCES]: (state, { payload }) =>\n state\n .setIn(['createTicketStatus', 'error'], false)\n .setIn(['createTicketStatus', 'loading'], false)\n .setIn(['createTicketStatus', 'data'], fromJS(payload.data)),\n [UPDATE_CUSTOM_TICKET]: state =>\n state\n .setIn(['createTicketStatus', 'error'], false)\n .setIn(['createTicketStatus', 'assignEscalationError'], false)\n .setIn(['createTicketStatus', 'loading'], true),\n [UPDATE_CUSTOM_TICKET_ERROR]: state =>\n state\n .setIn(['createTicketStatus', 'error'], true)\n .setIn(['createTicketStatus', 'loading'], false),\n [UPDATE_CUSTOM_TICKET_SUCCES]: (state, { payload }) =>\n state\n .setIn(['createTicketStatus', 'error'], false)\n .setIn(['createTicketStatus', 'loading'], false)\n .setIn(['createTicketStatus', 'data'], fromJS(payload.data)),\n [ASSIGN_TICKET_ESCALTION_ERROR]: state =>\n state\n .setIn(['createTicketStatus', 'error'], true)\n .setIn(['createTicketStatus', 'assignEscalationError'], true),\n },\n initialState\n)\n\nexport default createTicketModalReducer\n","import { createAction } from 'redux-actions'\nimport {\n ASSIGN_TICKET_ESCALTION_ERROR,\n FETCH_TICKET_TEMPLATES,\n FETCH_TICKET_TEMPLATES_ERROR,\n FETCH_TICKET_TEMPLATES_SUCCESS,\n FETCH_TICKET_TEMPLATE_FIELD_SELECT,\n FETCH_TICKET_TEMPLATE_FIELD_SELECT_ERROR,\n FETCH_TICKET_TEMPLATE_FIELD_SELECT_SUCCESS,\n SAVE_CUSTOM_TICKET,\n SAVE_CUSTOM_TICKET_ERROR,\n SAVE_CUSTOM_TICKET_SUCCES,\n UPDATE_CUSTOM_TICKET,\n UPDATE_CUSTOM_TICKET_ERROR,\n UPDATE_CUSTOM_TICKET_SUCCES,\n SET_TICKET_TYPE,\n SET_SELECTED_TICKET_TEMPLATE,\n CLEAR_STATE,\n SET_TICKET_TEMPLATE_FIELD_VALUE,\n} from './constants'\n\nexport const assignTicketEscalationError = createAction(\n ASSIGN_TICKET_ESCALTION_ERROR\n)\n\nexport const fetchTicketTemplates = createAction(FETCH_TICKET_TEMPLATES)\nexport const fetchTicketTemplatesError = createAction(\n FETCH_TICKET_TEMPLATES_ERROR\n)\nexport const fetchTicketTemplatesSucces = createAction(\n FETCH_TICKET_TEMPLATES_SUCCESS\n)\n\nexport const fetchTicketTemplateFieldSelect = createAction(\n FETCH_TICKET_TEMPLATE_FIELD_SELECT\n)\nexport const fetchTicketTemplateFieldSelectError = createAction(\n FETCH_TICKET_TEMPLATE_FIELD_SELECT_ERROR\n)\nexport const fetchTicketTemplateFieldSelectSuccess = createAction(\n FETCH_TICKET_TEMPLATE_FIELD_SELECT_SUCCESS\n)\n\nexport const saveCustomTicket = createAction(SAVE_CUSTOM_TICKET)\nexport const saveCustomTicketError = createAction(SAVE_CUSTOM_TICKET_ERROR)\nexport const saveCustomTicketSucces = createAction(SAVE_CUSTOM_TICKET_SUCCES)\n\nexport const updateCustomTicket = createAction(UPDATE_CUSTOM_TICKET)\nexport const updateCustomTicketError = createAction(UPDATE_CUSTOM_TICKET_ERROR)\nexport const updateCustomTicketSuccess = createAction(\n UPDATE_CUSTOM_TICKET_SUCCES\n)\n\nexport const setTicketType = createAction(SET_TICKET_TYPE)\nexport const setSelectedTicketTemplate = createAction(\n SET_SELECTED_TICKET_TEMPLATE\n)\nexport const clearState = createAction(CLEAR_STATE)\n\nexport const setTicketTemplateFieldValue = createAction(\n SET_TICKET_TEMPLATE_FIELD_VALUE\n)\n","import gql from 'graphql-tag'\n\nexport const FETCH_TICKET_TEMPLATES_QUERY = gql`\n query fetchTicketTemplates {\n TicketTemplates {\n items(limit: 1000, orderBy: [{ title: { order: ASC } }]) {\n srn\n title\n description\n fields {\n name\n required\n type\n multi\n select {\n search\n path\n valueField\n labelFields\n }\n }\n __typename\n }\n }\n }\n`\n\nexport const ASSIGN_TICKET_ESCALATION_MUTATION = gql`\n mutation assignCustomTicketEscalationScheme(\n $escalationSchemeSrn: String\n $ticketSrn: String\n ) {\n CreateEscalationFilter(\n input: {\n schemeSrn: $escalationSchemeSrn\n ticketKey: $ticketSrn\n ticketType: \"Custom\"\n }\n ) {\n srn\n }\n }\n`\n\nexport const REMOVE_TICKET_ESCALTION_MUTATION = gql`\n mutation removeTicketEscalationAssignment($filterSrn: String) {\n DeleteEscalationFilter(input: { srn: $filterSrn }) {\n srn\n }\n }\n`\n\nexport const CREATE_TICKET_MUTATION = gql`\n mutation createTicket($ticket: CreateTicketRequestInput) {\n CreateTicket(input: $ticket) {\n srn\n }\n }\n`\n\nexport const UPDATE_TICKET_MUTATION = gql`\n mutation updateTicket($ticket: UpdateTicketInput) {\n UpdateTicket(input: $ticket) {\n srn\n }\n }\n`\n","import _ from 'lodash'\n\n/**\n * get the object containing the entities that would populate the objects\n *\n * @param {object} resultData response from gql query\n * @returns {object[]}\n */\nexport function getSelectOptionsObjects(result, field) {\n // if there's no data, no point in trying to get result\n if (!result.data) {\n return null\n }\n\n let path\n if (!field.select.path) {\n path = ['data', Object.keys(result.data)[0], 'items']\n } else {\n path = [...field.select.path]\n }\n\n return _.get(result, path, null)\n}\n\n/**\n * get the value that would go in an option in select\n */\nexport function getValue(item, field) {\n if (field.select.valueField) {\n return _.get(item, field.select.valueField)\n } else {\n return item.srn\n }\n}\n\n/**\n * get the label that would go in an option in select\n */\nexport function getLabel(item, field) {\n if (field.select.labelFields) {\n let label = field.select.labelFields.reduce((currentValue, nextKey) => {\n if (currentValue) {\n return currentValue\n }\n return item[nextKey]\n }, null)\n if (label) {\n return label\n }\n }\n return item.srn\n}\n","import { all, put, select, takeEvery, takeLatest } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport { List } from 'immutable'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\n\nimport {\n assignTicketEscalationError,\n fetchTicketTemplatesError,\n fetchTicketTemplatesSucces,\n fetchTicketTemplateFieldSelectError,\n fetchTicketTemplateFieldSelectSuccess,\n saveCustomTicketError,\n saveCustomTicketSucces,\n updateCustomTicketError,\n updateCustomTicketSuccess,\n} from './actions'\n\nimport {\n SAVE_CUSTOM_TICKET,\n FETCH_TICKET_TEMPLATES,\n FETCH_TICKET_TEMPLATE_FIELD_SELECT,\n UPDATE_CUSTOM_TICKET,\n} from './constants'\n\nimport {\n ASSIGN_TICKET_ESCALATION_MUTATION,\n REMOVE_TICKET_ESCALTION_MUTATION,\n FETCH_TICKET_TEMPLATES_QUERY,\n CREATE_TICKET_MUTATION,\n UPDATE_TICKET_MUTATION,\n} from './queries'\n\nimport { getEscalations } from 'containers/EscalationData/actions'\nimport { selectEscalations } from 'containers/EscalationData/selectors'\n\nimport { getSelectOptionsObjects } from './utils'\n\nfunction* fetchTicketTemplates() {\n try {\n const client = yield getClient()\n const result = yield client.query({ query: FETCH_TICKET_TEMPLATES_QUERY })\n const path = ['data', 'TicketTemplates', 'items']\n const data = _.get(result, path, null)\n if (data == null) {\n throw new Error(`no data at path ${path.join('/')}`)\n }\n yield put(fetchTicketTemplatesSucces({ data }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`an error happened fetching ticket templates`, e)\n yield put(fetchTicketTemplatesError())\n }\n}\n\nfunction* fetchTicketTemplateSelect({ payload: { field } }) {\n try {\n const client = yield getClient()\n const result = yield client.query({\n query: gql`\n ${field.select.search}\n `,\n })\n if (result.data === null) {\n throw new Error('no data')\n }\n const data = getSelectOptionsObjects(result, field)\n yield put(fetchTicketTemplateFieldSelectSuccess({ field, data }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\n `error happen fetching options field ${JSON.stringify(field)})`,\n e\n )\n yield put(fetchTicketTemplateFieldSelectError({ field }))\n }\n}\n\n/**\n * Assign the ticketto the escaltion scheme\n *\n * @param {String} ticket ticketSrn of ticket\n * @param {String} escalationSchemeSrn srn of escalation schema\n */\nfunction* assignTicketEscalationSchema({ escalationSchemeSrn, ticketSrn }) {\n try {\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: ASSIGN_TICKET_ESCALATION_MUTATION,\n variables: { escalationSchemeSrn, ticketSrn },\n })\n const path = ['data', 'CreateEscalationFilter', 'srn']\n const data = _.get(result, path, null)\n if (data === null) {\n throw new Error(`no data for path ${path.join('/')}`)\n }\n yield put(getEscalations())\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`an error occurred assigning escalation to ticket`, e)\n yield put(assignTicketEscalationError())\n }\n}\n\n/**\n * remove the ticket from the escalation schema\n *\n * @param {String} ticket ticketSrn of ticket\n * @param {Immutable.Map} escalationScheme escalation scheme ticket is assigned to\n */\nfunction* removeCurrentEscalation({ escalationScheme, ticketSrn }) {\n const currentFilter = escalationScheme.get('filters').find(filter => {\n return filter.get('ticketKey') === ticketSrn\n })\n if (!currentFilter) {\n // eslint-disable-next-line no-console\n console.warn(\n `cannot remove escalationScheme from ticket ${ticketSrn}`,\n escalationScheme\n )\n return\n }\n\n try {\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: REMOVE_TICKET_ESCALTION_MUTATION,\n variables: { filterSrn: currentFilter.get('srn') },\n })\n const path = ['data', 'DeleteEscalationFilter', 'srn']\n const data = _.get(result, path, null)\n if (data === null) {\n throw new Error(`no result at path ${path.join('/')}`)\n }\n yield put(getEscalations())\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`an error occurred removing escalation to ticket`, e)\n yield put(assignTicketEscalationError())\n }\n}\n\nfunction* saveCustomTicket({ payload }) {\n try {\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: CREATE_TICKET_MUTATION,\n variables: { ticket: payload.ticket },\n })\n const path = ['data', 'CreateTicket']\n const newTicket = _.get(result, path, null)\n if (newTicket === null) {\n throw new Error(`no data for path ${path}`)\n }\n\n if (payload.escalationSchemeSrn) {\n yield assignTicketEscalationSchema({\n escalationSchemeSrn: payload.escalationSchemeSrn,\n ticketSrn: newTicket.srn,\n })\n }\n yield put(saveCustomTicketSucces({ data: newTicket }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happen saving custom ticket: ', e)\n yield put(saveCustomTicketError())\n }\n}\n\nfunction* updateCustomTicket({ payload }) {\n try {\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: UPDATE_TICKET_MUTATION,\n variables: { ticket: payload.ticket },\n })\n const path = ['data', 'UpdateTicket']\n const data = _.get(result, path, null)\n if (data === null) {\n throw new Error(`no data for path ${path}`)\n }\n\n // find currently assigned escalation\n let currentEscalation = undefined\n const escalations = yield select(selectEscalations)\n if (!escalations.isEmpty()) {\n // find previously assigned escalation\n currentEscalation = escalations.valueSeq().find(escalation => {\n return (\n undefined !==\n (escalation.get('filters') ?? List()).find(filter => {\n return filter.get('ticketKey') === payload.ticket.ticketSrn\n })\n )\n })\n }\n\n if (payload.escalationSchemeSrn) {\n let alreadyAssigned = false // is ticket already assigned to scheme\n if (currentEscalation) {\n if (currentEscalation.get('srn') !== payload.escalationSchemeSrn) {\n // we're assigned to a different escalation, so remove assignment\n yield removeCurrentEscalation({\n escalationScheme: currentEscalation,\n ticketSrn: payload.ticket.ticketSrn,\n })\n } else {\n // already assigned to this escalation, no need to reassign\n alreadyAssigned = true\n }\n }\n if (!alreadyAssigned) {\n // assign an escaltion scheme to the ticket\n yield assignTicketEscalationSchema({\n escalationSchemeSrn: payload.escalationSchemeSrn,\n ticketSrn: payload.ticket.ticketSrn,\n })\n }\n }\n // handle no escalation assginment:\n else {\n if (currentEscalation) {\n // remove current escalation\n yield removeCurrentEscalation({\n escalationScheme: currentEscalation,\n ticketSrn: payload.ticket.ticketSrn,\n })\n }\n }\n yield put(updateCustomTicketSuccess({ data }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happen saving custom ticket: ', e)\n yield put(updateCustomTicketError())\n }\n}\n\nexport default function* sagas() {\n yield all([\n takeLatest(SAVE_CUSTOM_TICKET, saveCustomTicket),\n takeLatest(FETCH_TICKET_TEMPLATES, fetchTicketTemplates),\n takeEvery(FETCH_TICKET_TEMPLATE_FIELD_SELECT, fetchTicketTemplateSelect),\n takeLatest(UPDATE_CUSTOM_TICKET, updateCustomTicket),\n ])\n}\n","import { createSelector } from 'reselect'\nimport { initialState } from './reducers'\n\nconst selectCreateUpdateTicketModalDomain = state =>\n state.get('createTicketModal') || initialState\n\nexport const selectTicketType = createSelector(\n selectCreateUpdateTicketModalDomain,\n state => state.get('ticketType')\n)\n\nexport const selectSelectedTicketTemplate = createSelector(\n selectCreateUpdateTicketModalDomain,\n state => state.get('selectedTicketTemplate')\n)\n\nexport const selectTicketTemplates = createSelector(\n selectCreateUpdateTicketModalDomain,\n state => state.get('ticketTemplates')\n)\n\nexport const selectTicketTemplateFields = createSelector(\n selectCreateUpdateTicketModalDomain,\n state => state.get('ticketTemplateFields')\n)\n\nexport const selectCreateTicketStatus = createSelector(\n selectCreateUpdateTicketModalDomain,\n state => state.get('createTicketStatus')\n)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n assignEscalationError: {\n id: 'app.containers.CreateUpdateTicketModal.createError',\n defaultMessage: 'There was an assigning ticket escalations.',\n },\n createError: {\n id: 'app.containers.CreateUpdateTicketModal.createError',\n defaultMessage: 'There was an error saving the ticket',\n },\n 'error.required': {\n id: 'app.containers.CreateUpdateTicketModal.error.required',\n defaultMessage: \"The field '{field}' is required\",\n },\n invalidTemplate: {\n id: 'app.containers.CreateUpdateTicketModal.invalidTemplate',\n defaultMessage: 'Selected Template is Invalid.',\n },\n validationErrors: {\n id: 'app.containers.CreateUpdateTicketModal.validationErrors',\n defaultMessage: 'There are some form validation errors.',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport styled from 'styled-components'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\n\nimport messages from '../messages'\n\nconst StyledErrorContainer = styled.div`\n color: red;\n`\n\n/**\n * this component is to show error message on CreateUpdateTicketModal\n */\nexport default function FormErrorMessage(props) {\n if (!props.error) {\n return null\n }\n\n return (\n \n \n \n )\n}\n\nFormErrorMessage.propTypes = {\n error: PropTypes.shape({\n key: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Input } from 'reactstrap'\nimport { Map, List } from 'immutable'\nimport _ from 'lodash'\nimport Select from 'react-select'\n\nimport permissionChecker from 'containers/PermissionChecker'\nimport CloudAccount from 'components/CloudAccount'\nimport FormLabel from 'components/FormLabel'\nimport MarkdownEditor from 'components/MarkdownEditor'\nimport TextLink from 'components/TextLink'\nimport UserWidget from 'components/UserWidget'\nimport FormErrorMessage from './components/FormErrorMessage'\n\nfunction getEscalationOptions(props) {\n const selected = (props.selectedSwimlanes || []).map(item => item.value)\n const options = props.escalations\n .filter(escalation => {\n const assignmentSRNs = (\n escalation.get('assignments') || List()\n ).map(item => item.get('swimlaneSRN'))\n return !!assignmentSRNs.find(srn => selected.includes(srn))\n })\n .toList()\n .toJS()\n .map(item => ({ label: item.title || item.srn, value: item.srn }))\n return _.sortBy(options, option => (option.label ?? '').toLowerCase())\n}\n\nexport function DefaultFields(props) {\n const styles = {\n assignToContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n margin: '0.5rem 0rem 0rem 0rem',\n },\n }\n\n return (\n
    \n
    \n \n Title\n \n props.handleTitleChange(value)}\n />\n {props.formErrors.title && (\n \n )}\n
    \n
    \n Description\n props.handleDescriptionChange(value)}\n value={props.description}\n />\n
    \n
    \n Swimlanes\n \n props.userHasPermission({\n permissionName: 'edit.tickets',\n swimlanes: [swimlane.srn],\n })\n )\n .map(swimlane => ({\n label: swimlane.title || swimlane.srn,\n value: swimlane.srn,\n })),\n option => (option.label ?? '').toLowerCase()\n )}\n value={\n props.selectedSwimlanes &&\n !_.isEmpty(props.selectedSwimlanes) &&\n props.selectedSwimlanes\n }\n onChange={props.handleSwimlaneChange}\n isMulti\n isDisabled={!!props.resource}\n />\n {props.formErrors.swimlanes && (\n \n )}\n
    \n {!props.resource && (\n
    \n Account\n ({\n label:\n account.get('friendlyName') ||\n account.get('name') ||\n account.get('account'),\n value: account.get('srn'),\n }))\n .toJS(),\n option => (option.label ?? '').toLowerCase()\n )}\n value={props.account}\n formatOptionLabel={option => {\n return \n }}\n />\n {props.formErrors.account && (\n \n )}\n
    \n )}\n
    \n Severity\n \n {props.formErrors.severity && (\n \n )}\n
    \n
    \n
    \n Assign To\n \n {' '}\n Assign to me{' '}\n \n
    \n ({ label: item.name || item.srn, value: item.srn })),\n option => (option.label ?? '').toLowerCase()\n )}\n value={props.assignedTo}\n formatOptionLabel={option => (\n \n )}\n onChange={props.handleAssignedToChange}\n />\n
    \n
    \n Escalation Scheme\n \n
    \n {props.resource && (\n
    \n Resource\n \n
    \n )}\n
    \n )\n}\n\nDefaultFields.propTypes = {\n account: PropTypes.object,\n accounts: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n srn: PropTypes.string.isRequired,\n account: PropTypes.string.isRequired,\n })\n ),\n handleAccountChange: PropTypes.func.isRequired,\n formErrors: PropTypes.object,\n resource: PropTypes.object,\n escalationsLoading: PropTypes.bool,\n escalation: PropTypes.object,\n handleEscalationChange: PropTypes.func.isRequired,\n handleAssignedToChange: PropTypes.func.isRequired,\n assignedTo: PropTypes.object,\n users: ImmutablePropTypes.iterable.isRequired,\n selectedSwimlanes: PropTypes.array,\n currentUser: PropTypes.string,\n handleSelfAssign: PropTypes.func.isRequired,\n handleSeverityChange: PropTypes.func.isRequired,\n severity: PropTypes.object,\n handleSwimlaneChange: PropTypes.func.isRequired,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n handleDescriptionChange: PropTypes.func.isRequired,\n description: PropTypes.string,\n title: PropTypes.string,\n handleTitleChange: PropTypes.func.isRequired,\n userHasPermission: PropTypes.func.isRequired,\n}\n\nexport default permissionChecker(DefaultFields)\n","import React, { useEffect, useState } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\n\nimport Checkbox from 'components/Checkbox'\n\nexport default function TemplateFieldCheckbox(props) {\n const [isChecked, setIsChecked] = useState(false)\n useEffect(() => {\n if (!props.fieldState) {\n return\n }\n const value = props.fieldState.get('value')\n\n // if the field is required make sure the value is explicitly set false\n if (props.fieldDefinition.required) {\n props.setTicketTemplateFieldValue({\n value: value ?? false,\n field: props.fieldDefinition,\n })\n }\n }, [])\n\n // try to set the value from the property\n useEffect(() => {\n if (!props.fieldState) {\n return\n }\n const value = props.fieldState.get('value')\n\n // is this a dumb way to check this? I don't even know anymore\n if (value === 'false' || value === false) {\n setIsChecked(false)\n }\n if (value === 'true' || value === true) {\n setIsChecked(true)\n }\n }, [props.fieldState])\n\n return (\n {\n props.setTicketTemplateFieldValue({\n value: !isChecked,\n field: props.fieldDefinition,\n })\n }}\n />\n )\n}\n\nTemplateFieldCheckbox.propTypes = {\n setTicketTemplateFieldValue: PropTypes.func.isRequired,\n fieldDefinition: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n required: PropTypes.bool,\n type: PropTypes.string.isRequired,\n select: PropTypes.shape({\n labelFields: PropTypes.arrayOf(PropTypes.string),\n valueField: PropTypes.string,\n search: PropTypes.string,\n path: PropTypes.arrayOf(PropTypes.string),\n }),\n })\n ),\n fieldState: ImmutablePropTypes.contains({\n value: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n select: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.listOf(PropTypes.map),\n }),\n }),\n}\n","import React, { useEffect, useState } from 'react'\nimport _ from 'lodash'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { List } from 'immutable'\nimport Select from 'react-select'\n\nimport { getLabel, getValue } from '../utils'\n\n/**\n * get text for the placeholder in the select\n */\nfunction getPlaceholdertext(props) {\n if (props.fieldState.getIn(['select', 'loading'])) {\n return 'Loading ...'\n }\n if (props.fieldState.getIn(['select', 'error'])) {\n return 'Error loading values'\n }\n return `Select ${props.fieldDefinition.name}...`\n}\n\n/**\n * get the options we'll pass to the select\n */\nfunction getOptions(props) {\n const data = props.fieldState.getIn(['select', 'data']) ?? List()\n const options = data.toJS().map(item => ({\n label: getLabel(item, props.fieldDefinition),\n value: getValue(item, props.fieldDefinition),\n }))\n return _.sortBy(options, ['label', 'value'])\n}\n\nexport default function TemplatefieldSelect(props) {\n const options = getOptions(props)\n const [selectedValue, setSelectedValue] = useState()\n\n useEffect(() => {\n // fetch values that will populate select options\n props.fetchTicketTemplateFieldSelect({\n field: props.fieldDefinition,\n })\n }, [])\n\n useEffect(() => {\n if (!props.fieldState) {\n return\n }\n const value = props.fieldState.get('value')\n\n // if no value selected, just set to null or whatever\n if (!value) {\n setSelectedValue(value)\n }\n // if it's multi, need to choose an option for each selected thing\n else if (props.fieldDefinition.multi) {\n try {\n // for multi, is serizalied json\n let optionValues = JSON.parse(value)\n const selectedOptions = options.filter(opt =>\n optionValues.includes(opt.value)\n )\n setSelectedValue(selectedOptions)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(`Illegal value aws set ${value}`)\n setSelectedValue(value)\n }\n }\n // otherwise find the selected option\n else {\n const selectedOption = options.filter(opt => value === opt.value)\n setSelectedValue(selectedOption)\n }\n }, [props.fieldState])\n\n return (\n {\n let value\n if (props.fieldDefinition.multi) {\n // if it's multiselect, make a stringified JSON array of the values\n if (val != null) {\n value = JSON.stringify(val.map(({ value }) => value))\n } else {\n value = null // unelss they unselected everything in the JSON array\n }\n } else {\n // for normal single valued select, just take value\n value = val.value\n }\n props.setTicketTemplateFieldValue({\n field: props.fieldDefinition,\n value,\n })\n }}\n isMulti={props.fieldDefinition.multi}\n value={selectedValue}\n options={options}\n isDisabled={\n props.fieldState.getIn(['select', 'loading']) ||\n props.fieldState.getIn(['select', 'error'])\n }\n />\n )\n}\n\nTemplatefieldSelect.propTypes = {\n fetchTicketTemplateFieldSelect: PropTypes.func.isRequired,\n setTicketTemplateFieldValue: PropTypes.func.isRequired,\n fieldDefinition: PropTypes.shape({\n name: PropTypes.string.isRequired,\n required: PropTypes.bool,\n multi: PropTypes.bool,\n type: PropTypes.string.isRequired,\n select: PropTypes.shape({\n labelFields: PropTypes.arrayOf(PropTypes.string),\n valueField: PropTypes.string,\n search: PropTypes.string,\n path: PropTypes.arrayOf(PropTypes.string),\n }),\n }),\n fieldState: ImmutablePropTypes.contains({\n value: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n select: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.listOf(PropTypes.map),\n }),\n }),\n}\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Map } from 'immutable'\n\nimport { Input } from 'reactstrap'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TemplateFieldCheckbox from './TemplateFieldCheckbox'\nimport TemplateFieldSelect from './TemplateFieldSelect'\n\nimport messages from '../messages'\n\nexport default function TemplateField(props) {\n switch (props.fieldDefinition.type) {\n case 'text':\n return (\n {\n props.setTicketTemplateFieldValue({\n value: event.target.value,\n field: props.fieldDefinition,\n })\n }}\n />\n )\n case 'select':\n return \n case 'checkbox':\n return \n default:\n return (\n
    \n \n
    \n )\n }\n}\n\nTemplateField.propTypes = {\n fetchTicketTemplateFieldSelect: PropTypes.func.isRequired,\n setTicketTemplateFieldValue: PropTypes.func.isRequired,\n fieldDefinition: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n required: PropTypes.bool,\n type: PropTypes.string.isRequired,\n select: PropTypes.shape({\n labelFields: PropTypes.arrayOf(PropTypes.string),\n valueField: PropTypes.string,\n search: PropTypes.string,\n path: PropTypes.arrayOf(PropTypes.string),\n }),\n })\n ),\n fieldState: ImmutablePropTypes.contains({\n value: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n select: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.listOf(PropTypes.map),\n }),\n }),\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport FormLabel from 'components/FormLabel'\nimport FormErrorMessage from './FormErrorMessage'\nimport TemplateField from './TemplateField'\n\nimport { fieldSelectInitialState } from '../reducers'\nimport messages from '../messages'\n\nexport default function TemplateFields(props) {\n const fields = props.selectedTicketTemplate.fields\n\n // if there are no fields defined, display error message\n if (!fields) {\n return (\n
    \n \n
    \n )\n }\n\n // render an input for each field from template\n return fields.map((field, i) => {\n // don't show the required star for checkboxes that are required cause\n // it might look like something the user has to click like the \"I agree\"\n // checkbox on some installers.\n const required = field.type != 'checkbox' && field.required\n\n return (\n
    \n
    \n \n {field.name}\n \n \n {props.formErrors[field.name] && (\n \n )}\n
    \n )\n })\n}\n\nTemplateFields.propTypes = {\n fetchTicketTemplateFieldSelect: PropTypes.func.isRequired,\n setTicketTemplateFieldValue: PropTypes.func.isRequired,\n ticketTemplateFields: ImmutablePropTypes.map,\n selectedTicketTemplate: PropTypes.shape({\n fields: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n required: PropTypes.bool,\n type: PropTypes.string.isRequired,\n select: PropTypes.shape({\n labelFields: PropTypes.arrayOf(PropTypes.string),\n valueField: PropTypes.string,\n search: PropTypes.string,\n path: PropTypes.arrayOf(PropTypes.string),\n }),\n })\n ),\n }),\n}\n","import React from 'react'\n\nimport DefaultFields from './DefaultFields'\nimport TemplateFields from './components/TemplateFields'\n\nexport default function TicketTemplateForm(props) {\n return (\n
    \n \n \n
    \n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport _ from 'lodash'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport qs from 'querystring'\nimport { push } from 'connected-react-router'\nimport { selectEscalations } from 'containers/EscalationData/selectors'\nimport { getEscalations } from 'containers/EscalationData/actions'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport injectReducer from 'utils/injectReducer'\nimport {\n selectSonraiUsers,\n selectSwimlanes,\n} from 'containers/SonraiData/selectors'\nimport { selectSonraiUserSrn } from 'containers/UserProfileData/selectors'\nimport { List, Map } from 'immutable'\nimport injectSaga from 'utils/injectSaga'\nimport { DAEMON } from 'utils/constants'\nimport reducer, { fieldSelectInitialState } from './reducers'\nimport sagas from './sagas'\n\nimport { fetchTicketDetails } from 'containers/TicketDetailsData/actions'\nimport {\n fetchTicketTemplates,\n setTicketType,\n setSelectedTicketTemplate,\n clearState,\n fetchTicketTemplateFieldSelect,\n setTicketTemplateFieldValue,\n saveCustomTicket,\n updateCustomTicket,\n} from './actions'\n\nimport { selectAccounts } from 'containers/SonraiData/selectors'\nimport {\n selectTicketType,\n selectSelectedTicketTemplate,\n selectTicketTemplates,\n selectTicketTemplateFields,\n selectCreateTicketStatus,\n} from './selectors'\n\nimport Select from 'react-select'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport permissionChecker from 'containers/PermissionChecker'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport DefaultFields from './DefaultFields'\nimport TicketTemplateForm from './TicketTemplateForm'\n\nimport messages from './messages'\n\nfunction SelectTicketType(props) {\n const ticketTemplates = (props.ticketTemplates.get('data') ?? List())\n .toJS()\n .map(ticketTemplate => {\n return {\n value: ticketTemplate,\n label: ticketTemplate.title,\n }\n })\n const styles = {\n container: {\n display: 'grid',\n gridTemplateRows: '1fr 1fr',\n },\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n margin: '0rem 0rem 0.5rem 0rem',\n },\n }\n return (\n
    \n
    \n \n Manage Ticket Templates\n \n handleTicketType(props, 'CUSTOM')}\n >\n {' '}\n No Template{' '}\n \n
    \n \n
    \n )\n}\n\nSelectTicketType.propTypes = {\n handleTicketTemplateChange: PropTypes.func.isRequired,\n ticketTemplate: PropTypes.object,\n ticketTemplates: ImmutablePropTypes.contains({\n error: PropTypes.bool,\n loading: PropTypes.bool,\n data: ImmutablePropTypes.iterable,\n }),\n}\n\nfunction handleTicketType(props, type, template) {\n if (template) {\n props.setSelectedTicketTemplate(template.value)\n }\n props.setTicketType(type)\n}\n\nfunction TicketBody(props) {\n switch (props.ticketType) {\n case 'CUSTOM':\n return \n case 'TEMPLATE':\n return \n default:\n return \n }\n}\n\nTicketBody.propTypes = {\n ticketType: PropTypes.string,\n}\n\nfunction getModalTitle(props) {\n const update = isUpdateMode(props)\n if (!update && props.resource) {\n const {\n resource: { name, friendlyName, srn },\n } = props\n const display = friendlyName || name || srn\n return `Open a ticket for ${display}`\n }\n return update ? 'Edit Ticket' : 'Create Ticket'\n}\n\nfunction isUpdateMode(props) {\n return props.ticket !== undefined\n}\n\nfunction handleSelfAssign(props, assign) {\n const self = {\n label: props.users.getIn([props.currentUser, 'name']),\n value: props.currentUser,\n }\n assign(self)\n}\n\nfunction getInitialSwimlaneState(props) {\n if (props.resource) {\n const { swimlanes } = props\n return (props.resource.swimlaneSRNs ?? [])\n .filter(swimlaneSRN => {\n return props.userHasPermission({\n permissionName: 'edit.tickets',\n swimlanes: [swimlaneSRN],\n })\n })\n .map(item => {\n const swimlane =\n swimlanes.find(swimlane => swimlane.get('srn') === item) || Map()\n return {\n label: swimlane.get('title') || swimlane.get('srn'),\n value: swimlane.get('srn'),\n }\n })\n } else {\n return null\n }\n}\nexport function CreateUpdateTicketModal(props) {\n const styles = {\n title: {\n fontWeight: '400',\n fontSize: '1.1rem',\n maxWidth: '50vw',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }\n const update = isUpdateMode(props)\n const modalTitle = getModalTitle(props)\n\n // selectTicketType\n const [ticketTemplate, handleTicketTemplateChange] = useState()\n\n // default fields\n const [title, handleTitleChange] = useState()\n const [description, handleDescriptionChange] = useState()\n const [selectedSwimlanes, handleSwimlaneChange] = useState(\n getInitialSwimlaneState(props)\n )\n const [severity, handleSeverityChange] = useState()\n const [assignedTo, handleAssignedToChange] = useState()\n const [escalation, handleEscalationChange] = useState()\n const [account, handleAccountChange] = useState()\n\n const [formErrors, setFormErrors] = useState({})\n\n function cleanup() {\n props.clearState()\n // reset initial form state\n handleTitleChange(undefined)\n handleDescriptionChange(undefined)\n handleSwimlaneChange(getInitialSwimlaneState(props))\n handleSeverityChange(undefined)\n handleAssignedToChange(undefined)\n handleEscalationChange(undefined)\n setFormErrors({})\n handleTicketType(props, null)\n }\n\n function handleClose(props) {\n props.toggle()\n cleanup()\n }\n\n useEffect(() => {\n if (props.escalations.isEmpty()) {\n props.getEscalations()\n }\n props.fetchTicketTemplates()\n }, [])\n\n // this hook sets all the default form values if in update mode\n useEffect(() => {\n // if it has props.ticket, assume we're updating an existing ticket\n if (props.ticket) {\n handleTitleChange(props.ticket.title)\n handleDescriptionChange(props.ticket.description)\n handleSwimlaneChange(\n (props.ticket.swimlaneSRNs ?? []).map(swimlaneSRN => {\n const { swimlanes } = props\n const swimlane =\n swimlanes.find(swimlane => swimlane.get('srn') === swimlaneSRN) ||\n Map()\n return {\n label: swimlane.get('title') || swimlane.get('srn'),\n value: swimlane.get('srn'),\n }\n })\n )\n handleSeverityChange({\n label: _.capitalize(\n (props.ticket.severityCategory ?? '').toLowerCase()\n ),\n value: props.ticket.severityCategory,\n })\n if (props.ticket.assignedTo) {\n handleAssignedToChange({\n value: props.ticket.assignedTo,\n })\n }\n\n if (!props.escalations.isEmpty()) {\n const escalationScheme = props.escalations\n .valueSeq()\n .find(escalation => {\n return (\n undefined !==\n (escalation.get('filters') ?? List()).find(filter => {\n return filter.get('ticketKey') === props.ticket.srn\n })\n )\n })\n if (escalationScheme !== undefined) {\n handleEscalationChange({\n label: escalationScheme.get('title'),\n value: escalationScheme.get('srn'),\n })\n }\n }\n\n for (let field of props.ticket.customFields ?? []) {\n let value = field.value\n if (field.type === 'CHECKBOX') {\n if (value === 'true') value = true\n if (value === 'fase') value = false\n }\n props.setTicketTemplateFieldValue({ field, value })\n }\n\n if (!props.accounts.isEmpty()) {\n const account = props.accounts.find(account => {\n return account.get('srn') === props.ticket.account\n })\n if (account) {\n if (account) {\n handleAccountChange({\n label:\n account.get('friendlyName') ||\n account.get('name') ||\n account.get('account'),\n value: account.get('srn'),\n })\n }\n } else {\n // eslint-disable-next-line\n console.warn('could not set account for ticket');\n }\n }\n }\n return () => {\n cleanup()\n }\n }, [props.isOpen, props.accounts, props.escalations])\n\n // this hook sets the ticket template if in update mode\n useEffect(() => {\n if (\n props.selectedTicketTemplate === null &&\n props.ticket &&\n props.ticketTemplates.get('data')\n ) {\n if (props.ticket.templateSRN) {\n const selectedTemplate = props.ticketTemplates\n .get('data')\n .find(template => template.get('srn') === props.ticket.templateSRN)\n if (selectedTemplate) {\n props.setSelectedTicketTemplate(selectedTemplate.toJS())\n }\n handleTicketType(props, 'TEMPLATE')\n } else {\n handleTicketType(props, 'CUSTOM')\n }\n }\n }, [props.ticketTemplates, props.isOpen])\n\n // this function handle when the user click save\n const onClickCreate = () => {\n const formErrors = {}\n\n // validate required default fields\n if (!title) {\n formErrors['title'] = {\n key: 'error.required',\n values: { field: 'Title' },\n }\n }\n if (!selectedSwimlanes) {\n formErrors['swimlanes'] = {\n key: 'error.required',\n values: { field: 'Swimlanes' },\n }\n }\n if (!severity) {\n formErrors['severity'] = {\n key: 'error.required',\n values: { field: 'Severity' },\n }\n }\n\n if (!props.resource) {\n if (!account) {\n formErrors['account'] = {\n key: 'error.required',\n values: { field: 'Account' },\n }\n }\n }\n\n // validate template fields\n if (props.selectedTicketTemplate !== null) {\n ;(props.selectedTicketTemplate.fields || [])\n .filter(field => field.required)\n .forEach(field => {\n const value = (\n props.ticketTemplateFields.get(field.name) ||\n fieldSelectInitialState\n ).get('value')\n switch (field.type) {\n case 'checkbox':\n if (true !== value && false !== value) {\n formErrors[field.name] = {\n key: 'error.required',\n values: { field: field.name },\n }\n }\n break\n case 'text':\n case 'select':\n if (_.isEmpty(value) || _.isNull(value) || _.isUndefined(value)) {\n formErrors[field.name] = {\n key: 'error.required',\n values: { field: field.name },\n }\n }\n }\n })\n }\n\n setFormErrors(formErrors)\n\n // reduce field definitions + values to format expected in action paylaod\n const customFields = (\n (props.selectedTicketTemplate || {}).fields || []\n ).reduce((customFields, fieldDefinition) => {\n let value = (\n props.ticketTemplateFields.get(fieldDefinition.name) ||\n fieldSelectInitialState\n ).get('value')\n\n // the graphql endpoint expects a string\n if (_.isBoolean(value)) {\n value = `${value}`\n }\n\n const customField = {\n value,\n type: fieldDefinition.type.toUpperCase(),\n isMulti: fieldDefinition.multi,\n name: fieldDefinition.name,\n isRequired: fieldDefinition.required,\n }\n return [...customFields, customField]\n }, [])\n\n if (Object.keys(formErrors).length === 0) {\n if (update) {\n props.updateCustomTicket({\n // change dropdown options to their values:\n escalationSchemeSrn: (escalation ?? {}).value,\n ticket: {\n title,\n ticketSrn: props.ticket.srn,\n description,\n assignedTo: (assignedTo ?? {}).value,\n severityCategory: (severity ?? {}).value,\n account: (account ?? {}).value,\n swimlaneSRNs: (selectedSwimlanes ?? []).map(({ value }) => value),\n customFields,\n },\n })\n } else {\n props.saveCustomTicket({\n escalationSchemeSrn: (escalation ?? {}).value,\n ticket: {\n title,\n description,\n resourceSRN: (props.resource ?? {}).srn,\n assignedTo: (assignedTo ?? {}).value,\n severityCategory: (severity ?? {}).value,\n account: (account ?? {}).value,\n swimlaneSRNs: (selectedSwimlanes ?? []).map(({ value }) => value),\n templateSRN: (props.selectedTicketTemplate ?? {}).srn,\n customFields,\n },\n })\n }\n }\n }\n\n // This is the code that will redirect to ticket details the modal after the\n // user saves if there are no errors.\n const prevMutateStatusRef = useRef()\n useEffect(() => {\n if (prevMutateStatusRef.current) {\n const wasLoading = prevMutateStatusRef.current.get('loading')\n const isLoading = props.createTicketStatus.get('loading')\n const justFinishedLoading = wasLoading && !isLoading\n if (\n justFinishedLoading &&\n !props.createTicketStatus.get('errors') &&\n !props.createTicketStatus.get('error')\n ) {\n if (update) {\n props.fetchTicketDetails({ srn: props.ticket.srn })\n handleClose(props)\n } else {\n props.push({\n pathname: '/App/TicketDetails',\n search: qs.stringify({\n srn: props.createTicketStatus.getIn(['data', 'srn']),\n }),\n })\n handleClose(props)\n }\n }\n }\n prevMutateStatusRef.current = props.createTicketStatus\n }, [props.createTicketStatus])\n\n return (\n \n handleClose(props)}>\n
    \n {modalTitle}\n
    \n
    \n \n \n handleSelfAssign(props, handleAssignedToChange)\n }\n handleAssignedToChange={handleAssignedToChange}\n escalation={escalation}\n handleEscalationChange={handleEscalationChange}\n account={account}\n handleAccountChange={handleAccountChange}\n fetchTicketTemplateFieldSelect={props.fetchTicketTemplateFieldSelect}\n setTicketTemplateFieldValue={props.setTicketTemplateFieldValue}\n ticketTemplateFields={props.ticketTemplateFields}\n />\n \n \n {Object.keys(formErrors).length > 0 && (\n \n \n \n )}\n {props.createTicketStatus.get('error') > 0 && (\n \n \n \n )}\n {props.createTicketStatus.get('assignEscalationError') && (\n \n \n \n )}\n handleClose(props)}\n style={{ margin: '0rem 0.5rem 0rem 0rem' }}\n >\n Cancel\n \n {!props.ticketType && (\n handleTicketType(props, 'TEMPLATE', ticketTemplate)}\n >\n Continue\n \n )}\n {props.ticketType && (\n \n {update ? 'Save' : 'Create'}\n {props.createTicketStatus.get('loading') && (\n \n )}\n \n )}\n \n
    \n )\n}\n\nCreateUpdateTicketModal.propTypes = {\n //from parent\n isOpen: PropTypes.bool.isRequired,\n toggle: PropTypes.func.isRequired,\n resource: PropTypes.object,\n ticket: PropTypes.shape({\n account: PropTypes.string,\n assignedTo: PropTypes.string,\n customFields: PropTypes.arrayOf(PropTypes.object),\n description: PropTypes.string,\n srn: PropTypes.string.isRequired,\n severityCategory: PropTypes.string.isRequired,\n swimlaneSRNs: PropTypes.arrayOf(PropTypes.string),\n templateSRN: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n }),\n\n //actions\n push: PropTypes.func.isRequired,\n fetchTicketDetails: PropTypes.func.isRequired,\n fetchTicketTemplates: PropTypes.func.isRequired,\n getEscalations: PropTypes.func.isRequired,\n setTicketType: PropTypes.func.isRequired,\n setSelectedTicketTemplate: PropTypes.func.isRequired,\n clearState: PropTypes.func.isRequired,\n fetchTicketTemplateFieldSelect: PropTypes.func.isRequired,\n setTicketTemplateFieldValue: PropTypes.func.isRequired,\n saveCustomTicket: PropTypes.func.isRequired,\n updateCustomTicket: PropTypes.func.isRequired,\n\n //redux\n accounts: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n srn: PropTypes.string.isRequired,\n account: PropTypes.string.isRequired,\n })\n ),\n createTicketStatus: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.contains({ srn: PropTypes.string }),\n }),\n escalations: ImmutablePropTypes.iterable.isRequired,\n ticketType: PropTypes.string,\n selectedTicketTemplate: PropTypes.string,\n ticketTemplateFields: ImmutablePropTypes.map,\n ticketTemplates: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n swimlanes: ImmutablePropTypes.iterable,\n}\n\nconst mapStateToProps = createStructuredSelector({\n accounts: selectAccounts,\n createTicketStatus: selectCreateTicketStatus,\n swimlanes: selectSwimlanes,\n currentUser: selectSonraiUserSrn,\n users: selectSonraiUsers,\n escalations: selectEscalations,\n selectedTicketTemplate: selectSelectedTicketTemplate,\n ticketType: selectTicketType,\n ticketTemplates: selectTicketTemplates,\n ticketTemplateFields: selectTicketTemplateFields,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n fetchTicketTemplates,\n fetchTicketDetails,\n getEscalations,\n setTicketType,\n setSelectedTicketTemplate,\n clearState,\n fetchTicketTemplateFieldSelect,\n setTicketTemplateFieldValue,\n saveCustomTicket,\n updateCustomTicket,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'createTicketModal', reducer })\nconst withSaga = injectSaga({\n key: 'createTicketModal',\n saga: sagas,\n mode: DAEMON,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga,\n permissionChecker\n)(CreateUpdateTicketModal)\n","import { useRef, useEffect } from 'react'\n\nexport const usePrevious = value => {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n })\n return ref.current\n}\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n assignmentControlAll: {\n id: 'app.containers.Tickets.assignmentControlAll',\n defaultMessage: 'All Assignees',\n },\n assignmentControlMyself: {\n id: 'app.containers.Tickets.assignmentControlMyself',\n defaultMessage: 'Assigned to Me',\n },\n assignmentControlUnassigned: {\n id: 'app.containers.Tickets.assignmentControlUnassigned',\n defaultMessage: 'Unassigned',\n },\n createdByCriticalAssetMonitor: {\n id: 'app.containers.Tickets.createdByCriticalAssetMonitor',\n defaultMessage: 'Critical Asset Monitor',\n },\n createdByPolicyEvaluation: {\n id: 'app.containers.Tickets.createdByPolicyEvaluation',\n defaultMessage: 'Policy Evaluation',\n },\n fetchErrorMessage: {\n id: 'app.containers.Tickets.fetchErrorMessage',\n defaultMessage: 'There was an error fetching tickets.',\n },\n pageTitle: {\n id: 'app.containers.Tickets.pageTitle',\n defaultMessage: 'Tickets',\n },\n statusControlOpen: {\n id: 'app.containers.Tickets.statusControlOpen',\n defaultMessage: 'Open',\n },\n statusControlAll: {\n id: 'app.containers.Tickets.statusControlAll',\n defaultMessage: 'All Statuses',\n },\n unassigned: {\n id: 'app.containers.Tickets.unassigned',\n defaultMessage: 'Unassigned',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { Link } from 'react-router-dom'\nimport UserWidget from 'components/UserWidget'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TicketStatusIcon from 'components/TicketStatusIcon'\nimport Pill from 'components/Badge/Pill'\nimport Tooltip from 'components/Tooltip'\n\nimport messages from './messages'\n\nconst cellRendererFrameworksShape = {\n value: PropTypes.any,\n}\n\n/**\n * Inject the parent component props into the child\n */\nexport const connectProps = (Component, props) => {\n const render = params => {\n return \n }\n render.displayName = `connectedWithProps${Component.displayName}`\n return render\n}\n\nexport function AssigneeColumn({ value }) {\n //If row is grouped, the value will be undefined. if it's not grouped and is just blank, it will be null\n if (value === undefined) {\n return null\n }\n\n if (!value) {\n return (\n \n \n \n )\n }\n\n return \n}\n\nAssigneeColumn.propTypes = cellRendererFrameworksShape\n\nAssigneeColumn.getQuickFilterText = ({ value }, props) => {\n if (props.usersLoading) {\n return null\n }\n\n if (!value || _.isEmpty(value)) {\n return null\n }\n\n const user = props.users.get(value)\n if (user) {\n return user.get('name')\n }\n return null\n}\n\nexport function CreatedByColumn({ value }) {\n if ((value ?? '').startsWith('srn:')) {\n return \n }\n\n switch (value) {\n case 'CrmPathFinderJob':\n return (\n \n )\n case 'PolicyEngine':\n return \n default:\n return value ?? ''\n }\n}\n\n/**\n * component to display ticket resource in table\n */\nexport const getDisplayValue = resource => {\n if (!resource) {\n return null\n }\n\n return resource.friendlyName || resource.name || resource.srn\n}\n\nexport function ResourceColumn(args) {\n let { value, data } = args\n if (!data) {\n //Table is grouped...\n if (value) {\n //Table is grouped by resource!\n return value\n }\n\n //Table is grouped by another column, show nothing!\n return null\n }\n\n if (!value || _.isEmpty(value)) {\n if (!_.get(data, ['ticket'], null)) {\n //No ticket data, so we don't know why the resource is empty. Just show nothing.\n return null\n }\n if (_.get(data, ['ticket', 'ticketType'], '') === 'Custom') {\n //Custom tickets do not require resources, this is normal\n return 'N/A'\n }\n\n //If its not a custom ticket and the resource is missing, the resource has been deleted from the system\n return (\n \n \n This resource is no longer available as it was removed from the\n Sonrai platform.\n \n }\n anchor={\n \n  Removed\n \n }\n />\n \n )\n }\n\n return value\n}\nResourceColumn.propTypes = cellRendererFrameworksShape\n\nResourceColumn.getQuickFilterText = ({ value }) => {\n if (!value || _.isEmpty(value)) {\n return null\n }\n const text = value.friendlyName || value.name || value.srn\n return text\n}\n\nResourceColumn.sortColumn = (a, b) => {\n const first = a.friendlyName || a.name || a.srn\n const second = b.friendlyName || b.name || b.srn\n return first.localeCompare(second)\n}\n/**\n * component to display ticket status in table\n */\nexport function StatusColumn({ value }) {\n if (!value || _.isEmpty(value)) {\n return null\n }\n\n return \n}\nStatusColumn.propTypes = cellRendererFrameworksShape\n\n/**\n * component to display swimlanes in table\n */\nexport function SwimlanesColumn({ value, swimlanes, swimlanesLoading }) {\n if (swimlanesLoading) {\n return null\n }\n\n if (!value || _.isEmpty(value)) {\n return null\n }\n\n const swimmies = swimlanes\n .valueSeq()\n .filter(swimlane => value && value.includes(swimlane.get('srn')))\n .toJS()\n .map((swombo, index) => (\n \n \n {swombo.title}\n \n \n ))\n\n return
    {swimmies}
    \n}\nSwimlanesColumn.propTypes = {\n ...cellRendererFrameworksShape,\n swimlanes: ImmutablePropTypes.map.isRequired,\n swimlanesLoading: PropTypes.bool,\n}\n\nSwimlanesColumn.getQuickFilterText = (\n { value },\n { swimlanes, swimlanesLoading }\n) => {\n if (swimlanesLoading) {\n return null\n }\n\n return swimlanes\n .valueSeq()\n .filter(swimlane => value.includes(swimlane.get('srn')))\n .toJS()\n .map(swombo => swombo.title)\n .join(' ')\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport qs from 'query-string'\n\nimport TextLink from 'components/TextLink'\nimport { getTicketId } from 'utils/sonraiUtils'\nimport Ticket from 'containers/TicketDetails/Ticket'\n\nconst TicketDetails = ({\n allTickets,\n ticketSrn,\n closeDetails,\n setActiveTicketSrn,\n}) => {\n if (!ticketSrn) {\n return null\n }\n\n const currIndex = allTickets.findIndex(t => t.srn === ticketSrn)\n if (currIndex < 0) {\n return null\n }\n\n const isFirst = currIndex === 0\n const isLast = currIndex === allTickets.length - 1\n\n const prevTicket = () => {\n if (!isFirst) {\n setActiveTicketSrn(allTickets[currIndex - 1].srn)\n }\n }\n\n const nextTicket = () => {\n if (!isLast) {\n setActiveTicketSrn(allTickets[currIndex + 1].srn)\n }\n }\n\n return (\n \n \n Ticket #{getTicketId(allTickets[currIndex].resourceId)}{' '}\n \n (Go to full Ticket Details)\n \n \n \n \n \n \n \n \n Prev\n \n
    \n {currIndex + 1} of {allTickets.length} Tickets\n
    \n \n Next\n \n \n
    \n \n )\n}\n\nTicketDetails.propTypes = {\n allTickets: PropTypes.array.isRequired,\n closeDetails: PropTypes.func,\n ticketSrn: PropTypes.string.isRequired,\n setActiveTicketSrn: PropTypes.func.isRequired,\n}\n\nexport default TicketDetails\n","import { fromJS } from 'immutable'\nimport moment from 'moment'\nimport { getFriendlyTicketName } from 'utils/widgetUtils'\n\nexport function formatDateTime(value) {\n if (!value) {\n return ''\n }\n return moment(value).format('ll')\n}\n\nexport function formatDateWithTime(value) {\n if (!value) {\n return ''\n }\n return moment(value).format('lll')\n}\n\nexport function formatTicketTitle(policies, row) {\n return getFriendlyTicketName(fromJS(row), policies)\n}\n\nexport function formatTicketType(row) {\n switch (row.ticketType) {\n case 'Policy':\n return 'Control Policy'\n case 'Custom':\n return 'Custom'\n default:\n return 'Critical Asset Monitor'\n }\n}\n","import React, { useState } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\n\nimport { assignTickets } from 'containers/TicketDetailsData/actions'\nimport { selectSonraiUsers } from 'containers/SonraiData/selectors'\nimport Button from 'components/Button'\nimport Select from 'components/Select'\nimport TextLink from 'components/TextLink'\nimport UserWidget from 'components/UserWidget'\n\nconst ReassignToUserModal = props => {\n const [user, setUser] = useState(null)\n\n const onSubmit = () => {\n props.assignTickets({\n ticketSrns: props.ticketSrns,\n userSrn: user,\n })\n props.close()\n }\n\n const options = props.users\n .toList()\n .toJS()\n .map(item => ({\n label: item.name || item.srn,\n value: item.srn,\n }))\n\n return (\n \n Select user\n \n setUser(val.value)}\n formatOptionLabel={option => (\n \n )}\n />\n \n \n \n Cancel\n \n \n \n \n )\n}\n\nReassignToUserModal.propTypes = {\n close: PropTypes.func.isRequired,\n users: ImmutablePropTypes.iterable.isRequired,\n assignTickets: PropTypes.func.isRequired,\n ticketSrns: PropTypes.array.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n users: selectSonraiUsers,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n assignTickets,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(ReassignToUserModal)\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\n\nimport MarkdownEditor from 'components/MarkdownEditor'\nimport FormLabel from 'components/FormLabel'\nimport { acceptRiskTickets } from 'containers/TicketDetailsData/actions'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\n\nconst AcceptRiskModal = props => {\n const [comment, setComment] = useState('')\n\n const onSubmit = () => {\n props.acceptRiskTickets({\n ticketSrns: props.ticketSrns,\n comment: comment,\n })\n props.close()\n }\n\n return (\n \n Accept Risk for selected tickets\n \n Comment\n setComment(newcomment)}\n onKeyStroke={newcomment => setComment(newcomment)}\n />\n \n \n \n Cancel\n \n \n \n \n )\n}\n\nAcceptRiskModal.propTypes = {\n close: PropTypes.func.isRequired,\n acceptRiskTickets: PropTypes.func.isRequired,\n ticketSrns: PropTypes.array.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n acceptRiskTickets,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(AcceptRiskModal)\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\n\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport Select from 'components/Select'\nimport FormLabel from 'components/FormLabel'\nimport { snoozeTickets } from 'containers/TicketDetailsData/actions'\n\nconst SNOOZE_UNTIL_OPTIONS = {\n DAYS_7: {\n label: '7 Days',\n value: [7, 'days'],\n },\n DAYS_14: {\n label: '14 Days',\n value: [14, 'days'],\n },\n DAYS_30: {\n label: '30 Days',\n value: [30, 'days'],\n },\n DAYS_90: {\n label: '90 days',\n value: [90, 'days'],\n },\n DAYS_180: {\n label: '180 days',\n value: [180, 'days'],\n },\n DAYS_1YEAR: {\n label: 'One year',\n value: [1, 'year'],\n },\n}\n\nfunction formatOptionValue({ value }) {\n return moment()\n .add(...value)\n .format('YYYY-MM-DD')\n}\n\nexport const SnoozeTicketModal = props => {\n const [snoozeUntil, setSnoozeUntil] = useState(null)\n\n const onSubmit = () => {\n props.snoozeTickets({\n ticketSrns: props.ticketSrns,\n snoozedUntil: formatOptionValue(snoozeUntil),\n })\n props.close()\n }\n\n return (\n \n Snooze Tickets\n \n Snooze Interval\n setSnoozeUntil(val)}\n />\n \n \n \n Cancel\n \n \n Snooze\n \n \n \n )\n}\n\nSnoozeTicketModal.propTypes = {\n close: PropTypes.func.isRequired,\n snoozeTickets: PropTypes.func.isRequired,\n ticketSrns: PropTypes.array,\n}\n\nconst mapStateToProps = createStructuredSelector({})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n snoozeTickets,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(SnoozeTicketModal)\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\n\nimport MarkdownEditor from 'components/MarkdownEditor'\nimport FormLabel from 'components/FormLabel'\nimport { bulkComment } from 'containers/TicketDetailsData/actions'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\n\nconst CommentModal = props => {\n const [comment, setComment] = useState('')\n\n const onSubmit = () => {\n props.bulkComment({\n ticketSrns: props.ticketSrns,\n comment: comment,\n })\n props.close()\n }\n\n return (\n \n Add comment on selected tickets\n \n Comment\n setComment(newcomment)}\n onKeyStroke={newcomment => setComment(newcomment)}\n />\n \n \n \n Cancel\n \n \n \n \n )\n}\n\nCommentModal.propTypes = {\n close: PropTypes.func.isRequired,\n bulkComment: PropTypes.func.isRequired,\n ticketSrns: PropTypes.array.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n bulkComment,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(CommentModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Input } from 'reactstrap'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { fromJS } from 'immutable'\n\nimport Tag from 'components/Tag'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport _ from 'lodash'\nimport FormLabel from 'components/FormLabel'\nimport { bulkTag } from 'containers/TicketDetailsData/actions'\n\nexport class AddTagsModal extends React.Component {\n styles = {\n inputWrapper: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr 80px',\n gridTemplateRows: 'auto',\n gridColumnGap: '0.5em',\n gridRowGap: '0.5em',\n padding: '1em 0.5em',\n },\n inputLabel: {\n display: 'flex',\n alignItems: 'center',\n margin: 0,\n },\n }\n\n state = {\n tags: [],\n suggestions: [],\n key: '',\n value: '',\n }\n\n handleChange = ({ key, value }) => {\n const { tags } = this.state\n const keys = tags.map(tag => tag.key)\n if (keys.includes(key)) {\n let updatedState = [...tags]\n updatedState.splice(keys.indexOf(key), 1)\n this.setState({\n tags: updatedState,\n })\n } else {\n this.setState(oldState => ({\n tags: [...oldState.tags, { key, value }],\n key: '',\n value: '',\n }))\n }\n }\n\n onCancel = () => {\n this.setState({ tags: [] })\n this.props.close()\n }\n\n onSave = () => {\n this.props.bulkTag({\n resourceSrns: this.props.resourceSrns,\n tags: this.state.tags,\n })\n\n this.props.close()\n }\n\n onChangeKey = event => {\n this.setState({\n key: event.target.value,\n })\n }\n\n onChangeValue = event => {\n this.setState({\n value: event.target.value,\n })\n }\n\n render() {\n return (\n \n Add Tag(s)\n \n
    \n
    \n \n Key\n \n \n
    \n
    \n \n Value\n \n \n
    \n
    \n \n this.handleChange({\n key: this.state.key,\n value: this.state.value,\n })\n }\n color=\"primary\"\n >\n Add\n \n
    \n
    \n\n {!_.isEmpty(this.state.tags) &&\n this.state.tags.map((tag, i) => (\n this.handleChange(tag)}\n />\n ))}\n
    \n \n \n Cancel\n \n \n Save\n \n \n
    \n )\n }\n}\n\nAddTagsModal.propTypes = {\n bulkTag: PropTypes.func.isRequired,\n close: PropTypes.func,\n resourceSrns: PropTypes.array.isRequired,\n}\nconst mapStateToProps = createStructuredSelector({})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n bulkTag,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(AddTagsModal)\n","import React, { useState, Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\nimport _ from 'lodash'\n\nimport permissionChecker from 'containers/PermissionChecker'\nimport {\n selectSwimlanesBySrn,\n selectSwimlanesLoading,\n selectSonraiUsers,\n selectSonraiUsersLoading,\n} from 'containers/SonraiData/selectors'\nimport { selectPolicies } from 'containers/ControlFrameworkData/selectors'\nimport DataTable from 'components/DataTable'\nimport { ToolbarItem } from 'components/BulkActionToolbar'\nimport { closeTickets } from 'containers/TicketDetailsData/actions'\nimport { selectBulkActionWorking } from 'containers/TicketDetailsData/selectors'\nimport { usePrevious } from 'utils/hookUtils'\n\nimport {\n connectProps,\n AssigneeColumn,\n CreatedByColumn,\n ResourceColumn,\n StatusColumn,\n SwimlanesColumn,\n getDisplayValue,\n} from './TicketListColumns'\nimport TicketDetails from './TicketDetails'\nimport { formatTicketTitle, formatTicketType } from './utils'\nimport AssignToUserModal from './AssignToUserModal'\nimport AcceptRiskModal from './AcceptRiskModal'\nimport { getPoliciesFromObjectives } from 'utils/sonraiUtils'\nimport SnoozeModal from './SnoozeModal'\nimport CommentModal from './CommentModal'\nimport AddTagsModal from './AddTagsModal'\nfunction getObjective(ticket, objectives) {\n const { ticketType, ticketKey } = ticket\n if (!ticket || ticketType !== 'Policy' || !objectives || !ticketKey) {\n return\n }\n const mappedObjectives = getPoliciesFromObjectives(objectives)\n return _.keys(mappedObjectives).find(key =>\n mappedObjectives[key].includes(ticketKey)\n )\n}\n\nfunction formatRow(policies, objectives, row) {\n return {\n highestAlertSeverity: row.severityNumeric,\n resourceName: getDisplayValue(row.resource),\n resource: row.resource,\n title: formatTicketTitle(policies, row),\n swimlanes: row.swimlaneSRNs,\n status: row.status,\n assignee: row.assignedTo,\n objective: getObjective(row, objectives),\n createdDate: row.createdDate,\n lastModified: row.lastModified,\n firstSeen: row.firstSeen,\n lastSeen: row.lastSeen,\n createdBy: row.createdBy,\n type: formatTicketType(row),\n resourceId: row.resourceId,\n srn: row.srn,\n id: row.id,\n ticket: row,\n }\n}\n\n/**\n * Format data for proper display\n */\nfunction formatData(policies, tickets, objectives) {\n const rows = tickets\n return rows.map(row => formatRow(policies, objectives, row))\n}\n\nconst customColumnConfig = props => {\n const defaultColumnConfig = {\n assignee: {\n cellRendererFramework: connectProps(AssigneeColumn, props),\n getQuickFilterText: params =>\n AssigneeColumn.getQuickFilterText(params, props),\n },\n createdBy: {\n cellRendererFramework: connectProps(CreatedByColumn, props),\n },\n resourceName: {\n cellRendererFramework: connectProps(ResourceColumn, props),\n minWidth: 250,\n },\n resource: {\n hide: true,\n },\n status: {\n minWidth: 150,\n cellStyle: {\n padding: '0 0.4em',\n },\n cellRendererFramework: connectProps(StatusColumn, props),\n },\n swimlanes: {\n cellStyle: {\n padding: '0 0.4em',\n },\n cellRendererFramework: connectProps(SwimlanesColumn, props),\n getQuickFilterText: params =>\n SwimlanesColumn.getQuickFilterText(params, props),\n },\n title: { width: 300 },\n resourceId: {\n hide: true,\n },\n srn: {\n hide: true,\n },\n id: {\n hide: true,\n },\n ticket: {\n hide: true,\n },\n }\n if (props.columnConfig) {\n return {\n ...defaultColumnConfig,\n ...props.columnConfig,\n }\n }\n return defaultColumnConfig\n}\n\nfunction TicketTable(props) {\n const [activeTicketSrn, setActiveTicketSrn] = useState(null)\n const data = formatData(props.policies, props.tickets, props.objectives)\n const [selectedTickets, setSelectedTickets] = useState([])\n const [gridAPI, setGridAPI] = useState(null)\n const [showReassignModal, setShowReassignModal] = useState(false)\n const [showAcceptRiskModal, setShowAcceptRiskModal] = useState(false)\n const [showSnoozeModal, setShowSnoozeModal] = useState(false)\n const [showCommentModal, setShowCommentModal] = useState(false)\n const [showTagModal, setShowTagModal] = useState(false)\n\n const previousBulkActionWorking = usePrevious(props.bulkActionWorking)\n\n useEffect(() => {\n if (previousBulkActionWorking && !props.bulkActionWorking) {\n if (gridAPI) {\n gridAPI.deselectAll()\n }\n\n if (props.refreshData) {\n props.refreshData()\n }\n }\n }, [props.bulkActionWorking])\n\n const onSingleClickRow = srn => {\n setActiveTicketSrn(srn)\n }\n\n const getBulkActions = () => {\n const options = [\n props.closeTickets(selectedTickets)}\n iconName=\"check\"\n disabled={selectedTickets.length === 0}\n >\n {selectedTickets.length > 0\n ? `Resolve (${selectedTickets.length})`\n : 'Resolve'}\n ,\n setShowReassignModal(true)}\n iconName=\"user\"\n disabled={selectedTickets.length === 0}\n >\n {selectedTickets.length > 0\n ? `Reassign (${selectedTickets.length})`\n : 'Reassign'}\n ,\n setShowSnoozeModal(true)}\n iconName=\"clock\"\n disabled={selectedTickets.length === 0}\n >\n {selectedTickets.length > 0\n ? `Snooze (${selectedTickets.length})`\n : 'Snooze'}\n ,\n setShowCommentModal(true)}\n iconName=\"comments\"\n disabled={selectedTickets.length === 0}\n >\n {selectedTickets.length > 0\n ? `Comment (${selectedTickets.length})`\n : 'Comment'}\n ,\n setShowTagModal(true)}\n iconName=\"tag\"\n disabled={selectedTickets.length === 0}\n >\n {selectedTickets.length > 0\n ? `Tag Resource (${selectedTickets.length})`\n : 'Tag Resource'}\n ,\n ]\n\n if (\n props.userHasPermission({\n permissionName: 'acceptrisk.tickets',\n })\n ) {\n options.push(\n setShowAcceptRiskModal(true)}\n iconName=\"stamp\"\n disabled={selectedTickets.length === 0}\n >\n {selectedTickets.length > 0\n ? `Accept Risk (${selectedTickets.length})`\n : 'Accept Risk'}\n \n )\n }\n\n return options\n }\n\n const checkboxRowTest = params => {\n if (!params.data || params.column.rowGroupActive) {\n //Row is grouped\n return false\n }\n\n const swimlaneSRNs = _.get(params, [\n 'data',\n 'alertObj',\n 'resource',\n 'swimlaneSRNs',\n ])\n\n if (!swimlaneSRNs || swimlaneSRNs.length === 0) {\n return false\n }\n\n return props.userHasPermission({\n permissionName: 'transition.tickets',\n swimlanes: swimlaneSRNs,\n })\n }\n\n const onLoad = ({ api }) => {\n setGridAPI(api)\n }\n\n const handleCheckBoxSelection = event => {\n const rows = event.api.getSelectedRows() || []\n\n const tickets = rows.map(row => row.srn)\n\n setSelectedTickets(tickets)\n }\n\n return (\n \n {\n props.push({\n pathname: `/App/TicketDetails`,\n search: `srn=${srn}`,\n })\n }}\n onSingleClickNodeView={onSingleClickRow}\n bulkActions={getBulkActions()}\n bulkActionWorking={props.bulkActionWorking}\n checkboxRowTest={checkboxRowTest}\n checkboxSelectedRows={selectedTickets}\n supressSelectAll\n hasCheckBoxes\n selectionChanged={handleCheckBoxSelection}\n onLoad={onLoad}\n {...props}\n />\n {!props.noModal && (\n setActiveTicketSrn(null)}\n setActiveTicketSrn={setActiveTicketSrn}\n />\n )}\n {showReassignModal && (\n setShowReassignModal(false)}\n />\n )}\n {showAcceptRiskModal && (\n setShowAcceptRiskModal(false)}\n />\n )}\n {showSnoozeModal && (\n setShowSnoozeModal(false)}\n />\n )}\n {showCommentModal && (\n setShowCommentModal(false)}\n />\n )}\n {showTagModal && (\n selectedTickets.includes(row.srn))\n .map(row => _.get(row, ['resource', 'srn']))}\n close={() => setShowCommentModal(false)}\n />\n )}\n \n )\n}\n\nTicketTable.propTypes = {\n bulkActionWorking: PropTypes.bool,\n closeTickets: PropTypes.func.isRequired,\n noModal: PropTypes.bool,\n policies: ImmutablePropTypes.map.isRequired,\n push: PropTypes.func.isRequired,\n refreshData: PropTypes.func,\n swimlanes: ImmutablePropTypes.map.isRequired,\n objectives: ImmutablePropTypes.map.isRequired,\n swimlanesLoading: PropTypes.bool,\n tickets: PropTypes.array,\n users: ImmutablePropTypes.map.isRequired,\n userHasPermission: PropTypes.func.isRequired,\n usersLoading: PropTypes.bool,\n customColumnConfig: PropTypes.object,\n columnConfig: PropTypes.object,\n}\n\nconst mapStateToProps = createStructuredSelector({\n bulkActionWorking: selectBulkActionWorking,\n policies: selectPolicies,\n swimlanes: selectSwimlanesBySrn,\n swimlanesLoading: selectSwimlanesLoading,\n users: selectSonraiUsers,\n usersLoading: selectSonraiUsersLoading,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n closeTickets,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, permissionChecker)(TicketTable)\n","import { createAction } from 'redux-actions'\nimport {\n LOAD_USER,\n FETCH_USER_PROFILE,\n SET_USER_PROFILE,\n SAVE_USER_PROFILE,\n SET_USER_PROFILE_TABLES,\n HIDE_SOLUTION_CARD,\n UNHIDE_SOLUTION_CARDS,\n ACCEPT_LICENSE,\n SET_SECURITY_CENTER_WELCOME_MODAL,\n TOGGLE_SWIMLANE_MANAGER,\n SET_SONRAI_USER_SRN,\n SET_USER_PROFILE_ERROR,\n} from './constants'\n\nexport const loadUser = createAction(LOAD_USER)\nexport const setUserProfile = createAction(SET_USER_PROFILE)\nexport const fetchUserProfile = createAction(FETCH_USER_PROFILE)\nexport const saveUserProfile = createAction(SAVE_USER_PROFILE)\nexport const hideSolutionCard = createAction(HIDE_SOLUTION_CARD)\nexport const unhideSolutionCards = createAction(UNHIDE_SOLUTION_CARDS)\nexport const acceptLicense = createAction(ACCEPT_LICENSE)\nexport const toggleSwimlaneManager = createAction(TOGGLE_SWIMLANE_MANAGER)\nexport const setSonraiUserSrn = createAction(SET_SONRAI_USER_SRN)\n\nexport const setUserProfileTables = createAction(\n SET_USER_PROFILE_TABLES,\n (grid, set, id) => ({\n grid,\n set,\n id,\n })\n)\n\nexport const setSecurityCenterWelcomeModal = createAction(\n SET_SECURITY_CENTER_WELCOME_MODAL\n)\n\nexport const setUserProfileError = createAction(SET_USER_PROFILE_ERROR)\n","import React from 'react'\n\nexport const ThemeContext = React.createContext({\n theme: {},\n})\n","import Color from 'color'\nimport _ from 'lodash'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { fromJS, Map, List } from 'immutable'\nimport { getFields } from 'query-builder'\nimport { getNameFromSrn, exists } from 'utils/sonraiUtils'\nimport { DATA_TYPES_FOR_CRM, SEVERITY_CATEGORIES } from 'appConstants'\n\nexport const getCoordConf = (value, theme) => {\n let coordinates = null\n let type = ''\n let label = ''\n\n switch (value) {\n // case 'us-east1':\n // coordinates = [4.5, 50.5]\n // label = 'US East 1'\n // type = 'GCP'\n // break\n //// googles\n\n case 'us-asia1':\n coordinates = [120.5, 24]\n label = 'Asia East 1'\n type = 'GCP'\n break\n case 'us-asia2':\n coordinates = [114, 22.2]\n label = 'Asia East 2'\n type = 'GCP'\n break\n case 'asia-northeast1':\n coordinates = [139.2, 35.3]\n label = 'Asia North East 1'\n type = 'GCP'\n break\n case 'asia-northeast2':\n coordinates = [135.3, 34.6]\n label = 'Asia North East 2'\n type = 'GCP'\n break\n case 'asia-south1':\n coordinates = [73.3, 19.5]\n label = 'Asia South 1'\n type = 'GCP'\n break\n case 'asia-southeast1':\n coordinates = [104.2, 1.2]\n label = 'Asia South East 1'\n type = 'GCP'\n break\n case 'australia-southeast1':\n coordinates = [150.9, -34]\n label = 'Australia South East East 1'\n type = 'GCP'\n break\n case 'europe-north1':\n coordinates = [27, 60.5]\n label = 'Europe North 1'\n type = 'GCP'\n break\n case 'europe-west1':\n coordinates = [15, 50]\n label = 'Europe West 1'\n type = 'GCP'\n break\n case 'europe-west2':\n coordinates = [0.5, 51.5]\n label = 'Europe West 2'\n type = 'GCP'\n break\n case 'europe-west3':\n coordinates = [8.5, 50.2]\n label = 'Europe West 3'\n type = 'GCP'\n break\n case 'europe-west4':\n coordinates = [7.2, 53.6]\n label = 'Europe West 4'\n type = 'GCP'\n break\n case 'europe-west6':\n coordinates = [8.6, 47]\n label = 'Europe West 6'\n type = 'GCP'\n break\n case 'northamerica-northeast1':\n coordinates = [-73.56, 45.5]\n label = 'North America North East 1'\n type = 'GCP'\n break\n case 'southamerica-east1':\n coordinates = [-73.56, 45.5]\n label = 'South America East 1'\n type = 'GCP'\n break\n case 'us-central1':\n coordinates = [-93, 39.96]\n label = 'US Central 1'\n type = 'GCP'\n break\n case 'us-east1':\n coordinates = [-81.2, 34]\n label = 'US East 1'\n type = 'GCP'\n break\n case 'us-east4':\n coordinates = [-78.45, 38.9]\n label = 'US East 4'\n type = 'GCP'\n break\n case 'us-west1':\n coordinates = [-120, 45.5]\n label = 'US West 1'\n type = 'GCP'\n break\n case 'us-west2':\n coordinates = [-118, 33.8]\n label = 'US West 2'\n type = 'GCP'\n break\n ///////////////////////////////////////////////////////////////\n case 'us-east-1':\n coordinates = [-78.45, 38.13]\n label = 'US East 1'\n type = 'AWS'\n break\n case 'us-east-2':\n coordinates = [-83.0, 39.96]\n label = 'US East 2'\n type = 'AWS'\n break\n case 'us-west-1':\n coordinates = [-121.96, 37.35]\n label = 'US West 1'\n type = 'AWS'\n break\n case 'us-west-2':\n coordinates = [-123.88, 46.15]\n label = 'US West 2'\n type = 'AWS'\n break\n case 'ap-northeast-1':\n coordinates = [137.42, 35.41]\n label = 'Asia Pacific NorthEast 1'\n type = 'AWS'\n break\n case 'ap-northeast-2':\n coordinates = [126.98, 37.56]\n label = 'Asia Pacific NorthEast 2'\n type = 'AWS'\n break\n case 'ap-northeast-3':\n coordinates = [125.5, 34.69]\n label = 'Asia Pacific NorthEast 3'\n type = 'AWS'\n break\n case 'ap-south-1':\n coordinates = [72.88, 19.08]\n label = 'Asia Pacific South 1'\n type = 'AWS'\n break\n case 'ap-southeast-1':\n coordinates = [103.8, 1.37]\n label = 'Asia Pacific SouthEast 1'\n type = 'AWS'\n break\n case 'ap-southeast-2':\n coordinates = [151.2, -33.86]\n label = 'Asia Pacific SouthEast 2'\n type = 'AWS'\n break\n case 'ca-central-1':\n coordinates = [-73.56, 45.5]\n label = 'Canada Central 1'\n type = 'AWS'\n break\n case 'cn-north-1':\n coordinates = [116.68, 39.54]\n label = 'China North 1'\n type = 'AWS'\n break\n case 'cn-northwest-1':\n coordinates = [106.15, 37.19]\n label = 'China NorthWest 1'\n type = 'AWS'\n break\n case 'eu-central-1':\n coordinates = [8.6833, 50.1167]\n label = 'Europe Central 1'\n type = 'AWS'\n break\n case 'eu-west-1':\n coordinates = [-7.69, 53.14]\n label = 'Europe West 1'\n type = 'AWS'\n break\n case 'eu-west-2':\n coordinates = [-0.12, 51.5]\n label = 'Europe West 2'\n type = 'AWS'\n break\n case 'eu-west-3':\n coordinates = [2.35, 48.85]\n label = 'Europe West 3'\n type = 'AWS'\n break\n case 'sa-east-1':\n coordinates = [-46.38, -23.34]\n label = 'South America'\n type = 'AWS'\n break\n case 'eastus':\n coordinates = [-79.8164, 37.3719]\n label = 'East US'\n type = 'Azure'\n break\n case 'eastus2':\n coordinates = [-78.3889, 36.6681]\n label = 'East US 2'\n type = 'Azure'\n break\n case 'usgovvirginia':\n coordinates = [-81.66, 37.98]\n label = 'US Gov Virginia'\n type = 'Azure'\n break\n case 'usdodeast':\n coordinates = [-81.66, 37.98]\n label = 'US DoD East'\n type = 'Azure'\n break\n case 'centralus':\n coordinates = [-95.63, 41.91]\n label = 'Central US'\n type = 'Azure'\n break\n case 'usgoviowa':\n coordinates = [-93.6208, 41.5908]\n label = 'US Gov Iowa'\n type = 'Azure'\n break\n case 'usdodcentral':\n coordinates = [-95.63, 41.91]\n label = 'US DoD Central'\n type = 'Azure'\n break\n case 'northcentralus':\n coordinates = [-87.6278, 41.8819]\n label = 'North Central US'\n type = 'Azure'\n break\n case 'southcentralus':\n coordinates = [-98.5, 29.4167]\n label = 'South Central US'\n type = 'Azure'\n break\n case 'usgovtexas':\n coordinates = [-104.56, 31.09]\n label = 'US Gov Texas'\n type = 'Azure'\n break\n case 'westcentralus':\n coordinates = [-110.234, 40.89]\n label = 'West Central US'\n type = 'Azure'\n break\n case 'westus':\n coordinates = [-122.417, 37.783]\n label = 'West US'\n type = 'Azure'\n break\n case 'westus2':\n coordinates = [-119.852, 47.233]\n label = 'West US 2'\n type = 'Azure'\n break\n case 'usgovarizona':\n coordinates = [-114.17, 34.14]\n label = 'US Gov Arizona'\n type = 'Azure'\n break\n case 'canadaeast':\n coordinates = [-71.217, 46.817]\n label = 'Canada East'\n type = 'Azure'\n break\n case 'canadacentral':\n coordinates = [-79.383, 43.653]\n label = 'Canada Central'\n type = 'Azure'\n break\n case 'brazilsouth':\n coordinates = [-46.633, -23.55]\n label = 'Brazil South'\n type = 'Azure'\n break\n case 'northeurope':\n coordinates = [-6.2597, 53.3478]\n label = 'North Europe'\n type = 'Azure'\n break\n case 'westeurope':\n coordinates = [4.9, 52.3667]\n label = 'West Europe'\n type = 'Azure'\n break\n case 'francecentral':\n coordinates = [2.373, 46.3772]\n label = 'France Central'\n type = 'Azure'\n break\n case 'francesouth':\n coordinates = [2.1972, 43.8345]\n label = 'France South'\n type = 'Azure'\n break\n case 'ukwest':\n coordinates = [-3.084, 53.427]\n label = 'UK West'\n type = 'Azure'\n break\n case 'uksouth':\n coordinates = [-0.799, 50.941]\n label = 'UK South'\n type = 'Azure'\n break\n case 'germanycentral':\n coordinates = [8.49, 50.12]\n label = 'Germany Central'\n type = 'Azure'\n break\n case 'germanynortheast':\n coordinates = [11.5, 52.12]\n label = 'Germany NorthEast'\n type = 'Azure'\n break\n case 'germanynorth':\n coordinates = [10.35, 53.088346]\n label = 'Germany North'\n type = 'Azure'\n break\n case 'germanywestcentral':\n coordinates = [10.88, 50.85]\n label = 'Germany West Central'\n type = 'Azure'\n break\n case 'switzerlandnorth':\n coordinates = [8.46, 47.37]\n label = 'Switzerland North'\n type = 'Azure'\n break\n case 'switzerlandwest':\n coordinates = [6.1, 46.2]\n label = 'Switzerland West'\n type = 'Azure'\n break\n case 'norwayeast':\n coordinates = [10.64, 59.89]\n label = 'Norway East'\n type = 'Azure'\n break\n case 'norwaywest':\n coordinates = [5.14, 60.36]\n label = 'Norway West'\n type = 'Azure'\n break\n case 'southeastasia':\n coordinates = [103.833, 1.283]\n label = 'SouthEast Asia'\n type = 'Azure'\n break\n case 'eastasia':\n coordinates = [114.188, 22.267]\n label = 'East Asia'\n type = 'Azure'\n break\n case 'australiaeast':\n coordinates = [151.2094, -33.86]\n label = 'Australia East'\n type = 'Azure'\n break\n case 'australiasoutheast':\n coordinates = [144.9631, -37.8136]\n label = 'Australia SouthEast'\n type = 'Azure'\n break\n case 'australiacentral':\n coordinates = [149.1244, -35.3075]\n label = 'Australia Central'\n type = 'Azure'\n break\n case 'australiacentral2':\n coordinates = [149.1244, -35.3075]\n label = 'Australia Central 2'\n type = 'Azure'\n break\n case 'chinaeast':\n coordinates = [121.19, 31.22]\n label = 'China East'\n type = 'Azure'\n break\n case 'chinaeast2':\n coordinates = [121.19, 31.22]\n label = 'China East 2'\n type = 'Azure'\n break\n case 'chinanorth':\n coordinates = [116.11, 39.93]\n label = 'China North'\n type = 'Azure'\n break\n case 'chinanorth2':\n coordinates = [116.11, 39.93]\n label = 'China North 2'\n type = 'Azure'\n break\n case 'centralindia':\n coordinates = [73.9197, 18.5822]\n label = 'Central India'\n type = 'Azure'\n break\n case 'westindia':\n coordinates = [72.868, 19.088]\n label = 'West India'\n type = 'Azure'\n break\n case 'southindia':\n coordinates = [80.1636, 12.9822]\n label = 'South India'\n type = 'Azure'\n break\n case 'japaneast':\n coordinates = [139.77, 35.68]\n label = 'Japan East'\n type = 'Azure'\n break\n case 'japanwest':\n coordinates = [135.5022, 34.6939]\n label = 'Japan West'\n type = 'Azure'\n break\n case 'koreacentral':\n coordinates = [126.978, 37.5665]\n label = 'Korea Central'\n type = 'Azure'\n break\n case 'koreasouth':\n coordinates = [129.0756, 35.1796]\n label = 'Korea South'\n type = 'Azure'\n break\n case 'southafricawest':\n coordinates = [18.37, -33.9]\n label = 'South Africa West'\n type = 'Azure'\n break\n case 'southafricanorth':\n coordinates = [28.0, -26.17]\n label = 'South Africa North'\n type = 'Azure'\n break\n case 'uaecentral':\n coordinates = [54.41, 24.38]\n label = 'UAE Central'\n type = 'Azure'\n break\n case 'uaenorth':\n coordinates = [55.08, 25.07]\n label = 'UAE North'\n type = 'Azure'\n break\n }\n\n return {\n coordinates,\n color:\n theme !== undefined\n ? type === 'AWS'\n ? theme.primaryAws\n : type === 'Azure'\n ? theme.primaryAzure\n : type === 'GCP'\n ? theme.primaryGcp\n : '#000000'\n : '#000000',\n type,\n label,\n }\n}\n\n//Value //Precision - to which decimal place.\n//Ex: round(23.13323, 2) => 23.13\nexport const round = (value, precision) =>\n value !== 0\n ? Math.round(value * Math.pow(10, precision || 0)) /\n Math.pow(10, precision || 0)\n : 0\n\nconst getRGB = (level, theme) => {\n switch (level) {\n case 1:\n return Color.rgb(theme.info)\n case 2:\n return Color.rgb(theme.warn)\n case 3:\n return Color.rgb(theme.fail)\n default:\n return Color('#fff')\n }\n}\n\nexport const getAlertColors = (level, theme) => {\n let color = getRGB(level, theme)\n\n return {\n color: color.darken(0.4).hex(),\n backgroundColor: color.lighten(0.25).hex(),\n }\n}\n\nexport const isEven = num => num % 2 !== 1\n\nexport const getTimes = () => {\n let times = []\n for (let i = 0; i < 2; i++) {\n let am = true\n if (i === 1) {\n am = false\n }\n for (let j = 0; j < 12; j++) {\n let hour\n if (j === 0) {\n hour = 12\n } else {\n hour = j\n }\n for (let x = 0; x < 4; x++) {\n let min\n if (x === 0) {\n min = null\n } else if (x === 1) {\n min = 15\n } else if (x === 2) {\n min = 30\n } else if (x === 3) {\n min = 45\n }\n\n times.push({ hour, min, am })\n }\n }\n }\n return times\n}\n\nconst CRUD = [\n 'DataCreate',\n 'DataRead',\n 'DataUpdate',\n 'DataDelete',\n 'ProtectionCreate',\n 'ProtectionRead',\n 'ProtectionUpdate',\n 'ProtectionDelete',\n]\n\nconst getCRUDActionMap = (action, type, resourceType = '') => {\n if (exists(type)) {\n if (type === 'hasPermissionTo') {\n switch (action) {\n case 'DataCreate':\n return 'Create Data'\n case 'DataRead':\n return 'Read Data'\n case 'DataUpdate':\n return 'Update Data'\n case 'DataDelete':\n return 'Delete Data'\n case 'ProtectionCreate':\n return 'Create Protection'\n case 'ProtectionRead':\n return 'Read Protection'\n case 'ProtectionUpdate':\n return 'Update Protection'\n case 'ProtectionDelete':\n return 'Delete Protection'\n default:\n return action\n }\n } else {\n if (DATA_TYPES_FOR_CRM.includes(resourceType.toLowerCase())) {\n switch (action) {\n case 'DataCreate':\n return 'Data created by'\n case 'DataRead':\n return 'Data read by'\n case 'DataUpdate':\n return 'Data updated by'\n case 'DataDelete':\n return 'Data deleted by'\n case 'ProtectionCreate':\n return 'Protection created by'\n case 'ProtectionRead':\n return 'Protection read by'\n case 'ProtectionUpdate':\n return 'Protection updated by'\n case 'ProtectionDelete':\n return 'Protection deleted by'\n default:\n return action\n }\n } else {\n switch (action) {\n case 'DataCreate':\n return 'Created Data'\n case 'DataRead':\n return 'Read Data'\n case 'DataUpdate':\n return 'Updated Data'\n case 'DataDelete':\n return 'Deleted Data'\n case 'ProtectionCreate':\n return 'Created Protection'\n case 'ProtectionRead':\n return 'Read Protection'\n case 'ProtectionUpdate':\n return 'Updated Protection'\n case 'ProtectionDelete':\n return 'Deleted Protection'\n default:\n return action\n }\n }\n }\n }\n return action\n}\n\nexport const getFriendlyActionName = (action, type, resourceType = '') => {\n if (!action) {\n return '-'\n }\n\n if (CRUD.includes(action)) {\n return getCRUDActionMap(action, type, resourceType)\n }\n\n if (type !== 'hasPermissionTo') {\n if (DATA_TYPES_FOR_CRM.includes(resourceType.toLowerCase())) {\n switch (action) {\n case 'Resume':\n return 'Resumed by'\n case 'Activity':\n case 'Action':\n return 'Interacted with by'\n case 'Delete':\n return 'Deleted by'\n case 'Stop':\n return 'Stopped by'\n case 'Accept':\n return 'Accepted by'\n case 'Analytic':\n return 'Performed Analytic by'\n case 'Configure':\n return 'Configured by'\n case 'Message':\n return 'Messaged by'\n case 'Create':\n return 'Created by'\n case 'Start':\n return 'Started by'\n case 'Archive':\n return 'Archived by'\n case 'Restore':\n return 'Restored by'\n case 'Update':\n return 'Updated by'\n case 'Read':\n return 'Read by'\n case 'Login':\n return 'Logged in to by'\n case 'Failure':\n return 'Failed'\n case 'Authentication':\n return 'Authenticated by'\n case 'Logout':\n return 'Logged out by'\n case 'Audit':\n return 'Audited by'\n default:\n return action\n }\n } else {\n switch (action) {\n case 'Resume':\n return 'Resumed'\n case 'Activity':\n case 'Action':\n return 'Interacted with'\n case 'Delete':\n return 'Deleted'\n case 'Stop':\n return 'Stopped'\n case 'Accept':\n return 'Accepted'\n case 'Analytic':\n return 'Performed Analytic'\n case 'Configure':\n return 'Configured'\n case 'Message':\n return 'Messaged'\n case 'Create':\n return 'Created'\n case 'Start':\n return 'Started'\n case 'Archive':\n return 'Archived'\n case 'Restore':\n return 'Restored'\n case 'Update':\n return 'Updated'\n case 'Read':\n return 'Read'\n case 'Login':\n return 'Logged in to'\n case 'Failure':\n return 'Failed'\n case 'Authentication':\n return 'Authenticated'\n case 'Logout':\n return 'Logged out'\n case 'Audit':\n return 'Audited'\n default:\n return action\n }\n }\n } else {\n switch (action) {\n case 'Activity':\n case 'Action':\n return 'Interact with'\n case 'Analytic':\n return 'Perform Analytic'\n case 'Failure':\n return 'Fail'\n case 'Authentication':\n return 'Authenticate'\n default:\n return action\n }\n }\n}\n\nexport const getCrmPropertySubtitle = (srn, keyName) => {\n if (srnIsCRMActionable(srn)) {\n switch (keyName) {\n case 'active':\n return 'Detect if data is deleted or re-added'\n case 'auditEnabled':\n return 'Detect change in audit configuration settings'\n case 'encryptionEnabled':\n return 'Detect changes in encryption settings'\n case 'isPublic':\n return 'Detect change in the public ip settings of the data store'\n case 'publicRead':\n return 'Detect changes in public exposure of the data'\n case 'publicWrite':\n return 'Detect changes in the public write configuration of the data'\n case 'versioningEnabled':\n return 'Detect changes in versioning configuration of the data'\n case 'writeOnce':\n return 'Detect changes in write once configuration of the data'\n case 'version':\n return 'Detect a version change of the data store software'\n case 'actionableBy':\n return 'Detect a new identity which can configure or access the data outside of the learned baseline'\n case 'accessed':\n return 'Detect new identities configuring or accessing the data objects outside the learned baseline'\n case 'accessedFrom':\n return 'Detect access to data from countries outside the learned baseline'\n case 'accessedUsing':\n return 'Detect access to data from user agents outside the learned baseline'\n }\n } else {\n switch (keyName) {\n case 'isConsoleEnabled':\n return 'Detect change in ability to access the cloud console'\n case 'active':\n return 'Detect if identity is deleted or re-enabled'\n case 'hasPermissionTo':\n case 'actionableBy':\n return 'Detect a change in permissions giving additional right to data or datastore configuration'\n case 'accessed':\n return 'Detect access, modification or configuration changes to data and data stores outside of the learned baseline'\n case 'accessedUsing':\n return 'Detect a new useragent outside the learned baseline'\n case 'accessedFrom':\n case 'activeFrom':\n return 'Detect access from countries outside the baseline'\n }\n }\n}\n\nexport const getMappedBoolLabel = (key, valueIn) => {\n const value = valueIn === 'true' || valueIn === true\n\n switch (key) {\n case 'active':\n return value ? 'Active' : 'Deleted'\n case 'auditEnabled':\n return value ? 'Audit Enabled' : 'Audit Disabled'\n case 'encryptionEnabled':\n return value ? 'Encrypted' : 'Encryption Disabled'\n case 'versioningEnabled':\n return value ? 'Versioned' : 'Not Versioned'\n case 'isConsoleEnabled':\n return value ? 'Console Enabled' : 'Console Disabled'\n case 'writeOnce':\n return value ? 'Write Once' : 'Write Disabled'\n case 'publicRead':\n return value ? 'Public Readable' : 'Not Public Readable'\n case 'publicWrite':\n return value ? 'Public Writable' : 'Not Public Writable'\n case 'isPublic':\n return value ? 'Can be Public' : 'Private'\n case 'isDefault':\n return value ? 'Default' : 'Custom'\n case 'isGlobal':\n return value ? 'Global' : 'Local'\n case 'isModifiable':\n return value ? 'Modifiable' : 'Not Modifiable'\n case 'isOrganizational':\n return value ? 'Organizational' : 'Not Organizational'\n case 'success':\n case 'succeeded':\n return value ? 'Succeeded' : 'Failed'\n case 'enabled':\n return value ? 'Enabled' : 'Disabled'\n case 'websiteEnabled':\n return value ? 'Website Enabled' : 'Website Disabled'\n default:\n return\n }\n}\n\nexport const getFriendlyKeyName = keyName => {\n switch (keyName) {\n case 'actionableBy':\n return 'Who and What Can Access'\n case 'accessedBy':\n return 'Who and What Did Access'\n case 'accessedFrom':\n return 'Accessed From Geography'\n case 'accessedUsing':\n return 'Accessed Using User-Agent'\n case 'activeFrom':\n return 'Active From Geography'\n case 'hasPermissionTo':\n return 'Has Permission to Access Data'\n case 'accessed':\n return 'Accessed Data'\n default:\n return (\n _.lowerCase(keyName)\n .split(' ')\n .map(x => _.upperFirst(x))\n .join(' ') || ''\n )\n }\n}\n\nexport const getPropertyName = params => {\n switch (params.get('keyName')) {\n case 'active':\n if (params.get('boolValue')) {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } was activated`\n } else {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } was deleted`\n }\n case 'isConsoleEnabled':\n if (params.get('boolValue')) {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } can now login via console`\n } else {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } can no longer login via console`\n }\n case 'isMFA':\n if (params.get('boolValue')) {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } now has MFA`\n } else {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } no longer has MFA`\n }\n case 'encryptionEnabled':\n if (params.get('boolValue')) {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } is now encrypted`\n } else {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } is no longer encrypted`\n }\n case 'isPublic':\n if (params.get('boolValue')) {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } now has ${params.getIn(['resource', 'resourceId'])}` // Should be public ip but couldnt figure out how to get that field from resource\n } else {\n return `${params.getIn([\n 'resource',\n 'name',\n ])} no longer has ${params.getIn(['resource', 'resourceId'])}`\n }\n case 'publicRead':\n if (params.get('boolValue')) {\n return `${params.getIn([\n 'resource',\n 'name',\n ])} is now publicly accessible`\n } else {\n return `${params.getIn([\n 'resource',\n 'name',\n ])} is no longer publicly accessible`\n }\n case 'publicWrite':\n if (params.get('boolValue')) {\n return `${params.getIn([\n 'resource',\n 'name',\n ])} can be written to by anyone`\n } else {\n return `${params.getIn([\n 'resource',\n 'name',\n ])} can no longer be written to by anyone`\n }\n case 'writeOnce':\n if (params.get('boolValue')) {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } is now set to write once`\n } else {\n return `${params.getIn([\n 'resource',\n 'name',\n ])} is no longer set to write once`\n }\n case 'version':\n case 'versioningEnabled':\n if (params.get('boolValue')) {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } is now versioned`\n } else {\n return `${\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn']))\n } is no longer versioned`\n }\n }\n}\n\nexport const getAlertLevelColor = numericLevel => {\n switch (numericLevel) {\n case 10:\n return '#da1e28'\n case 9:\n return '#da1e28'\n case 8:\n return '#da1e28'\n case 7:\n return '#fc7b1e'\n case 6:\n return '#fc7b1e'\n case 5:\n return '#fc7b1e'\n case 4:\n return '#fdd13a'\n case 3:\n return '#fdd13a'\n case 2:\n return '#fdd13a'\n case 1:\n return '#fdd13a'\n default:\n return '#24a148'\n }\n}\n\nexport const mapAlertSeverityToHML = numericLevel => {\n if (numericLevel >= 80) {\n return SEVERITY_CATEGORIES.HIGH\n } else if (numericLevel >= 50) {\n return SEVERITY_CATEGORIES.MEDIUM\n } else {\n return SEVERITY_CATEGORIES.LOW\n }\n}\n\nexport const getAlertLevelColorHML = level => {\n if (level === SEVERITY_CATEGORIES.HIGH) {\n return '#da1e28'\n } else if (level === SEVERITY_CATEGORIES.MEDIUM) {\n return '#fc7b1e'\n } else {\n return '#fdd13a'\n }\n}\n\nexport const mapEnglishAlertLevelToNumber = level => {\n if (level === 'Critical') {\n return 10\n } else if (level === 'Warn') {\n return 5\n } else {\n return 0\n }\n}\n\nexport const srnIsCRMActionable = (srn = '') => {\n const type = getTypeFromSrn(srn).toLowerCase()\n return DATA_TYPES_FOR_CRM.includes(type)\n}\n\nexport const widgetSearchUsesFirstCard = (\n searchId,\n savedSearches,\n searchCardId\n) => {\n const fields = getFields(savedSearches, searchId)\n\n if (fields.isEmpty()) {\n return false\n }\n\n const rootFieldId = fields\n .find(statement => !statement.get('parentId'), null, Map())\n .get('id')\n\n return rootFieldId === searchCardId\n}\n\n//========================================================//\n// //\n// GET FRIENDLY CRM TICKET NAME //\n// //\n//========================================================//\n// TODO: move to formatted strings //\n\nconst dictDataBeing = {\n Activity: 'was interacted with',\n ProtectionCreate: 'was interacted with',\n Archive: 'was archived',\n ProtectionDelete: 'had protection deleted',\n Create: 'was created',\n Analytic: 'had analytic setup',\n Read: 'was read',\n Stop: 'was stopped',\n Message: 'had message setup',\n Action: 'was interacted with',\n Update: 'was updated',\n Restore: 'was restored',\n Login: 'was authenticated to',\n DataCreate: 'had data created',\n Authentication: 'was authenticated to',\n DataDelete: 'had data deleted',\n DataUpdate: 'had data updated',\n Logout: 'was logged out of',\n Resume: 'was resumed',\n Configure: 'was configured',\n DataRead: 'had data read',\n Accept: 'was accepted',\n Failure: 'was failed',\n Start: 'was started',\n ProtectionUpdate: 'had protection updated',\n Delete: 'was deleted',\n Audit: 'was audited',\n}\nconst dictDataCan = {\n Activity: 'be interacted with',\n ProtectionCreate: 'have protection created',\n Archive: 'be archived',\n ProtectionDelete: 'be archived',\n Create: 'be created',\n Analytic: 'have analytics performed',\n Read: 'be read',\n Stop: 'be stopped',\n Message: 'have message created',\n Action: 'be interacted with',\n Update: 'be updated',\n Restore: 'be updated',\n Login: 'authenticate into',\n DataCreate: 'have new data created',\n Authentication: 'authenticate into',\n DataDelete: 'have data deleted',\n DataUpdate: 'have data updated',\n Logout: 'be logged out of',\n Resume: 'be resumed',\n Configure: 'be configured',\n DataRead: 'have data read',\n Accept: 'be accepted',\n Failure: 'be failed',\n Start: 'be started',\n ProtectionUpdate: 'have protection updated',\n Delete: 'be deleted',\n Audit: 'be audited',\n}\nconst dictIdentityDoing = {\n Activity: ' interacted with',\n ProtectionCreate: 'created protection keys for',\n Archive: 'archived',\n ProtectionDelete: 'deleted protection keys for',\n Create: 'created new data in',\n Analytic: 'created analytics in',\n Read: 'read configuration about',\n Stop: 'stopped service hosting',\n Message: 'created message in',\n Action: 'interacted with',\n Update: 'updated configuration of',\n Restore: 'restored configuration of ',\n Login: 'authenticated to',\n DataCreate: 'created data in',\n Authentication: 'authenticated to',\n DataDelete: 'deleted data from',\n DataUpdate: 'updated data from',\n Logout: 'logged out of',\n Resume: 'resumed service hosting',\n Configure: 'configured service hosting',\n DataRead: 'read data from',\n Accept: 'accepted',\n Failure: 'failed',\n Start: 'started service hosting',\n ProtectionUpdate: 'updated protection keys for',\n Delete: 'deleted',\n Audit: 'audited',\n}\nconst dictIdentityCan = {\n Activity: 'interact with',\n ProtectionCreate: 'create protection keys for',\n Archive: 'archive',\n ProtectionDelete: 'delete protection keys for',\n Create: 'create new data in',\n Analytic: 'create analytics in',\n Read: 'read configuration about',\n Stop: 'stop service hosting',\n Message: 'create message in',\n Action: 'interact with',\n Update: 'update configuration of',\n Restore: 'restore configuration of',\n Login: 'authenticate to',\n DataCreate: 'create data in',\n Authentication: 'authenticate to',\n DataDelete: 'delete data from',\n DataUpdate: 'update data from',\n Logout: 'logout',\n Resume: 'resume service hosting',\n Configure: 'configure service hosting',\n DataRead: 'read data from',\n Accept: 'accept',\n Failure: 'accept',\n Start: 'start service hosting',\n ProtectionUpdate: 'update protection keys for',\n Delete: 'delete',\n Audit: 'audit',\n}\n\nconst getFriendlyResourceName = params =>\n params.getIn(['resource', 'friendlyName']) ||\n params.getIn(['resource', 'name']) ||\n getNameFromSrn(params.getIn(['resource', 'srn'])) ||\n _.last(params.getIn(['resourceSRN']).split('/')) ||\n '-'\n\nconst niceActionName = ({ type, kind, ac }) => {\n if (type === 'data' && kind === 'being') {\n return dictDataBeing[ac]\n } else if (type === 'data' && kind === 'can') {\n return dictDataCan[ac]\n } else if (type === 'identity' && kind === 'doing') {\n return dictIdentityDoing[ac]\n } else if (type === 'identity' && kind === 'can') {\n return dictIdentityCan[ac]\n }\n}\nconst getFriendlyEvidenceField = (evidence, field) => {\n const items = evidence && evidence.get(field) ? evidence.get(field) : List()\n return !items.isEmpty()\n ? items\n .toJS()\n .map(item => getNameFromSrn(item))\n .join(', ')\n : '-'\n}\n\nconst buildDataTicketName = params => {\n if (\n params.get('ticketKey') === 'accessedBy' ||\n params.get('ticketKey') === 'accessedUsing'\n ) {\n // ACTIONED\n const name = getFriendlyResourceName(params)\n const action = niceActionName({\n type: 'data',\n kind: 'being',\n ac: params.get('actionClassification'),\n })\n const evidence = getFriendlyEvidenceField(\n params.get('evidence'),\n 'resourceSet'\n )\n\n return `${name} ${action} by ${evidence}`\n } else if (\n params.get('ticketKey') === 'activeFrom' ||\n params.get('ticketKey') === 'accessedFrom'\n ) {\n // ACCESSED FROM\n const name = getFriendlyResourceName(params)\n const action = 'was accessed from'\n const evidence = getFriendlyEvidenceField(\n params.get('evidence'),\n 'regionSet'\n )\n\n return `${name} ${action} ${evidence}`\n } else if (\n params.get('ticketKey') === 'hasPermissionTo' ||\n params.get('ticketKey') === 'actionableBy'\n ) {\n // CAN ACTION\n const name = getFriendlyResourceName(params)\n const action = niceActionName({\n type: 'data',\n kind: 'can',\n ac: params.get('actionClassification'),\n })\n const evidence = getFriendlyEvidenceField(\n params.get('evidence'),\n 'resourceSet'\n )\n\n return `${name} has permission to ${action} by ${evidence}`\n } else {\n // CAN BE ACTIONED\n const name = getFriendlyResourceName(params)\n const action = niceActionName({\n type: 'data',\n kind: 'can',\n ac: params.get('actionClassification'),\n })\n const evidence = getFriendlyEvidenceField(\n params.get('evidence'),\n 'resourceSet'\n )\n\n return `${name} can ${action} by ${evidence}`\n }\n}\n\nconst buildIdentityTicketName = params => {\n if (params.get('ticketKey') === 'accessed') {\n // ACTIONING\n const name = getFriendlyResourceName(params)\n const action = niceActionName({\n type: 'identity',\n kind: 'doing',\n ac: params.get('actionClassification'),\n })\n const evidence = getFriendlyEvidenceField(\n params.get('evidence'),\n 'resourceSet'\n )\n\n return `${name} ${action} ${evidence}`\n } else if (\n params.get('ticketKey') === 'activeFrom' ||\n params.get('ticketKey') === 'accessedFrom'\n ) {\n // ACCESSED FROM\n const name = getFriendlyResourceName(params)\n const action = 'was accessed from'\n const evidence = getFriendlyEvidenceField(\n params.get('evidence'),\n 'regionSet'\n )\n return `${name} ${action} ${evidence}`\n } else if (params.get('ticketKey') === 'accessedUsing') {\n const name = getFriendlyResourceName(params)\n const evidenceOne = getFriendlyEvidenceField(\n params.get('evidence'),\n 'resourceSet'\n )\n const evidenceTwo = getFriendlyEvidenceField(\n params.get('evidence'),\n 'userAgentSet'\n )\n\n return `${name} accessed ${evidenceOne} using ${evidenceTwo}`\n } else {\n // CAN ACTION\n const name = getFriendlyResourceName(params)\n const action = niceActionName({\n type: 'identity',\n kind: 'can',\n ac: params.get('actionClassification'),\n })\n const evidence = getFriendlyEvidenceField(\n params.get('evidence'),\n 'resourceSet'\n )\n\n return `${name} has permission to ${action} ${evidence}`\n }\n}\n\nconst getFriendlyCRMTicketName = params => {\n // Switch between identity and data streams using the type of the critical resource\n if (\n params.getIn(['resource', '__typename']) &&\n DATA_TYPES_FOR_CRM.includes(\n params.getIn(['resource', '__typename']).toLowerCase()\n )\n ) {\n return buildDataTicketName(params)\n } else {\n return buildIdentityTicketName(params)\n }\n}\n\nconst getFriendlyPropertyTicketName = ticket => {\n const evidence = ticket.get('evidence') || Map()\n let newValue\n switch (evidence.get('fieldType')) {\n case 'Boolean':\n newValue = evidence.get('boolValue') || 'false'\n break\n case 'String':\n newValue = evidence.get('value') || ''\n break\n case 'Integer':\n newValue = evidence.get('intValue') || 0\n break\n case 'Long':\n newValue = evidence.get('longValue') || 0\n break\n default:\n // eslint-disable-next-line\n console.error('could not create property ticket name from evidence', evidence)\n return ''\n }\n\n return `Property ${ticket.get('ticketKey')} changed to ${newValue}`\n}\n\nexport const getFriendlyTicketName = (ticket, policies) => {\n const ticketKey = ticket.get('ticketKey')\n const ticketType = ticket.get('ticketType')\n if (ticketType === 'Policy') {\n if (ticketKey.includes('ControlPolicy')) {\n const policy = policies.get(ticketKey) || Map()\n return policy.get('title') || ticketKey\n }\n } else if (ticketType === 'Property') {\n return getFriendlyPropertyTicketName(ticket)\n } else if (ticketType === 'Access' || ticketType === 'Activity') {\n return getFriendlyCRMTicketName(ticket)\n } else {\n return ticket.get('title') || '-'\n }\n}\n","import invariant from 'invariant'\nimport isEmpty from 'lodash/isEmpty'\nimport isFunction from 'lodash/isFunction'\nimport isString from 'lodash/isString'\n\nimport checkStore from './checkStore'\nimport createReducer from '../reducers'\n\nexport function injectReducerFactory(store, isValid) {\n return function injectReducer(key, reducer) {\n if (!isValid) checkStore(store)\n\n invariant(\n isString(key) && !isEmpty(key) && isFunction(reducer),\n '(app/utils...) injectReducer: Expected `reducer` to be a reducer function'\n )\n\n // Check `store.injectedReducers[key] === reducer` for hot reloading when a key is the same but a reducer is different\n if (\n Reflect.has(store.injectedReducers, key) &&\n store.injectedReducers[key] === reducer\n )\n return\n\n store.injectedReducers[key] = reducer // eslint-disable-line no-param-reassign\n store.replaceReducer(createReducer(store.injectedReducers, store.history))\n }\n}\n\nexport default function getInjectors(store) {\n checkStore(store)\n\n return {\n injectReducer: injectReducerFactory(store, true),\n }\n}\n","import isEmpty from 'lodash/isEmpty'\nimport isFunction from 'lodash/isFunction'\nimport isString from 'lodash/isString'\nimport invariant from 'invariant'\nimport conformsTo from 'lodash/conformsTo'\n\nimport checkStore from './checkStore'\nimport { DAEMON, ONCE_TILL_UNMOUNT, RESTART_ON_REMOUNT } from './constants'\n\nconst allowedModes = [RESTART_ON_REMOUNT, DAEMON, ONCE_TILL_UNMOUNT]\n\nconst checkKey = key =>\n invariant(\n isString(key) && !isEmpty(key),\n '(app/utils...) injectSaga: Expected `key` to be a non empty string'\n )\n\nconst checkDescriptor = descriptor => {\n const shape = {\n saga: isFunction,\n mode: mode => isString(mode) && allowedModes.includes(mode),\n }\n invariant(\n conformsTo(descriptor, shape),\n '(app/utils...) injectSaga: Expected a valid saga descriptor'\n )\n}\n\nexport function injectSagaFactory(store, isValid) {\n return function injectSaga(key, descriptor = {}, args) {\n if (!isValid) checkStore(store)\n\n const newDescriptor = {\n ...descriptor,\n mode: descriptor.mode || RESTART_ON_REMOUNT,\n }\n const { saga, mode } = newDescriptor\n\n checkKey(key)\n checkDescriptor(newDescriptor)\n\n let hasSaga = Reflect.has(store.injectedSagas, key)\n\n if (process.env.NODE_ENV !== 'production') {\n const oldDescriptor = store.injectedSagas[key]\n // enable hot reloading of daemon and once-till-unmount sagas\n if (hasSaga && oldDescriptor.saga !== saga) {\n oldDescriptor.task.cancel()\n hasSaga = false\n }\n }\n\n if (\n !hasSaga ||\n (hasSaga && mode !== DAEMON && mode !== ONCE_TILL_UNMOUNT)\n ) {\n store.injectedSagas[key] = {\n ...newDescriptor,\n task: store.runSaga(saga, args),\n } // eslint-disable-line no-param-reassign\n }\n }\n}\n\nexport function ejectSagaFactory(store, isValid) {\n return function ejectSaga(key) {\n if (!isValid) checkStore(store)\n\n checkKey(key)\n\n if (Reflect.has(store.injectedSagas, key)) {\n const descriptor = store.injectedSagas[key]\n if (descriptor !== 'done' && descriptor.mode !== DAEMON) {\n descriptor.task.cancel()\n // Clean up in production; in development we need `descriptor.saga` for hot reloading\n if (process.env.NODE_ENV === 'production') {\n // Need some value to be able to detect `ONCE_TILL_UNMOUNT` sagas in `injectSaga`\n store.injectedSagas[key] = 'done' // eslint-disable-line no-param-reassign\n }\n }\n }\n }\n}\n\nexport default function getInjectors(store) {\n checkStore(store)\n\n return {\n injectSaga: injectSagaFactory(store, true),\n ejectSaga: ejectSagaFactory(store, true),\n }\n}\n","import { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\n\nimport {\n ASSIGN_TO_ME,\n ASSIGN_TO_ME_ERROR,\n ASSIGN_TO_ME_SUCCESS,\n ACCEPT_RISK_TICKET,\n ACCEPT_RISK_TICKET_ERROR,\n ACCEPT_RISK_TICKET_SUCCESS,\n CLOSE_TICKET,\n CLOSE_TICKET_ERROR,\n CLOSE_TICKET_SUCCESS,\n FETCH_TICKET_DETAILS,\n FETCH_TICKET_DETAILS_SUCCESS,\n FETCH_TICKET_DETAILS_ERROR,\n REOPEN_TICKET,\n REOPEN_TICKET_ERROR,\n REOPEN_TICKET_SUCCESS,\n SNOOZE_TICKET,\n SNOOZE_TICKET_ERROR,\n SNOOZE_TICKET_SUCCESS,\n FETCH_TICKET_COMMENTS,\n FETCH_TICKET_COMMENTS_SUCCESS,\n FETCH_TICKET_COMMENTS_ERROR,\n ADD_COMMENT,\n ADD_COMMENT_SUCCESS,\n ADD_COMMENT_ERROR,\n FETCH_SIMILAR_TICKETS,\n FETCH_SIMILAR_TICKETS_ERROR,\n FETCH_SIMILAR_TICKETS_SUCCESS,\n CHANGE_SIMILAR_TICKETS_FILTERS,\n REASSIGN_TO_USER,\n REASSIGN_TO_USER_SUCCESS,\n REASSIGN_TO_USER_ERROR,\n FETCH_TICKET_HISTORY,\n FETCH_TICKET_HISTORY_SUCCESS,\n FETCH_TICKET_HISTORY_ERROR,\n FETCH_ACTIVITY_TICKET_ACTIONS,\n FETCH_ACTIVITY_TICKET_ACTIONS_SUCCESS,\n FETCH_ACTIVITY_TICKET_ACTIONS_ERROR,\n FETCH_POLICY_EVIDENCE_LEGACY,\n FETCH_POLICY_EVIDENCE_LEGACY_ERROR,\n FETCH_POLICY_EVIDENCE_LEGACY_SUCCESS,\n FETCH_POLICY_PATH,\n FETCH_POLICY_PATH_SUCCESS,\n FETCH_POLICY_PATH_ERROR,\n BULK_ACTION_COMPLETE,\n BULK_ACTION_START,\n} from './constants'\n\nexport const initialState = fromJS({\n assignToMe: {\n error: false,\n loading: false,\n },\n ticketDetails: {\n data: null,\n error: false,\n loading: false,\n },\n acceptRiskTicketStatus: {\n loading: false,\n error: false,\n },\n closeTicketStatus: {\n loading: false,\n error: false,\n },\n reopenTicketStatus: {\n loading: false,\n error: false,\n },\n snoozeTicketStatus: {\n loading: false,\n error: false,\n },\n reassignToUserStatus: {\n loading: false,\n error: false,\n },\n ticketComments: {\n data: null,\n error: false,\n loading: false,\n },\n addCommentError: false,\n similarTickets: {\n data: [],\n filters: {},\n error: false,\n loading: false,\n },\n ticketHistory: {\n data: null,\n error: false,\n loading: false,\n },\n activityTicketActions: {\n loading: false,\n error: false,\n data: [],\n },\n policyEvidenceLegacy: {\n loading: false,\n error: false,\n data: null,\n },\n policyPath: {\n loading: false,\n error: false,\n data: null,\n },\n bulkActionWorking: false,\n})\n\nconst ticketDetailsReducer = handleActions(\n {\n [ASSIGN_TO_ME]: state =>\n state\n .setIn(['assignToMe', 'loading'], true)\n .setIn(['assignToMe', 'error'], false),\n [ASSIGN_TO_ME_ERROR]: state =>\n state\n .setIn(['assignToMe', 'loading'], false)\n .setIn(['assignToMe', 'error'], true),\n [ASSIGN_TO_ME_SUCCESS]: state =>\n state\n .setIn(['assignToMe', 'loading'], false)\n .setIn(['assignToMe', 'error'], false),\n [ACCEPT_RISK_TICKET]: state =>\n state\n .setIn(['acceptRiskTicketStatus', 'loading'], true)\n .setIn(['acceptRiskTicketStatus', 'error'], false),\n [ACCEPT_RISK_TICKET_ERROR]: state =>\n state\n .setIn(['acceptRiskTicketStatus', 'loading'], false)\n .setIn(['acceptRiskTicketStatus', 'error'], true),\n [ACCEPT_RISK_TICKET_SUCCESS]: state =>\n state\n .setIn(['acceptRiskTicketStatus', 'loading'], false)\n .setIn(['acceptRiskTicketStatus', 'error'], false),\n [CLOSE_TICKET]: state =>\n state\n .setIn(['closeTicketStatus', 'loading'], true)\n .setIn(['closeTicketStatus', 'error'], false),\n [CLOSE_TICKET_ERROR]: state =>\n state\n .setIn(['closeTicketStatus', 'loading'], false)\n .setIn(['closeTicketStatus', 'error'], true),\n [CLOSE_TICKET_SUCCESS]: state => {\n return state\n .setIn(['closeTicketStatus', 'loading'], false)\n .setIn(['closeTicketStatus', 'error'], false)\n },\n\n [FETCH_TICKET_DETAILS]: state =>\n state\n .setIn(['ticketDetails', 'data'], null)\n .setIn(['ticketDetails', 'loading'], true)\n .setIn(['ticketDetails', 'error'], false),\n [FETCH_TICKET_DETAILS_ERROR]: state =>\n state\n .setIn(['ticketDetails', 'loading'], false)\n .setIn(['ticketDetails', 'error'], true)\n .setIn(['ticketDetails', 'data'], null),\n [FETCH_TICKET_DETAILS_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['ticketDetails', 'loading'], false)\n .setIn(['ticketDetails', 'error'], false)\n .setIn(['ticketDetails', 'data'], fromJS(payload.data)),\n [FETCH_POLICY_PATH]: state =>\n state\n .setIn(['policyPath', 'loading'], true)\n .setIn(['policyPath', 'error'], false),\n [FETCH_POLICY_PATH_ERROR]: state =>\n state\n .setIn(['policyPath', 'loading'], false)\n .setIn(['policyPath', 'error'], true),\n [FETCH_POLICY_PATH_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['policyPath', 'loading'], false)\n .setIn(['policyPath', 'error'], false)\n .setIn(['policyPath', 'data'], fromJS(payload.data)),\n [REOPEN_TICKET]: state =>\n state\n .setIn(['reopenTicketStatus', 'loading'], true)\n .setIn(['reopenTicketStatus', 'error'], false),\n [REOPEN_TICKET_ERROR]: state =>\n state\n .setIn(['reopenTicketStatus', 'loading'], false)\n .setIn(['reopenTicketStatus', 'error'], true),\n [REOPEN_TICKET_SUCCESS]: state =>\n state\n .setIn(['reopenTicketStatus', 'loading'], false)\n .setIn(['reopenTicketStatus', 'error'], false),\n [SNOOZE_TICKET]: state =>\n state\n .setIn(['snoozeTicketStatus', 'loading'], true)\n .setIn(['snoozeTicketStatus', 'error'], false),\n [SNOOZE_TICKET_ERROR]: state =>\n state\n .setIn(['snoozeTicketStatus', 'loading'], false)\n .setIn(['snoozeTicketStatus', 'error'], true),\n [SNOOZE_TICKET_SUCCESS]: state =>\n state\n .setIn(['snoozeTicketStatus', 'loading'], false)\n .setIn(['snoozeTicketStatus', 'error'], false),\n [REASSIGN_TO_USER]: state =>\n state\n .setIn(['reassignToUserStatus', 'loading'], true)\n .setIn(['reassignToUserStatus', 'error'], false)\n .setIn(['ticketDetails', 'loading'], true),\n [REASSIGN_TO_USER_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['reassignToUserStatus', 'loading'], false)\n .setIn(['reassignToUserStatus', 'error'], false)\n .setIn(['ticketDetails', 'loading'], false)\n .setIn(['ticketDetails', 'data'], fromJS(payload)),\n [REASSIGN_TO_USER_ERROR]: state =>\n state\n .setIn(['reassignToUserStatus', 'loading'], false)\n .setIn(['ticketDetails', 'loading'], false)\n .setIn(['reassignToUserStatus', 'error'], true),\n [FETCH_TICKET_COMMENTS]: state =>\n state\n .setIn(['ticketComments', 'data'], null)\n .setIn(['ticketComments', 'error'], false)\n .setIn(['ticketComments', 'loading'], true),\n [FETCH_TICKET_COMMENTS_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['ticketComments', 'data'], fromJS(payload))\n .setIn(['ticketComments', 'loading'], false),\n [FETCH_TICKET_COMMENTS_ERROR]: state =>\n state\n .setIn(['ticketComments', 'data'], null)\n .setIn(['ticketComments', 'error'], true)\n .setIn(['ticketComments', 'loading'], false),\n [ADD_COMMENT]: state => state.setIn(['ticketComments', 'loading'], true),\n [ADD_COMMENT_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['ticketComments', 'loading'], false)\n .updateIn(['ticketComments', 'data'], comments =>\n comments.push(fromJS(payload))\n ),\n [ADD_COMMENT_ERROR]: state => state.set('addCommentError', true),\n [FETCH_SIMILAR_TICKETS]: state =>\n state\n .setIn(['similarTickets', 'loading'], true)\n .setIn(['similarTickets', 'error'], false),\n [FETCH_SIMILAR_TICKETS_ERROR]: state =>\n state\n .setIn(['similarTickets', 'loading'], false)\n .setIn(['similarTickets', 'error'], true),\n [FETCH_SIMILAR_TICKETS_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['similarTickets', 'loading'], false)\n .setIn(['similarTickets', 'error'], false)\n .setIn(['similarTickets', 'data'], fromJS(payload.data)),\n [CHANGE_SIMILAR_TICKETS_FILTERS]: (state, { payload }) =>\n state\n .setIn(['similarTickets', 'filters'], fromJS(payload.filter))\n .setIn(['similarTickets', 'loading'], true),\n [FETCH_TICKET_HISTORY]: state =>\n state.setIn(['ticketHistory', 'loading'], true),\n [FETCH_TICKET_HISTORY_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['ticketHistory', 'loading'], false)\n .setIn(['ticketHistory', 'error'], false)\n .setIn(['ticketHistory', 'data'], fromJS(payload)),\n [FETCH_TICKET_HISTORY_ERROR]: state => {\n return state\n .setIn(['ticketHistory', 'loading'], false)\n .setIn(['ticketHistory', 'error'], true)\n .setIn(['ticketHistory', 'data'], null)\n },\n [ADD_COMMENT_ERROR]: state => state.set('addCommentError', true),\n [FETCH_ACTIVITY_TICKET_ACTIONS]: state =>\n state\n .setIn(['activityTicketActions', 'loading'], true)\n .setIn(['activityTicketActions', 'error'], false),\n [FETCH_ACTIVITY_TICKET_ACTIONS_ERROR]: state =>\n state\n .setIn(['activityTicketActions', 'loading'], false)\n .setIn(['activityTicketActions', 'error'], true),\n [FETCH_ACTIVITY_TICKET_ACTIONS_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['activityTicketActions', 'loading'], false)\n .setIn(['activityTicketActions', 'error'], false)\n .setIn(['activityTicketActions', 'data'], fromJS(payload.data)),\n\n [FETCH_POLICY_EVIDENCE_LEGACY]: state =>\n state\n .setIn(['policyEvidenceLegacy', 'loading'], true)\n .setIn(['policyEvidenceLegacy', 'error'], false),\n [FETCH_POLICY_EVIDENCE_LEGACY_ERROR]: state =>\n state\n .setIn(['policyEvidenceLegacy', 'loading'], false)\n .setIn(['policyEvidenceLegacy', 'error'], true),\n [FETCH_POLICY_EVIDENCE_LEGACY_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['policyEvidenceLegacy', 'loading'], false)\n .setIn(['policyEvidenceLegacy', 'error'], false)\n .setIn(['policyEvidenceLegacy', 'data'], fromJS(payload.data)),\n [BULK_ACTION_START]: state => state.set('bulkActionWorking', true),\n [BULK_ACTION_COMPLETE]: state => state.set('bulkActionWorking', false),\n },\n initialState\n)\n\nexport default ticketDetailsReducer\n","import gql from 'graphql-tag'\nimport { fromJS } from 'immutable'\nimport _ from 'lodash'\nimport { useEffect, useState } from 'react'\nimport { getClient } from 'apolloClient'\nimport { useAuth0 } from 'react-auth0-wrapper'\n\nconst SONRAI_USERS_QUERY = gql`\n query currentUser {\n SonraiCurrentUsers {\n items {\n profile\n srn\n roleAssignments {\n items {\n scope\n role {\n items {\n expandedPermissions\n }\n }\n }\n }\n }\n }\n }\n`\n\n/**\n * This function takes the results of the query SONRAI_USERS_QUERY and\n * transforms the results into a structure like this:\n *\n * {\n * [permissionp[0]]: {\n * scopes: {\n * [scope[0].value]: {\n * ...scope[0]\n * },\n * [scope[1].value]: {\n * ...[scope[1]]\n * }\n * }\n * },\n * [permission[1]]: {\n * ...etc.\n * },\n * ...etc.\n * }\n */\nasync function fetchUserPermissions() {\n const client = await getClient()\n const result = await client.query({ query: SONRAI_USERS_QUERY })\n\n // try to get the user from the response, throw if not returned\n const currentUserPath = ['data', 'SonraiCurrentUsers', 'items', 0]\n const currentUser = _.get(result, currentUserPath, null)\n if (!currentUser) {\n throw new Error(`Result did not return ${currentUserPath.join('.')}`)\n }\n\n if (\n !currentUser.roleAssignments ||\n !_.isArray(currentUser.roleAssignments.items)\n ) {\n throw new Error(`current user roleAssignments is not an array`)\n }\n\n // this will hold the final results\n const allPermissions = {}\n\n currentUser.roleAssignments.items.forEach(ass => {\n const assPermissions = desturctureAssignment(ass)\n mergeRoleAssignments(allPermissions, assPermissions)\n })\n\n return allPermissions\n}\n\n/**\n * Take the role assignment and turn it into the structure for the same\n * structure as for fetchUserPermissions\n */\nfunction desturctureAssignment(roleAssignment) {\n const scope = roleAssignment.scope\n const permissions = roleAssignment.role.items.reduce((permList, role) => {\n const { expandedPermissions } = role\n for (const perm of expandedPermissions) {\n if (!permList.includes(perm)) {\n permList.push(perm)\n }\n }\n return permList\n }, [])\n\n // turn into object\n return permissions.reduce((accumulator, perm) => {\n return {\n ...accumulator,\n [perm]: {\n [scope]: {},\n },\n }\n }, {})\n}\n\n/**\n * merge the permission iformation for two role assignments\n */\nfunction mergeRoleAssignments(to, from) {\n for (let perm of Object.keys(from)) {\n if (!to[perm]) {\n to[perm] = { scopes: {} }\n }\n const scope = from[perm]\n if (!to[perm].scopes[scope]) {\n Object.assign(to[perm].scopes, scope)\n }\n }\n}\n\nlet initialState = fromJS({\n data: null,\n error: null,\n loading: true,\n})\n\n// placeholder for results\nconst results = { permissions: null }\n\nexport function useSonraiUserPermissions() {\n const { initialTokenLoad } = useAuth0()\n const [state, setState] = useState(initialState)\n\n useEffect(() => {\n async function fetchData() {\n await initialTokenLoad\n try {\n // only set this promise one time, so we don't fetch many times\n if (!results.permissions) {\n results.permissions = fetchUserPermissions()\n }\n\n const permissionsData = await results.permissions\n const newState = state\n .set('loading', false)\n .set('data', permissionsData)\n setState(newState)\n\n // make the initial state for the hook the state with the loaded data\n // so it doesn't get fetched again when people use the hook\n initialState = newState\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('There was an error fetching the user permissions', e)\n setState(state.set('loading', false).set('error', true))\n }\n }\n\n // only fetch the data if we have not already fetched it\n if (state.get('loading')) {\n fetchData()\n }\n return () => {}\n }, [])\n return state\n}\n\nexport default useSonraiUserPermissions\n","module.exports = __webpack_public_path__ + \"25e88a7db57dc49438956186d662490b.png\";","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport messages from 'globalTranslations'\n\nclass TicketStatusIcon extends React.Component {\n getIconInfo = value => {\n switch (value) {\n case 'NEW':\n return {\n iconName: 'exclamation-triangle-solid',\n iconColor: 'rgb(242, 157, 56)',\n }\n case 'SNOOZED':\n return {\n iconName: 'clock',\n iconColor: 'rgb(101, 157, 213)',\n }\n case 'RISK_ACCEPTED':\n case 'CLOSED':\n return {\n iconName: 'check-circle',\n iconColor: 'rgb(70, 155, 48)',\n }\n }\n }\n\n render() {\n const { value } = this.props\n if (!value) {\n return null\n }\n const { iconColor, iconName } = this.getIconInfo(value)\n return (\n \n {iconName && (\n \n \n \n )}\n \n \n )\n }\n}\n\nTicketStatusIcon.propTypes = {\n value: PropTypes.string.isRequired,\n}\n\nexport default TicketStatusIcon\n","/*\n *\n * LanguageProvider reducer\n *\n */\n\nimport { fromJS } from 'immutable'\nimport { CHANGE_LOCALE } from './constants'\nimport { DEFAULT_LOCALE } from '../App/constants'\nimport { handleActions } from 'redux-actions'\n\nconst initialState = fromJS({\n locale: DEFAULT_LOCALE,\n})\n\nconst languageProviderReducer = handleActions(\n {\n [CHANGE_LOCALE]: (state, { payload }) =>\n state.set('locale', payload.locale),\n },\n initialState\n)\n\nexport default languageProviderReducer\n","/*\n *\n * LanguageProvider constants\n *\n */\n\nexport const CHANGE_LOCALE = 'app/LanguageToggle/CHANGE_LOCALE'\nexport const DEFAULT_LOCALE = 'en'\n","/**\n * Combine all reducers in this file and export the combined reducers.\n */\n\nimport { combineReducers } from 'redux-immutable'\nimport { connectRouter } from 'connected-react-router/immutable'\nimport languageProviderReducer from 'containers/LanguageProvider/reducer'\n\n/**\n * Creates the main reducer with the dynamically injected ones\n */\nexport default function createReducer(injectedReducers, history) {\n return combineReducers({\n router: connectRouter(history),\n language: languageProviderReducer,\n ...injectedReducers,\n })\n}\n","import { fromJS, List } from 'immutable'\nexport const modifyFieldsForSRN = (srn, rootIndex, fields) => {\n // some older searches annoyingly don't have an and[] field in the arg by\n // default so need to insert one here otherwise null pointer exception\n if (!fields.getIn([rootIndex, 'arguments']).has('and')) {\n fields = fields.setIn([rootIndex, 'arguments', 'and'], List())\n }\n\n const rootNodeType = fields\n .get(rootIndex)\n .getIn(['definition', 'type', 'name'])\n\n if (rootNodeType === 'ActionEdgeRelation') {\n fields = fields.updateIn([rootIndex, 'arguments', 'or'], List(), args =>\n args\n .push(\n fromJS({\n performedByValue: { value: srn, op: 'EQ', caseSensitive: true },\n })\n )\n .push(\n fromJS({\n performedOnValue: { value: srn, op: 'EQ', caseSensitive: true },\n })\n )\n )\n } else {\n fields = fields.updateIn([rootIndex, 'arguments', 'and'], List(), args =>\n args.push(\n fromJS({\n srn: { value: srn, op: 'EQ', caseSensitive: true },\n })\n )\n )\n }\n return fields\n}\n","import gql from 'graphql-tag'\n\nexport const ACCEPT_RISK_MUTATION = gql`\n mutation acceptRiskTicket($srn: String) {\n AcceptRiskTickets(input: { srns: [$srn] }) {\n successCount\n failureCount\n }\n }\n`\n\nexport const CLOSE_TICKET_MUTATION = gql`\n mutation closeTicket($srn: String) {\n CloseTickets(input: { srns: [$srn] }) {\n successCount\n failureCount\n }\n }\n`\n\nexport const REOPEN_TICKET_MUTATION = gql`\n mutation reopenTicket($srn: String) {\n ReopenTickets(input: { srns: [$srn] }) {\n successCount\n failureCount\n }\n }\n`\n\nexport const SNOOZE_TICKET_MUTATION = gql`\n mutation snoozeTicket($srn: String, $snoozedUntil: DateTime) {\n SnoozeTickets(snoozedUntil: $snoozedUntil, input: { srns: [$srn] }) {\n successCount\n failureCount\n }\n }\n`\n\nexport const FETCH_TICKET_DETAILS_QUERY = gql`\n query fetchTicketDetails($srn: String!) {\n Tickets(where: { srn: { value: $srn } }) {\n items(limit: 1) {\n assignedTo\n account\n actionClassification\n createdBy\n createdDate\n description\n firstSeen\n flag\n isSnoozed\n lastSeen\n orgName\n resourceId\n resourceLabel\n resourceSRN\n resourceType\n severityCategory\n severityNumberic\n snoozedUntil\n srn\n status\n swimlaneSRNs\n ticketKey\n ticketType\n title\n transitionDate\n transitionedBy\n templateSRN\n customFields {\n name\n type\n value\n isMulti\n }\n evidence {\n policyEvidence\n count\n conditions\n fieldType\n boolValue\n intValue\n longValue\n value\n prevBoolValue\n prevIntValue\n prevLongValue\n prevValue\n resourceSet\n path\n policyEvidence\n regionSet\n userAgentSet\n }\n resourceSRN\n severityNumeric\n severityCategory\n actionClassification\n resourceLabel\n resourceType\n swimlaneSRNs\n resource {\n __typename\n account\n active\n cloudType\n country\n createdDate\n friendlyName\n importance\n label\n name\n region\n resourceId\n srn\n swimlaneSRNs\n tagSet\n }\n }\n }\n }\n`\n\nexport const FETCH_TICKET_COMMENTS_QUERY = gql`\n query fetchComments($ticketSrn: String!) {\n TicketComments(where: { ticketSrn: { value: $ticketSrn } }) {\n items(limit: 1000) {\n srn\n resourceId\n body\n createdDate\n createdBy\n }\n }\n }\n`\n\nexport const ADD_TICKET_COMMENT_MUTATION = gql`\n mutation addTicketComment(\n $ticketSrn: String!\n $body: String!\n $createdBy: String!\n ) {\n CreateTicketComment(\n input: { body: $body, ticketSrn: $ticketSrn, createdBy: $createdBy }\n ) {\n resourceId\n srn\n createdBy\n createdDate\n body\n }\n }\n`\n\nexport const FETCH_SIMILAR_TICKETS_QUERY = gql`\n query fetchSimilarTicket($ticketFilter: TicketsFilter) {\n Tickets(where: $ticketFilter) {\n items(limit: 200) {\n srn\n resourceId\n createdDate\n createdBy\n orgName\n assignedTo\n transitionedBy\n transitionDate\n isSnoozed\n snoozedUntil\n ticketType\n ticketKey\n description\n title\n status\n account\n firstSeen\n lastSeen\n flag\n evidence {\n policyEvidence\n count\n fieldType\n boolValue\n intValue\n longValue\n value\n prevBoolValue\n prevIntValue\n prevLongValue\n prevValue\n resourceSet\n conditions\n path\n regionSet\n userAgentSet\n }\n resourceSRN\n resource {\n name\n srn\n friendlyName\n }\n severityNumeric\n severityCategory\n actionClassification\n resourceLabel\n resourceType\n swimlaneSRNs\n }\n }\n }\n`\n\nexport const REASSIGN_TICKET_MUTATION = gql`\n mutation reassignToUser($ticketSrn: String!, $userSrn: String!) {\n AssignTicket(input: { ticketSrn: $ticketSrn, userSrn: $userSrn }) {\n srn\n resourceId\n createdDate\n createdBy\n orgName\n assignedTo\n transitionedBy\n transitionDate\n isSnoozed\n snoozedUntil\n ticketType\n ticketKey\n description\n title\n status\n account\n firstSeen\n lastSeen\n flag\n evidence {\n policyEvidence\n count\n fieldType\n boolValue\n intValue\n longValue\n value\n prevBoolValue\n prevIntValue\n prevLongValue\n prevValue\n resourceSet\n conditions\n path\n regionSet\n userAgentSet\n }\n resourceSRN\n resource {\n name\n srn\n friendlyName\n }\n severityNumeric\n severityCategory\n actionClassification\n resourceLabel\n resourceType\n swimlaneSRNs\n }\n }\n`\n\nexport const FETCH_TICKET_HISTORY_QUERY = gql`\n query getTicketHistory($ticketSrn: String!) {\n TicketHistoryLogs(where: { ticketSrn: { value: $ticketSrn } }) {\n items(limit: 1000) {\n srn\n resourceId\n createdDate\n actorSrn\n actionType\n message\n artifactSrn\n }\n }\n }\n`\n\nexport const ACTIONS_QUERY = gql`\n query ticketActionsQuery($actionFilter: ActionFilter, $limit: Int = 1000) {\n Actions(where: $actionFilter) {\n count\n items(limit: $limit) {\n srn\n eventName\n service\n createdDate\n timestamp\n }\n }\n }\n`\n\nexport const TICKET_BOT_ACTIONS_QUERY = gql`\n query ticketBotActions($metadataFilter: String) {\n Actions(where: { metadata: { op: EQ, value: $metadataFilter } }) {\n count\n items {\n succeeded\n eventName\n createdDate\n srn\n metadata\n resourceId\n }\n }\n }\n`\n","import { all, takeLatest, put, select } from 'redux-saga/effects'\nimport { List, Map } from 'immutable'\nimport _ from 'lodash'\nimport moment from 'moment'\nimport { QueryBuilder } from 'query-builder'\nimport { getClient } from 'apolloClient'\nimport gql from 'graphql-tag'\n\nimport { modifyFieldsForSRN } from './utils'\nimport { metadataToObj, shiftDateArgs } from 'utils/sonraiUtils'\nimport { selectSonraiUserSrn } from 'containers/UserProfileData/selectors'\n\nimport {\n assignToMeError,\n assignToMeSuccess,\n acceptRiskTicketError,\n acceptRiskTicketSuccess,\n closeTicketError,\n closeTicketSuccess,\n fetchTicketDetailsError,\n fetchTicketDetailsSuccess,\n reopenTicketError,\n reopenTicketSucces,\n snoozeTicketError,\n snoozeTicketSuccess,\n fetchTicketCommentsSuccess,\n fetchTicketCommentsError,\n addCommentSuccess,\n addCommentError,\n fetchSimilarTicketsError,\n fetchSimilarTicketsSuccess,\n reassignToUserSuccess,\n reassignToUserError,\n fetchTicketHistorySuccess,\n fetchTicketHistoryError,\n fetchActivityTicketActionsError,\n fetchActivityTicketActionsSuccess,\n fetchPolicyEvidenceLegacyError,\n fetchPolicyEvidenceLegacySuccess,\n fetchPolicyPathSuccess,\n fetchPolicyPathError,\n ticketStatusChangeSuccess,\n closeTicketsSuccess,\n bulkActionComplete,\n bulkActionStart,\n} from './actions'\n\nimport {\n ASSIGN_TO_ME,\n ACCEPT_RISK_TICKET,\n CLOSE_TICKET,\n FETCH_TICKET_DETAILS,\n REOPEN_TICKET,\n SNOOZE_TICKET,\n FETCH_TICKET_COMMENTS,\n ADD_COMMENT,\n FETCH_SIMILAR_TICKETS,\n CHANGE_SIMILAR_TICKETS_FILTERS,\n REASSIGN_TO_USER,\n FETCH_TICKET_HISTORY,\n FETCH_ACTIVITY_TICKET_ACTIONS,\n FETCH_POLICY_EVIDENCE_LEGACY,\n FETCH_POLICY_PATH,\n CLOSE_TICKETS,\n ASSIGN_TICKETS,\n ACCEPT_RISK_TICKETS,\n SNOOZE_TICKETS,\n BULK_COMMENT,\n BULK_TAG,\n} from './constants'\n\nimport {\n ACCEPT_RISK_MUTATION,\n CLOSE_TICKET_MUTATION,\n FETCH_TICKET_DETAILS_QUERY,\n REOPEN_TICKET_MUTATION,\n SNOOZE_TICKET_MUTATION,\n FETCH_TICKET_COMMENTS_QUERY,\n ADD_TICKET_COMMENT_MUTATION,\n FETCH_SIMILAR_TICKETS_QUERY,\n REASSIGN_TICKET_MUTATION,\n FETCH_TICKET_HISTORY_QUERY,\n ACTIONS_QUERY,\n TICKET_BOT_ACTIONS_QUERY,\n} from './queries'\n\nimport {\n selectSavedSearches,\n selectQueryTypes,\n} from 'containers/SonraiData/selectors'\n\nimport { selectPolicies } from 'containers/ControlFrameworkData/selectors'\nimport { selectTicketDetails, selectSimilarTickets } from './selectors'\n\nexport async function performTicketFetch({ srn }) {\n const client = await getClient()\n const result = await client.query({\n query: FETCH_TICKET_DETAILS_QUERY,\n variables: { srn },\n })\n\n const path = ['data', 'Tickets', 'items', 0]\n const ticket = _.get(result, path, null)\n if (ticket == null) {\n throw new Error(`No ticket could be found at path ${path}`)\n }\n return ticket\n}\n\nfunction* fetchResourceOnTicket(srn) {\n try {\n const client = getClient()\n const result = yield client.query({\n query: gql`\n query getResourceOnTicket($srn: String!) {\n Entities(where: { srn: { value: $srn } }) {\n items {\n srn\n tagSet\n ... on Resource {\n account\n active\n createdDate\n cloudType\n country\n friendlyName\n name\n region\n resourceId\n importance\n label\n swimlaneSRNs\n __typename\n }\n }\n }\n }\n `,\n variables: { srn },\n })\n const path = ['data', 'Entities', 'items', 0]\n return _.get(result, path)\n } catch (e) {\n // eslint-disable-next-line\n console.error('An error happened fetching the resource on ticket', e)\n }\n}\n\n//TODO: Remove policyPath fetch as it is no longer used. Remove from actions/reducer etc.\nfunction* fetchPolicyPath({ payload }) {\n try {\n const srn = payload.resourceSrn\n\n const searchId = payload.searchId\n\n if (!searchId) {\n return\n }\n\n const searches = yield select(selectSavedSearches)\n const search = searches.get(searchId, Map())\n\n if (search.isEmpty()) {\n return\n }\n\n const queryTypes = yield select(selectQueryTypes)\n\n let fields = search.getIn(['query', 'fields'])\n const rootIndex = fields\n .find(field => !field.get('parentId'), null, Map())\n .get('id')\n fields = modifyFieldsForSRN(srn, rootIndex, fields)\n\n fields = fields.map(field =>\n field\n .updateIn(['arguments', 'and'], List(), andArgs =>\n shiftDateArgs(andArgs, payload.timestamp)\n )\n .updateIn(['arguments', 'or'], List(), orArgs =>\n shiftDateArgs(orArgs, payload.timestamp)\n )\n )\n\n const queryBuilder = new QueryBuilder({\n query: fields,\n types: queryTypes,\n })\n queryBuilder.enableFlattenMode()\n queryBuilder.skipCounts()\n\n const queryConfig = queryBuilder.buildPivotableSource(rootIndex)\n\n const client = getClient()\n const response = yield client.query({\n query: gql`\n ${queryConfig.gqlStatement}\n `,\n variables: queryConfig.variables,\n })\n\n yield put(fetchPolicyPathSuccess(response))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error fetching data', e)\n yield put(fetchPolicyPathError())\n }\n}\n\nfunction* fetchNextEscalationOnTicket(srn) {\n try {\n const client = getClient()\n const result = yield client.query({\n query: gql`\n query getNextEscalation($srn: String!) {\n GetNextEscalation(input: { ticktSrn: $srn }) {\n escalationTime\n rule {\n actionType\n assignUser {\n userSrn\n }\n assignRole {\n ActionRoleType\n }\n escalateToBot {\n botSrn\n }\n }\n }\n }\n `,\n variables: { srn },\n })\n const path = ['data', 'GetNextEscalation']\n if (_.isArray(result.errors) && result.errors.length > 0) {\n throw new Error(JSON.stringify(result.errors))\n }\n return _.get(result, path)\n } catch (e) {\n return null\n // eslint-disable-next-line\n console.error('An error happened fetching the next escalation on ticket', e)\n }\n}\n\nfunction* fetchTicketDetails(action) {\n try {\n const ticket = yield performTicketFetch(action.payload)\n const resource = yield fetchResourceOnTicket(ticket.resourceSRN)\n const nextEscalation = yield fetchNextEscalationOnTicket(ticket.srn)\n ticket.resource = resource || {}\n ticket.nextEscalation = nextEscalation\n yield put(fetchTicketDetailsSuccess({ data: ticket }))\n } catch (e) {\n // eslint-disable-next-line\n console.error('An error happened in fetchTicketDetails: ', e)\n yield put(fetchTicketDetailsError())\n }\n}\n\nfunction* acceptRiskTicket(action) {\n try {\n const { srn } = action.payload\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: ACCEPT_RISK_MUTATION,\n variables: { srn },\n })\n\n if (_.isArray(result.errors) && result.errors.length > 0) {\n throw new Error(JSON.stringify(result.errors))\n }\n\n const path = ['data', 'AcceptRiskTickets', 'successCount']\n const data = _.get(result, path, null)\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n yield yield all([\n updateTicketStatus(srn, 'RISK_ACCEPTED'),\n put(acceptRiskTicketSuccess()),\n ])\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An errror occurred closing ticket', e)\n yield put(acceptRiskTicketError())\n }\n}\n\nfunction* closeTicket(action) {\n try {\n const { srn } = action.payload\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: CLOSE_TICKET_MUTATION,\n variables: { srn },\n })\n\n if (_.isArray(result.errors) && result.errors.length > 0) {\n throw new Error(JSON.stringify(result.errors))\n }\n\n const path = ['data', 'CloseTickets', 'successCount']\n const data = _.get(result, path, null)\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n yield yield all([\n updateTicketStatus(srn, 'CLOSED'),\n put(closeTicketSuccess()),\n ])\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An errror occurred closing ticket', e)\n yield put(closeTicketError())\n }\n}\n\nfunction* reopenTicket(action) {\n try {\n const { srn } = action.payload\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: REOPEN_TICKET_MUTATION,\n variables: { srn },\n })\n\n if (_.isArray(result.errors) && result.errors.length > 0) {\n throw new Error(JSON.stringify(result.errors))\n }\n\n const path = ['data', 'ReopenTickets', 'successCount']\n const data = _.get(result, path, null)\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n yield all([updateTicketStatus(srn, 'NEW'), put(reopenTicketSucces())])\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An errror occurred closing ticket', e)\n yield put(reopenTicketError())\n }\n}\n\nfunction* snoozeTicket(action) {\n try {\n const { srn, snoozedUntil } = action.payload\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: SNOOZE_TICKET_MUTATION,\n variables: { srn, snoozedUntil },\n })\n\n if (_.isArray(result.errors) && result.errors.length > 0) {\n throw new Error(JSON.stringify(result.errors))\n }\n\n const path = ['data', 'SnoozeTickets', 'successCount']\n const data = _.get(result, path, null)\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n yield all([updateTicketStatus(srn, 'SNOOZED'), put(snoozeTicketSuccess())])\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error ocurred snoozing ticket', e)\n yield put(snoozeTicketError())\n }\n}\n\nfunction* assignToMe({ payload }) {\n try {\n const { ticketSrn, userSrn } = payload\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: REASSIGN_TICKET_MUTATION,\n variables: { ticketSrn, userSrn },\n })\n\n if (_.isArray(result.errors) && result.errors.length > 0) {\n throw new Error(JSON.stringify(result.errors))\n }\n\n const path = ['data', 'AssignTicket']\n const data = _.get(result, path, null)\n\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n yield put(assignToMeSuccess(data))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error ocurred reassigning ticket', e)\n yield put(assignToMeError())\n }\n}\n\nfunction* reassignTicketToUser({ payload }) {\n try {\n const { ticketSrn, userSrn } = payload\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: REASSIGN_TICKET_MUTATION,\n variables: { ticketSrn, userSrn },\n })\n\n if (_.isArray(result.errors) && result.errors.length > 0) {\n throw new Error(JSON.stringify(result.errors))\n }\n\n const path = ['data', 'AssignTicket']\n const data = _.get(result, path, null)\n\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n yield put(reassignToUserSuccess(data))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error ocurred reassigning ticket', e)\n yield put(reassignToUserError())\n }\n}\n\nfunction* updateTicketStatus(srn, newStatus) {\n const ticketDetails = (yield select(selectTicketDetails)).get('data', null)\n if (\n ticketDetails == null ||\n !(ticketDetails instanceof Map) ||\n srn !== ticketDetails.get('srn')\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n `could not update internal ticket (${srn}) details state after state change: ${ticketDetails}`\n )\n return\n }\n\n yield put(\n fetchTicketDetailsSuccess({ data: ticketDetails.set('status', newStatus) })\n )\n\n yield put(ticketStatusChangeSuccess({ srn, newStatus }))\n}\n\nfunction* getTicketComments(action) {\n try {\n const { ticketSrn } = action.payload\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: FETCH_TICKET_COMMENTS_QUERY,\n variables: { ticketSrn },\n })\n\n const path = ['data', 'TicketComments', 'items']\n const data = _.get(result, path, null)\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n\n yield put(fetchTicketCommentsSuccess(data))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error ocurred getting ticket comments', e)\n yield put(fetchTicketCommentsError())\n }\n}\n\nfunction* addTicketComment(action) {\n try {\n const { ticketSrn, body, createdBy } = action.payload\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: ADD_TICKET_COMMENT_MUTATION,\n variables: { ticketSrn, body, createdBy },\n })\n\n const path = ['data', 'CreateTicketComment']\n const data = _.get(result, path, null)\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n\n yield put(addCommentSuccess(data))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error ocurred creating a comment', e)\n yield put(addCommentError())\n }\n}\n\nfunction* fetchSimilarTickets(action) {\n const { ticket } = action.payload\n try {\n // we need to define how to fetch similar tickets:\n const ticketFilter = {}\n\n // if it's a policy ticket, same policy + swimlanes\n if (ticket.ticketType === 'Policy') {\n ticketFilter.ticketType === { value: ticket.ticketKey }\n ticketFilter.ticketKey = { value: ticket.ticketKey }\n ticketFilter.swimlaneSrns = {\n op: 'IN_LIST',\n values: [...ticket.swimlaneSRNs],\n }\n }\n\n // if it's a CRM ticket, same ticketType, ticketKey, swimlanes and resource\n else if (['Access', 'Activity', 'Property'].includes(ticket.ticketType)) {\n ticketFilter.ticketType === { value: ticket.ticketKey }\n ticketFilter.ticketKey = { value: ticket.ticketKey }\n ticketFilter.swimlaneSrns = {\n op: 'IN_LIST',\n values: [...ticket.swimlaneSRNs],\n }\n ticketFilter.resourceSRN = { value: ticket.resourceSRN }\n }\n\n // if it's a custom ticket, look for other custom tickets for the same resourceSRN\n else if (['Custom'].includes(ticket.ticketType)) {\n ticketFilter.ticketKey = { value: ticket.ticketKey }\n ticketFilter.swimlaneSrns = {\n op: 'IN_LIST',\n values: [...ticket.swimlaneSRNs],\n }\n ticketFilter.resourceSRN = { value: ticket.resourceSRN }\n }\n\n // otherwise, who knows how to fetch simliar tickets! this must be a case\n // we don't handle yet, so throw error\n else {\n // eslint-disable-next-line no-console\n throw new Error(`Unknown type of ticket: ${ticket.ticketKey}`)\n }\n\n ticketFilter.srn = { op: 'NEQ', value: ticket.srn }\n\n const filters = (yield select(selectSimilarTickets)).get('filters')\n const client = yield getClient()\n const result = yield client.query({\n query: FETCH_SIMILAR_TICKETS_QUERY,\n variables: {\n ticketFilter: {\n ...filters.toJS(),\n ...ticketFilter,\n },\n },\n })\n\n const path = ['data', 'Tickets', 'items']\n const data = _.get(result, path, null)\n if (data == null) {\n throw new Error(`no data at path ${path}`)\n }\n yield put(fetchSimilarTicketsSuccess({ data }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error happen loading similar tickets', e)\n yield put(fetchSimilarTicketsError())\n }\n}\n\nfunction* getTicketHistory({ payload }) {\n const { ticketSrn } = payload\n try {\n const client = yield getClient()\n const result = yield client.mutate({\n mutation: FETCH_TICKET_HISTORY_QUERY,\n variables: { ticketSrn },\n })\n\n const path = ['data', 'TicketHistoryLogs', 'items']\n const data = _.get(result, path, null)\n if (data === null) {\n // check if we got a valid response, if not, it's a chance error happen\n throw new Error(`no result at path ${path}`)\n }\n\n const botActions = yield client.mutate({\n mutation: TICKET_BOT_ACTIONS_QUERY,\n variables: { metadataFilter: `data.ticket.srn:${ticketSrn}` },\n })\n\n const actionData = _.get(botActions, ['data', 'Actions', 'items'], null)\n if (actionData === null) {\n throw new Error(`Error fetching Bot Actions`)\n }\n\n const combinedData = data\n .map(d => {\n d.succeeded = true\n return d\n })\n .concat(\n actionData.map(action => {\n const metadata = metadataToObj(action.metadata)\n let message = action.eventName\n\n if (action.eventName === 'ApplyRemediation') {\n if (action.succeeded) {\n message = 'Auto Remediation successfully executed'\n } else {\n message = 'Auto Remediation failed to execute'\n }\n }\n\n return {\n srn: action.srn,\n message: message,\n actionType: action.eventName,\n createdDate: action.createdDate,\n actorSrn: metadata.botId,\n resourceId: action.resourceId,\n succeeded: action.succeeded,\n }\n })\n )\n\n yield put(fetchTicketHistorySuccess(combinedData))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error fetching ticket history', e)\n yield put(fetchTicketHistoryError())\n }\n}\n\nfunction* fetchActivityTicketActions(action) {\n try {\n const client = getClient()\n const { ticket } = action.payload\n let actionFilter = {}\n\n switch (ticket.ticketKey) {\n case 'accessed':\n Object.assign(actionFilter, {\n performedByValue: { value: ticket.resourceSRN },\n performedOnValue: {\n value: _.first(ticket.evidence.resourceSet) || '',\n },\n hasActionClassificationValue: { value: ticket.actionClassification },\n })\n break\n case 'accessedBy':\n Object.assign(actionFilter, {\n performedOnValue: { value: ticket.resourceSRN },\n performedByValue: { value: ticket.evidence.resourceSet[0] },\n hasActionClassificationValue: { value: ticket.actionClassification },\n })\n break\n case 'activeFrom':\n Object.assign(actionFilter, {\n performedByValue: { value: ticket.resourceSRN },\n performedAtCountryValue: { value: ticket.evidence.regionSet[0] },\n })\n break\n case 'accessedFrom':\n Object.assign(actionFilter, {\n performedOnValue: { value: ticket.resourceSRN },\n performedAtCountryValue: { value: ticket.evidence.regionSet[0] },\n })\n break\n case 'accessedUsing':\n Object.assign(actionFilter, {\n performedByValue: { value: ticket.resourceSRN },\n userAgent: { value: ticket.evidence.userAgentSet[0] },\n })\n break\n }\n\n const { firstSeen, lastSeen } = ticket\n actionFilter.createdDate = { and: [] }\n if (firstSeen) {\n actionFilter.createdDate.and.push({ op: 'GTE', value: firstSeen })\n }\n\n if (lastSeen) {\n actionFilter.createdDate.and.push({ op: 'LTE', value: lastSeen })\n }\n\n const result = yield client.query({\n query: ACTIONS_QUERY,\n variables: { actionFilter },\n })\n\n if (result.data.Actions.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(\n fetchActivityTicketActionsSuccess({ data: result.data.Actions.items })\n )\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error loading alerts for security center', e)\n yield put(fetchActivityTicketActionsError())\n }\n}\n\nfunction* fetchPolicyEvidenceLegacy(action) {\n try {\n const { ticket } = action.payload\n\n const policies = yield select(selectPolicies)\n\n const policyForTicket = policies.get(ticket.ticketKey)\n if (!policyForTicket) {\n throw new Error('Could not find policy with srn', ticket.ticketKey)\n }\n\n const searchOnPolicy = policyForTicket.getIn(['contains', 'items', 0])\n if (!searchOnPolicy) {\n throw new Error(\n 'Could not get search from policy: ' +\n JSON.stringify(policyForTicket.toJS())\n )\n }\n\n // we'l try to build the search for the policy and then run it\n let search\n const variables = {}\n let isUISearch = true\n\n // There are two types of searches that can be attached to a policy\n // need to handle both case\n switch (searchOnPolicy.get('__typename')) {\n // if it type Search, means it's a UI search and must invoke query-builder\n case 'Search':\n {\n const savedSearches = yield select(selectSavedSearches)\n const searchForPolicy = savedSearches.get(searchOnPolicy.get('sid'))\n if (!searchForPolicy) {\n throw new Error(\n 'could not find search with sid ' + searchOnPolicy.get('sid')\n )\n }\n const queryTypes = yield select(selectQueryTypes)\n let fields = searchForPolicy.getIn(['query', 'fields'])\n\n const rootIndex = fields\n .find(statement => !statement.get('parentId'))\n .get('id')\n fields = modifyFieldsForSRN(ticket.resourceSRN, rootIndex, fields)\n\n const timestamp = moment(ticket.lastSeen).unix()\n fields = fields.map(field =>\n field\n .updateIn(['arguments', 'and'], List(), andArgs =>\n shiftDateArgs(andArgs, timestamp)\n )\n .updateIn(['arguments', 'or'], List(), orArgs =>\n shiftDateArgs(orArgs, timestamp)\n )\n )\n\n const queryBuilder = new QueryBuilder({\n query: fields,\n types: queryTypes,\n resultViews: {},\n swimlanes: [],\n })\n queryBuilder.addDefaultResultViews()\n queryBuilder.enableFlattenMode()\n queryBuilder.skipCount = false\n\n const {\n gqlStatement: policyGQLSource,\n } = queryBuilder.buildPivotableSource(\n rootIndex,\n 'fetchPolicyEvidenceLegacy'\n )\n search = policyGQLSource\n }\n break\n // its a saved query, it means it's an advanced search and we can execute by name\n case 'Savedquery':\n {\n search = `query fetchPolicyEvidenceLegacy($name: String) {\n ExecuteSavedQuery {\n Query(name: $name)\n }\n }`\n variables.name = searchOnPolicy.get('name')\n isUISearch = false\n }\n break\n default:\n throw new Error(\n `Could not determine how to find search of type: ${searchOnPolicy.get(\n '__typename'\n )}`\n )\n }\n\n const client = yield getClient()\n const result = yield client.query({\n query: gql`\n ${search}\n `,\n variables,\n })\n\n if (!result.data) {\n throw new Error('Invalid response, no data')\n }\n\n let path\n if (isUISearch) {\n path = ['data', Object.keys(result.data)[0], 'items', 0]\n } else {\n path = [\n 'data',\n 'ExecuteSavedQuery',\n 'Query',\n // eslint-disable-next-line no-undef\n Object.keys(result.data?.ExecuteSavedQuery?.Query ?? {})[0],\n 'items',\n 0,\n ]\n }\n const data = _.get(result, path, null)\n\n if (data === null) {\n throw new Error(`no results at path ${path.join('/')}`)\n }\n\n yield put(fetchPolicyEvidenceLegacySuccess({ data }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened fetchPolicyEvidenceLegacy', e)\n yield put(fetchPolicyEvidenceLegacyError())\n }\n}\n\nfunction* closeTickets(action) {\n const { payload } = action\n\n yield put(bulkActionStart())\n try {\n const client = getClient()\n const response = yield client.mutate({\n mutation: gql`\n mutation close_tickets($srns: [String]) {\n CloseTickets(input: { srns: $srns }) {\n successCount\n failureCount\n }\n }\n `,\n variables: {\n srns: payload,\n },\n })\n if (response.data.CloseTickets.successCount > 0) {\n yield put(closeTicketsSuccess(payload))\n }\n yield put(bulkActionComplete())\n } catch (error) {\n // eslint-disable-next-line\n console.error('Unable to close tickets: ', error)\n yield put(bulkActionComplete())\n }\n}\n\nfunction* assignTickets({ payload }) {\n yield put(bulkActionStart())\n\n try {\n const client = getClient()\n\n yield all(\n payload.ticketSrns.map(ticketSrn =>\n client.mutate({\n mutation: gql`\n mutation reassignToUser($ticketSrn: String!, $userSrn: String!) {\n AssignTicket(\n input: { ticketSrn: $ticketSrn, userSrn: $userSrn }\n ) {\n srn\n }\n }\n `,\n variables: {\n userSrn: payload.userSrn,\n ticketSrn: ticketSrn,\n },\n })\n )\n )\n\n yield put(bulkActionComplete())\n } catch (error) {\n // eslint-disable-next-line\n console.error('Unable to reassign tickets: ', error)\n yield put(bulkActionComplete())\n }\n}\n\nfunction* acceptRiskForTickets({ payload }) {\n yield put(bulkActionStart())\n\n const { ticketSrns, comment } = payload\n try {\n const client = getClient()\n\n //First, bulk accept the risk\n const response = yield client.mutate({\n mutation: gql`\n mutation acceptRiskOnTickets($srns: [String]) {\n AcceptRiskTickets(input: { srns: $srns }) {\n successCount\n failureCount\n }\n }\n `,\n variables: {\n srns: ticketSrns,\n },\n })\n\n if (response.data.AcceptRiskTickets.successCount <= 0) {\n yield put(bulkActionComplete())\n return\n }\n\n //Now, add the comment on all the tickets\n const currentUser = yield select(selectSonraiUserSrn)\n yield all(\n payload.ticketSrns.map(ticketSrn =>\n client.mutate({\n mutation: ADD_TICKET_COMMENT_MUTATION,\n variables: {\n ticketSrn: ticketSrn,\n body: comment,\n createdBy: currentUser,\n },\n })\n )\n )\n\n yield put(bulkActionComplete())\n } catch (error) {\n // eslint-disable-next-line\n console.error('Unable to accept risk on tickets: ', error)\n yield put(bulkActionComplete())\n }\n}\n\nfunction* snoozeTickets(action) {\n const { payload } = action\n\n yield put(bulkActionStart())\n try {\n const client = getClient()\n yield client.mutate({\n mutation: gql`\n mutation snoozeTickets($srns: [String], $snoozedUntil: DateTime) {\n SnoozeTickets(input: { srns: $srns }, snoozedUntil: $snoozedUntil) {\n successCount\n failureCount\n }\n }\n `,\n variables: {\n srns: payload.ticketSrns,\n snoozedUntil: payload.snoozedUntil,\n },\n })\n\n yield put(bulkActionComplete())\n } catch (error) {\n // eslint-disable-next-line\n console.error('Unable to close tickets: ', error)\n yield put(bulkActionComplete())\n }\n}\n\nfunction* bulkComment({ payload }) {\n yield put(bulkActionStart())\n\n const { ticketSrns, comment } = payload\n try {\n const client = getClient()\n //Now, add the comment on all the tickets\n const currentUser = yield select(selectSonraiUserSrn)\n yield all(\n ticketSrns.map(ticketSrn =>\n client.mutate({\n mutation: ADD_TICKET_COMMENT_MUTATION,\n variables: {\n ticketSrn: ticketSrn,\n body: comment,\n createdBy: currentUser,\n },\n })\n )\n )\n\n yield put(bulkActionComplete())\n } catch (error) {\n // eslint-disable-next-line\n console.error('Unable to bulk comment on tickets: ', error)\n yield put(bulkActionComplete())\n }\n}\n\nfunction* bulkTag({ payload }) {\n yield put(bulkActionStart())\n\n const { resourceSrns, tags } = payload\n try {\n const client = getClient()\n yield all(\n tags.map(tag => {\n return client.mutate({\n mutation: gql`\n mutation addTagsWithNoDuplicates {\n AddTag(\n value: {\n key: \"${tag.key}\"\n value: \"${tag.value}\"\n tagsEntity: {\n add: [${resourceSrns.map(resource => `\"${resource}\"`)}]\n }\n }) {\n srn\n key\n value\n }\n }`,\n })\n })\n )\n\n yield put(bulkActionComplete())\n } catch (error) {\n // eslint-disable-next-line\n console.error('Unable to bulk add tags on ticket resources: ', error)\n yield put(bulkActionComplete())\n }\n}\n\nfunction* ticketDetailsSaga() {\n yield all([\n takeLatest(ACCEPT_RISK_TICKET, acceptRiskTicket),\n takeLatest(ASSIGN_TO_ME, assignToMe),\n takeLatest(CLOSE_TICKET, closeTicket),\n takeLatest(FETCH_TICKET_DETAILS, fetchTicketDetails),\n takeLatest(REOPEN_TICKET, reopenTicket),\n takeLatest(SNOOZE_TICKET, snoozeTicket),\n takeLatest(REASSIGN_TO_USER, reassignTicketToUser),\n takeLatest(FETCH_TICKET_COMMENTS, getTicketComments),\n takeLatest(ADD_COMMENT, addTicketComment),\n takeLatest(FETCH_SIMILAR_TICKETS, fetchSimilarTickets),\n takeLatest(CHANGE_SIMILAR_TICKETS_FILTERS, fetchSimilarTickets),\n takeLatest(FETCH_TICKET_HISTORY, getTicketHistory),\n takeLatest(FETCH_ACTIVITY_TICKET_ACTIONS, fetchActivityTicketActions),\n takeLatest(FETCH_POLICY_EVIDENCE_LEGACY, fetchPolicyEvidenceLegacy),\n takeLatest(FETCH_POLICY_PATH, fetchPolicyPath),\n takeLatest(CLOSE_TICKETS, closeTickets),\n takeLatest(ASSIGN_TICKETS, assignTickets),\n takeLatest(ACCEPT_RISK_TICKETS, acceptRiskForTickets),\n takeLatest(SNOOZE_TICKETS, snoozeTickets),\n takeLatest(BULK_COMMENT, bulkComment),\n takeLatest(BULK_TAG, bulkTag),\n ])\n}\n\nexport default ticketDetailsSaga\n","//Modified from react-graph-vis: https://github.com/crubier/react-graph-vis\n\nimport React from 'react'\nimport defaultsDeep from 'lodash/fp/defaultsDeep'\nimport isEqual from 'lodash/isEqual'\nimport differenceWith from 'lodash/differenceWith'\nimport vis from 'visjs-network'\nimport PropTypes from 'prop-types'\n\nimport './styles.css'\nclass VisNetwork extends React.Component {\n constructor(props) {\n super(props)\n\n this.container = React.createRef()\n }\n\n componentDidMount() {\n this.edges = new vis.DataSet()\n this.edges.add(this.props.graph.edges)\n this.nodes = new vis.DataSet()\n this.nodes.add(this.props.graph.nodes)\n this.updateGraph()\n }\n\n shouldComponentUpdate(nextProps) {\n let nodesChange = !isEqual(this.props.graph.nodes, nextProps.graph.nodes)\n let edgesChange = !isEqual(this.props.graph.edges, nextProps.graph.edges)\n let optionsChange = !isEqual(this.props.options, nextProps.options)\n let eventsChange = !isEqual(this.props.events, nextProps.events)\n\n if (nodesChange) {\n const idIsEqual = (n1, n2) => n1.id === n2.id\n const nodesRemoved = differenceWith(\n this.props.graph.nodes,\n nextProps.graph.nodes,\n idIsEqual\n )\n const nodesAdded = differenceWith(\n nextProps.graph.nodes,\n this.props.graph.nodes,\n idIsEqual\n )\n const nodesChanged = differenceWith(\n differenceWith(nextProps.graph.nodes, this.props.graph.nodes, isEqual),\n nodesAdded\n )\n this.patchNodes({ nodesRemoved, nodesAdded, nodesChanged })\n }\n\n if (edgesChange) {\n const edgesRemoved = differenceWith(\n this.props.graph.edges,\n nextProps.graph.edges,\n isEqual\n )\n const edgesAdded = differenceWith(\n nextProps.graph.edges,\n this.props.graph.edges,\n isEqual\n )\n const edgesChanged = differenceWith(\n differenceWith(nextProps.graph.edges, this.props.graph.edges, isEqual),\n edgesAdded\n )\n this.patchEdges({ edgesRemoved, edgesAdded, edgesChanged })\n }\n\n if (optionsChange) {\n this.Network.setOptions(nextProps.options)\n }\n\n if (eventsChange) {\n let events = this.props.events || {}\n for (let eventName of Object.keys(events))\n this.Network.off(eventName, events[eventName])\n\n events = nextProps.events || {}\n for (let eventName of Object.keys(events))\n this.Network.on(eventName, events[eventName])\n }\n\n return (\n this.props.height !== nextProps.height ||\n this.props.width !== nextProps.width\n )\n }\n\n componentDidUpdate() {\n this.updateGraph()\n }\n\n patchEdges({ edgesRemoved, edgesAdded, edgesChanged }) {\n this.edges.remove(edgesRemoved)\n this.edges.add(edgesAdded)\n this.edges.update(edgesChanged)\n }\n\n patchNodes({ nodesRemoved, nodesAdded, nodesChanged }) {\n this.nodes.remove(nodesRemoved)\n this.nodes.add(nodesAdded)\n this.nodes.update(nodesChanged)\n }\n\n updateGraph = () => {\n let container = this.container.current\n\n if (!container) {\n return\n }\n\n let defaultOptions = {\n physics: {\n stabilization: false,\n },\n autoResize: false,\n edges: {\n smooth: false,\n color: '#000000',\n width: 0.5,\n arrows: {\n to: {\n enabled: true,\n scaleFactor: 0.5,\n },\n },\n },\n }\n\n // merge user provied options with our default ones\n let options = defaultsDeep(defaultOptions, this.props.options)\n\n this.Network = new vis.Network(\n container,\n Object.assign({}, this.props.graph, {\n edges: this.edges,\n nodes: this.nodes,\n }),\n options\n )\n\n if (this.props.getNetwork) {\n this.props.getNetwork(this.Network)\n }\n\n if (this.props.getNodes) {\n this.props.getNodes(this.nodes)\n }\n\n if (this.props.getEdges) {\n this.props.getEdges(this.edges)\n }\n\n // Add user provied events to network\n let events = this.props.events || {}\n for (let eventName of Object.keys(events)) {\n this.Network.on(eventName, events[eventName])\n }\n }\n\n render() {\n return (\n \n )\n }\n}\n\nVisNetwork.defaultProps = {\n graph: {},\n}\nVisNetwork.propTypes = {\n events: PropTypes.object,\n graph: PropTypes.object,\n getNetwork: PropTypes.func,\n getNodes: PropTypes.func,\n getEdges: PropTypes.func,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n options: PropTypes.object,\n}\n\nexport default VisNetwork\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { Map } from 'immutable'\nimport FontFaceObserver from 'fontfaceobserver'\nimport BounceLoadingAnimation from 'components/BounceLoadingAnimation'\nimport uuid from 'uuid/v4'\nimport { getAccountSrnFromId, getCloudFromSrn } from 'utils/sonraiUtils'\nimport CenterContent from 'components/CenterContent'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport {\n truncateMiddle,\n getNameFromSrn,\n exists,\n getAccountFromSrn,\n} from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { getColor, getIcon } from './nodeIcons'\nimport VisNetwork from './VisNetwork'\nconst MAX_SPRING_LENGTH = 800\nconst MIN_SPRING_LENGTH = 50\nconst DEFAULT_OUT_SPRING_LENGTH = 100\nconst DEFAULT_IN_SPRING_LENGTH = 250\n\nclass GraphVis extends React.Component {\n constructor(props) {\n super(props)\n\n this.uuid = uuid()\n\n this.state = {\n customSpringLengths: {},\n network: null,\n iconsLoaded: false,\n zoomView: false,\n }\n\n const fontA = new FontFaceObserver('Font Awesome 5 Pro')\n const fontB = new FontFaceObserver('Font Awesome 5 Pro', {\n weight: 400,\n })\n\n Promise.all([fontA.load(), fontB.load()]).then(() => {\n if (this.mounted) {\n this.setState({\n iconsLoaded: true,\n })\n }\n })\n\n this.events = {\n dragEnd: this.handleEndDrag,\n oncontext: this.noop,\n click: this.props.onClick,\n hoverNode: this.onHoverNode,\n blurNode: this.onBlurNode,\n doubleClick: this.props.onDoubleClick,\n hoverEdge: this.onHoverEdge,\n blurEdge: this.onBlurEdge,\n }\n }\n\n componentDidMount() {\n document.addEventListener('click', this.handleClick)\n\n this.mounted = true\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.handleClick)\n\n this.mounted = false\n }\n\n shouldComponentUpdate(newProps, newState) {\n if (newState !== this.state) {\n return true\n }\n\n return (\n !_.isEqual(newProps.nodes, this.props.nodes) ||\n !_.isEqual(newProps.edges, this.props.edges) ||\n !_.isEqual(newProps.terms, this.props.terms) ||\n !_.isEqual(newProps.selectedNode, this.props.selectedNode)\n )\n }\n\n noop = visInfo => {\n visInfo.event.preventDefault()\n if (this.props.onContext) {\n const { x, y } = visInfo.pointer.DOM\n const node = this.state.network.getNodeAt({\n x,\n y,\n })\n this.props.onContext(node, { x, y })\n }\n }\n\n handleClick = ({ target }) => {\n const canvas = target.localName === 'canvas'\n if (canvas) {\n if (!this.state.zoomView) {\n this.setState({\n zoomView: true,\n })\n }\n } else {\n if (this.state.zoomView) {\n this.setState({\n zoomView: false,\n })\n }\n }\n }\n\n getLabel = (relation, displayName) => {\n const type = relation.item.__typename || getTypeFromSrn(relation.item.srn)\n const account =\n relation.item.account || getAccountFromSrn(relation.item.srn)\n if (account && account !== '-' && this.props.showAccountInLabel) {\n const srn = getAccountSrnFromId(account, this.props.accounts)\n const cloudType = _.toUpper(getCloudFromSrn(srn))\n const obj =\n this.props.accounts.find(account => account.get('srn') === srn) || Map()\n const name =\n obj.get('friendlyName') || obj.get('name') || obj.get('account')\n const displayAccount = `${cloudType} - ${name}`\n return `${_.startCase(type)}:\\n ${displayName}\\n ${displayAccount}`\n }\n return `${_.startCase(type)}:\\n ${displayName}`\n }\n\n getHoverTitle = relation => {\n return (\n relation.item.friendlyName ||\n relation.item.name ||\n getNameFromSrn(relation.item.srn) ||\n ''\n )\n }\n\n isMatch = label => {\n const { terms } = this.props\n if (!_.isEmpty(terms)) {\n const searches = terms.map(term => term.label.toLowerCase())\n\n const values = searches.map(search =>\n label.toLowerCase().includes(search)\n )\n if (!values.includes(true)) {\n return true\n }\n }\n }\n\n handleLabelColor = (label, relation) => {\n if (this.isMatch(label)) {\n return '#F1F1F1'\n }\n\n if (relation.item.active === false) {\n return this.props.theme.neutralDark\n }\n }\n\n handleIconColor = label => {\n if (this.isMatch(label)) {\n return '#F1F1F1'\n }\n return getColor(\n label.split(':')[0],\n this.props.theme,\n this.props.typeColors\n )\n }\n\n handleEdgeColor = (relation, isMatch, parentNode) => {\n if (isMatch) {\n return '#F1F1F1'\n }\n\n if (\n relation.item.active === false ||\n (parentNode && parentNode.item.active === false)\n ) {\n return this.props.theme.neutralDark\n }\n\n if (\n relation.parent\n ? relation.relation.direction === 'IN'\n : relation.parent == relation.item.srn\n ) {\n return this.props.theme.explorerIncomingEdge\n } else {\n return this.props.theme.darkBlue\n }\n }\n\n getLabelColor = isMatch => {\n if (isMatch) {\n return '#F1F1F1'\n }\n\n return '#000000'\n }\n\n handleEndDrag = e => {\n if (e.nodes.length < 1 || !this.state.network) {\n return\n }\n\n const newCoords = e.pointer.canvas\n const nodeConfig = this.props.edges.find(\n relation => relation.item.srn === e.nodes[0]\n )\n\n if (!nodeConfig) {\n return\n }\n\n let parentId = e.nodes[0]\n\n if (nodeConfig.parent) {\n parentId = nodeConfig.parent\n }\n\n const parentCoords = this.state.network.getPositions([parentId])[parentId]\n\n const dx = newCoords.x - parentCoords.x\n const dy = newCoords.y - parentCoords.y\n\n const newOffset = Math.sqrt(dx * dx + dy * dy)\n\n //Fudge the numbers a little to make it looks right.\n //The \"starting\" spring length is 100\n let newSpringLength = newOffset - 100\n if (newSpringLength < MIN_SPRING_LENGTH) {\n newSpringLength = MIN_SPRING_LENGTH\n }\n\n if (newSpringLength > MAX_SPRING_LENGTH) {\n newSpringLength = MAX_SPRING_LENGTH\n }\n\n this.setState(oldState => {\n const springLengths = oldState.customSpringLengths\n springLengths[e.nodes[0]] = newSpringLength\n\n return {\n customSpringLengths: springLengths,\n }\n })\n }\n\n getNodes = () => {\n let nodes = _.uniqBy(this.props.nodes, node => node.item.srn).map(node => {\n const isSourceNode =\n node.item.isSourceNode ||\n (this.props.sourceNodes &&\n this.props.sourceNodes.includes(node.item.srn))\n\n const fullName = `${this.getHoverTitle(node)}`\n const shortName = truncateMiddle(fullName)\n const fullLabel = this.getLabel(node, fullName)\n const type = node.item.__typename || getTypeFromSrn(node.item.srn)\n const iconColor = isSourceNode\n ? this.props.theme.emphasis\n : this.handleIconColor(fullLabel)\n\n return {\n id: node.item.srn,\n label: this.getLabel(node, shortName),\n title: fullName,\n font: {\n color: this.handleLabelColor(fullLabel, node),\n },\n icon: {\n face: '\"Font Awesome 5 Pro\"',\n size: 50,\n code: getIcon(type),\n color:\n node.item.active === false\n ? this.props.theme.neutralMedium\n : iconColor,\n },\n }\n })\n\n return nodes\n }\n\n getEdges = () => {\n return this.props.edges.map(relation => {\n return this.getCoreNodeConfig(relation)\n })\n }\n\n getCoreNodeConfig = relation => {\n const isMatch = this.isMatch(\n this.getLabel(relation, this.getHoverTitle(relation))\n )\n\n const parentNode = this.props.nodes.find(\n node => node.item.srn === relation.parent\n )\n\n return {\n from:\n relation.relation.direction === 'IN'\n ? relation.item.srn\n : this.props.sourceNodeID || relation.parent,\n to:\n relation.relation.direction === 'IN'\n ? this.props.sourceNodeID || relation.parent\n : relation.item.srn,\n color: {\n color: this.handleEdgeColor(relation, isMatch, parentNode),\n highlight: this.props.theme.emphasis,\n },\n dashes:\n relation.item.active === false ||\n (parentNode && parentNode.item.active === false),\n font: {\n color: this.getLabelColor(isMatch),\n align: 'middle',\n size: 0,\n },\n label: relation.relation.name,\n length:\n this.state.customSpringLengths[relation.item.srn] ||\n (relation.relation.direction === 'IN'\n ? DEFAULT_IN_SPRING_LENGTH\n : DEFAULT_OUT_SPRING_LENGTH),\n }\n }\n\n onHoverNode = () => {\n const network = this.state.network\n network.canvas.body.container.style.cursor = 'pointer'\n }\n\n onBlurNode = () => {\n const network = this.state.network\n network.canvas.body.container.style.cursor = 'default'\n }\n\n onHoverEdge = e => {\n this.state.network.body.data.edges.update({\n id: e.edge,\n font: { size: 14 },\n })\n }\n\n onBlurEdge = e => {\n this.state.network.body.data.edges.update({ id: e.edge, font: { size: 0 } })\n }\n\n render() {\n if (!this.state.iconsLoaded) {\n return (\n \n \n \n )\n }\n\n const graph = {\n nodes: this.getNodes(),\n edges: this.getEdges(),\n }\n\n const options = _.merge(\n {\n edges: {\n color: this.props.theme.darkBlue,\n arrowStrikethrough: false,\n shadow: {\n enabled: false,\n },\n smooth: { enabled: true },\n width: 2,\n },\n nodes: {\n font: {\n vadjust: -7,\n },\n shadow: {\n enabled: false,\n },\n shape: 'dot',\n icon: {\n face: '\"Font Awesome 5 Pro\"',\n color: '#aa00ff',\n size: 50,\n },\n color: {\n border: '#ffffff',\n background: '#fafafa',\n },\n },\n physics: {\n barnesHut: {\n damping: 0.2,\n gravitationalConstant: -4000,\n },\n },\n interaction: {\n zoomView: this.state.zoomView,\n hover: true,\n hoverConnectedEdges: false,\n selectConnectedEdges: false,\n },\n },\n this.props.options\n )\n\n if (this.state.network && exists(this.props.selectedNode)) {\n this.state.network.selectNodes([this.props.selectedNode])\n }\n\n return (\n this.setState({ network })}\n height={this.props.height}\n width={this.props.width}\n />\n )\n }\n}\n\nGraphVis.defaultProps = {\n height: '100%',\n width: '100%',\n onClick: () => {},\n options: {},\n}\n\nGraphVis.propTypes = {\n options: PropTypes.object,\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n nodes: PropTypes.arrayOf(\n PropTypes.shape({\n item: PropTypes.shape({\n srn: PropTypes.string,\n __typename: PropTypes.string,\n friendlyName: PropTypes.string,\n name: PropTypes.string,\n active: PropTypes.bool,\n }),\n })\n ).isRequired,\n edges: PropTypes.arrayOf(\n PropTypes.shape({\n item: PropTypes.shape({\n srn: PropTypes.string,\n __typename: PropTypes.string,\n friendlyName: PropTypes.string,\n name: PropTypes.string,\n active: PropTypes.bool,\n }),\n parent: PropTypes.string,\n relation: PropTypes.shape({\n direction: PropTypes.oneOf(['IN', 'OUT']),\n name: PropTypes.string,\n }),\n })\n ).isRequired,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n theme: themeShape,\n terms: PropTypes.array.isRequired,\n sourceNodes: PropTypes.object,\n sourceNodeID: PropTypes.string,\n selectedNode: PropTypes.string,\n onClick: PropTypes.func,\n onContext: PropTypes.func,\n onDoubleClick: PropTypes.func,\n typeColors: PropTypes.object,\n showAccountInLabel: PropTypes.bool,\n accounts: ImmutablePropTypes.iterable,\n}\n\nexport default themeable(GraphVis)\n","import React from 'react'\nimport { WithPermission } from './WithPermission'\nimport permissionChecker from './index'\n\n/**\n * this react component will only render its children if the currently logged\n * in user does not have the permission passed by the prop 'permissionName'\n */\nexport function WithoutPermission(props) {\n return \n}\n\nexport default permissionChecker(WithoutPermission)\n","/**\n *\n * FormLabel\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { Label } from 'reactstrap'\n\nconst styles = {\n inputLabel: {\n margin: '1em 0 0 0',\n },\n requiredIndicator: {\n paddingLeft: '0.3em',\n color: 'red',\n },\n}\n\nclass FormLabel extends React.PureComponent {\n render() {\n const { label, style, required, children, ...rest } = this.props\n return (\n \n )\n }\n}\n\nFormLabel.defaultProps = {\n style: {},\n}\n\nFormLabel.propTypes = {\n children: PropTypes.node,\n label: PropTypes.node,\n required: PropTypes.bool,\n style: PropTypes.object,\n}\n\nexport default FormLabel\n","import isIp from 'is-ip'\nimport moment from 'moment'\nimport qs from 'query-string'\nimport _ from 'lodash'\nimport pluralizeLib from 'pluralize'\nimport numeral from 'numeral'\nimport Immutable, { Map, List, isImmutable, fromJS } from 'immutable'\nimport Papa from 'papaparse'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport color from 'color'\n\nimport {\n NODE_VIEW_TYPES,\n SONRAI_MAX_COUNT,\n TYPES_WITH_CRM,\n SWIMLANE_SCOPED_PERMISSIONS,\n DEFAULT_SEARCH_LIMIT,\n} from 'appConstants'\n\nexport const mapPoliciesToControlFrameworks = (\n alerts,\n policies,\n controlGroups\n) => {\n const policiesDuplicatedByCf = []\n\n const policyAlertsByCF = alerts.map(alert => {\n if (alert.ticketType === 'Framework') {\n alert.controlFrameworkName = controlGroups.getIn([\n alert.ticketKey,\n 'title',\n ])\n alert.controlFrameworkId = alert.ticketKey\n\n return alert\n }\n\n if (alert.ticketType !== 'Policy') {\n return alert\n }\n\n const policyId = alert.ticketKey\n const policy = policies.get(policyId, Map())\n const controlFrameworks = policy\n .getIn(['containedByControlFramework', 'items'], List())\n .map(cf => controlGroups.get(cf.get('srn'), Map()))\n .filterNot(cf => cf.isEmpty())\n\n alert.policyName = policy.get('title')\n alert.controlFrameworkName = controlFrameworks.first(Map()).get('title')\n alert.controlFrameworkId = controlFrameworks.first(Map()).get('srn')\n\n if (controlFrameworks.size > 1) {\n controlFrameworks.shift().forEach(cf => {\n const duplicateAlert = { ...alert }\n duplicateAlert.controlFrameworkName = cf.get('title')\n duplicateAlert.controlFrameworkId = cf.get('srn')\n policiesDuplicatedByCf.push(duplicateAlert)\n })\n }\n\n return alert\n })\n\n return policyAlertsByCF.concat(policiesDuplicatedByCf)\n}\n\nexport const getMultiValuesFromString = inputValue => {\n const parsed = Papa.parse(inputValue, {\n quoteChar: '\"',\n escapeChar: '\"',\n delimitersToGuess: [',', '\\t', ';', Papa.RECORD_SEP, Papa.UNIT_SEP],\n }).data\n\n if (inputValue.match('\\r\\n|\\n|\\r')) {\n return [].concat.apply([], parsed)\n }\n\n if (Array.isArray(parsed) && parsed.length > 0 && parsed[0].length > 1) {\n return parsed[0]\n } else {\n return [inputValue]\n }\n}\n\nexport const sortCards = cards => {\n let kards = [...cards]\n\n let newCardOrder = [\n _.remove(kards, function (card) {\n return card.name === 'Overview' || card.text === 'Overview'\n })[0],\n _.remove(kards, function (card) {\n return card.name === 'Identity' || card.text === 'Identity'\n })[0],\n _.remove(kards, function (card) {\n return card.name === 'Data' || card.text === 'Data'\n })[0],\n _.remove(kards, function (card) {\n return card.name === 'Activity' || card.text === 'Activity'\n })[0],\n _.remove(kards, function (card) {\n return card.name === 'Review' || card.text === 'Review'\n })[0],\n _.remove(kards, function (card) {\n return (\n card.name === '__sonrai-alerts0' || card.text === '__sonrai-alerts0'\n )\n })[0],\n ...kards.sort((a, b) => {\n const aDate = a.createdDate ? moment(a.createdDate) : moment(a.date)\n const bDate = b.createdDate ? moment(b.createdDate) : moment(b.date)\n return aDate.isAfter(bDate)\n }),\n ]\n return _.compact(newCardOrder)\n}\n\nexport const exists = value => {\n if (value === null) {\n return false\n }\n\n if (value === undefined) {\n return false\n }\n\n if (value === '') {\n return false\n }\n\n return true\n}\n\nexport const isPrimitiveValue = value => {\n return (\n value === null ||\n value === undefined ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number'\n )\n}\n\nexport const processPrimitiveCellValue = cellValue => {\n if (typeof cellValue === 'boolean') {\n return `${cellValue}`\n } else if (cellValue === null) {\n return '-'\n } else if (typeof cellValue === 'string') {\n return cellValue\n }\n\n return !isNaN(parseInt(cellValue)) && !isIp(cellValue)\n ? parseInt(cellValue)\n : cellValue\n}\n\nexport const addSubItems = (value, key = '', noTypePrepend) => {\n if (key && Array.isArray(value) && !key.includes('items')) {\n value = value.join(', ')\n }\n\n if (isPrimitiveValue(value)) {\n const obj = {}\n obj[key] = processPrimitiveCellValue(value)\n return [obj]\n }\n\n if (Array.isArray(value)) {\n const uniqueTypes = new Set() //eslint-disable-line no-restricted-globals\n for (var i = 0; i < value.length; i++) {\n const val = value[i]\n if (key.includes('EdgeRelation_items')) {\n val.__typename = key.replace('EdgeRelation_items', '')\n }\n uniqueTypes.add(val.__typename)\n if (uniqueTypes.size > 1) {\n // only iterate until we find some unique types\n break\n }\n }\n\n let newRows = []\n const items = value\n items.forEach(item => {\n const processedResult = addSubItems(item, key, uniqueTypes.size > 1)\n processedResult.forEach(r => newRows.push(r))\n })\n\n return newRows\n }\n\n //Value is an Object\n\n let masterRow = {}\n let newRows = []\n const fieldNames = Object.keys(value)\n\n fieldNames.forEach(fieldName => {\n const columnName =\n value.__typename && !noTypePrepend\n ? `${value.__typename}_${fieldName}`\n : fieldName\n\n const processedResult = addSubItems(value[fieldName], columnName)\n\n //the results was a property query with only one element, which is treated as a new column\n // E.G. \"[{ RegionName: 'ca-central-1' }]\"\n if (processedResult.length === 1) {\n Object.assign(masterRow, processedResult[0])\n newRows.forEach(rowVals => Object.assign(rowVals, processedResult[0]))\n } else if (newRows.length === 0) {\n newRows = processedResult.map(result =>\n Object.assign({}, masterRow, result)\n )\n } else {\n //Processsing of a list of results, in which case we need to create new, semi-duplicated rows\n // E.G. [\n // {RepositoryTagKey: 'aws:cloudformation:stack-id',},\n // {RepositoryTagKey: 'aws:cloudformation:stack-name',},\n // {RepositoryTagKey: 'aws:cloudformation:logical-id',},\n // ]\n\n const initialRowData = _.cloneDeep(newRows)\n newRows = []\n\n processedResult.forEach(result => {\n initialRowData.forEach(rowVals => Object.assign(rowVals, result))\n newRows = newRows.concat(initialRowData)\n })\n }\n })\n\n if (newRows.length === 0) {\n //No new rows were generated - data was always just plain properties\n newRows.push(masterRow)\n }\n\n return newRows\n}\n\nexport const flattenData = data => {\n const flattenedData = addSubItems(data)\n\n let template = new Set() //eslint-disable-line no-restricted-globals\n flattenedData.forEach(row => {\n Object.keys(row).forEach(key => template.add(key))\n })\n\n return flattenedData.map(row => {\n let newRow = {}\n Array.from(template.values()).forEach(prop => {\n //add default values for any missing properties\n if (exists(row[prop])) {\n newRow[prop] = row[prop]\n } else {\n newRow[prop] = '-'\n }\n })\n return newRow\n })\n}\n\nexport const possibleIdentities = [\n 'mfadevice',\n 'organization',\n 'samlprovider',\n 'identityprovider',\n 'activedirectoryapplication',\n]\n\nexport const getIdentityPath = type => {\n if (possibleIdentities.includes(type)) {\n return 'identity'\n } else {\n return 'generic'\n }\n}\n\nexport const getNodeViewPushParams = (nodeId, type = '') => {\n let typeLow = type.toLowerCase()\n\n let pathpart = ''\n if (typeLow === NODE_VIEW_TYPES.USER) {\n pathpart = 'user'\n } else if (typeLow === NODE_VIEW_TYPES.DATA_OBJECT) {\n pathpart = 'data'\n } else if (typeLow === NODE_VIEW_TYPES.CONTAINER) {\n pathpart = 'datacontainer'\n } else if (typeLow === NODE_VIEW_TYPES.ACCOUNT) {\n pathpart = 'account'\n } else if (typeLow === NODE_VIEW_TYPES.PUBLIC_KEY) {\n pathpart = 'publickey'\n } else if (typeLow === NODE_VIEW_TYPES.POLICY) {\n pathpart = 'policy'\n } else if (typeLow === NODE_VIEW_TYPES.IMAGE) {\n pathpart = 'image'\n } else if (typeLow === NODE_VIEW_TYPES.COMPUTE) {\n pathpart = 'compute'\n } else if (typeLow === NODE_VIEW_TYPES.ACTION_TYPE) {\n pathpart = 'actiontype'\n } else if (typeLow === NODE_VIEW_TYPES.ACTION) {\n pathpart = 'action'\n } else if (typeLow === NODE_VIEW_TYPES.GROUP) {\n pathpart = 'group'\n } else if (typeLow === NODE_VIEW_TYPES.AUDIT) {\n pathpart = 'audit'\n } else if (typeLow === NODE_VIEW_TYPES.ROLE) {\n pathpart = 'role'\n } else if (typeLow === NODE_VIEW_TYPES.SECRET_STORE) {\n pathpart = 'secretstore'\n } else if (typeLow === NODE_VIEW_TYPES.SECRET) {\n pathpart = 'secret'\n } else {\n pathpart = getIdentityPath(typeLow)\n }\n\n return {\n pathname: `/App/SolutionCenter/Node/${pathpart}/`,\n search: qs.stringify({\n nodeId: nodeId,\n }),\n }\n}\n\nexport const groupNodeViewDetails = (fields, noCoalesce) => {\n const generalDetails = [\n 'active',\n 'name',\n 'type',\n 'label',\n 'account',\n 'aliasSet',\n 'createdDate',\n 'srn',\n 'resourceId',\n 'timestamp',\n 'modifiedDate',\n 'isOwnedBy',\n 'sid',\n ]\n const locationDetails = [\n 'region',\n 'latitude',\n 'longitude',\n 'country',\n 'performedAtCityValues',\n 'performedAtCountryValues',\n 'availabilityZone',\n ]\n const actionProperties = [\n 'sessionDate',\n 'accessKey',\n 'grantedActionKey',\n 'sessionPrincipal',\n 'grantedSessionPrincipal',\n 'grantedSessionDate',\n 'sharedEventId',\n 'hasServiceClassificationValue',\n 'eventName',\n 'performedByLabel',\n 'service',\n 'performedByValue',\n 'succeeded',\n 'grantedAccessKey',\n 'performedOnValue',\n 'performedOnLabel',\n 'srcIPs',\n 'userAgent',\n ]\n const coalescedProperties = [\n 'srcIPs',\n 'userAgents',\n 'regions',\n 'coalescedCount',\n 'performedAtCountryValues',\n 'performedAtCityValues',\n ]\n\n const computeProperties = [\n 'architecture',\n 'ebsOptimized',\n 'launchTime',\n 'runState',\n 'latestRestorableTime',\n ]\n\n const dataProperties = [\n 'encryptionEnabled',\n 'publicRead',\n 'publicWrite',\n 'versioningEnabled',\n 'classificationSet',\n ]\n\n const groups = {\n action: [],\n coalesced: [],\n compute: [],\n general: [],\n location: [],\n other: [],\n data: [],\n hidden: [],\n }\n\n fields.forEach(field => {\n if (generalDetails.includes(field.name)) {\n groups.general.push(field)\n } else if (locationDetails.includes(field.name)) {\n groups.location.push(field)\n } else if (actionProperties.includes(field.name)) {\n groups.action.push(field)\n } else if (computeProperties.includes(field.name)) {\n groups.compute.push(field)\n } else if (coalescedProperties.includes(field.name)) {\n if (noCoalesce) {\n groups.action.push(field)\n } else {\n groups.coalesced.push(field)\n }\n } else if (dataProperties.includes(field.name)) {\n groups.data.push(field)\n } else {\n groups.other.push(field)\n }\n })\n\n return groups\n}\n\nexport const buildAzureResourceLink = (srn, resourceId, type, label, meta) => {\n // this method is a bit clunk but gets the job done\n // do not make fun of the += strings either i know u gon say something i AINT EVEN GOTTA LOOK\n // ?v=0qZwwyHvCbo\n\n const isStorage = [\n 'BlockBlob',\n 'Blob',\n 'File',\n 'BlockStorage',\n 'DataContainer',\n 'DataObject',\n 'FileShare',\n 'KeyStore',\n 'Secret',\n 'SecretStore',\n ]\n\n let sub = getSubscriptionFromSrn(resourceId)\n if (!sub) {\n sub = getSubscriptionFromSrn(srn)\n }\n\n let resource = getResourceGroupFromSrn(resourceId)\n if (!resource) {\n resource = getResourceGroupFromSrn(srn)\n }\n\n let providers = getProvidersFromSrn(resourceId)\n if (!providers) {\n providers = getProvidersFromSrn(srn)\n }\n\n let link = 'https://portal.azure.com/#'\n\n if (label === 'ResourceGroup') {\n link += `@${getAccountFromSrn(\n srn\n )}/resource/subscriptions/${sub}/resourceGroups/${resource}/providers/Microsoft.ContainerService/managedClusters/${resource}/overview`\n } else if (label === 'User') {\n let appId = ''\n if (meta) {\n meta.forEach(dude => {\n if (\n dude.substring(dude.indexOf('.') + 1, dude.indexOf(':')) === 'appId'\n ) {\n appId = dude.substr(dude.indexOf(':') + 1)\n }\n })\n }\n if (type === 'ServicePrincipal' && appId) {\n link += `blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/${appId}/isMSAApp/`\n } else {\n link += `blade/Microsoft_AAD_IAM/UserDetailsMenuBlade/Profile/userId/${getWhateverFromSrn(\n '/User/',\n srn\n )}/adminUnitObjectId/`\n }\n } else if (label === 'Group') {\n link += `blade/Microsoft_AAD_IAM/GroupDetailsMenuBlade/Overview/groupId/${getWhateverFromSrn(\n '/Group/',\n srn\n )}`\n } else if (srn.search('/Subscription/') !== -1) {\n link += `@${getAccountFromSrn(srn)}/resource/subscriptions/${sub}/overview`\n } else if (isStorage.includes(type)) {\n link += `#blade/Microsoft_Azure_Storage/FileShareMenuBlade/overview/storageAccountId/%2Fsubscriptions%2F${sub}%2FresourceGroups%2F${resource}`\n } else {\n link += `@${getAccountFromSrn(\n srn\n )}/resource/subscriptions/${sub}/resourceGroups/${resource}/providers/${providers}/overview`\n }\n if (type === 'AzureAppGatewayListener') {\n link = `${link.substr(0, link.indexOf('/listener/'))}/overview`\n }\n return link\n}\n// https://console.aws.amazon.com/iam/home?region=us-east-1#/users/brad.peters\nexport const buildAwsResourceLink = ({\n srn,\n resourceId,\n type,\n label,\n region,\n}) => {\n const baseUrl = `https://console.aws.amazon.com`\n\n if (label === 'User' && type === 'User') {\n return `${baseUrl}/iam/home#/users/${getNameFromSrn(srn)}`\n } else if (label === 'Group' && type === 'Group') {\n return `${baseUrl}/iam/home#/groups/${getNameFromSrn(srn)}`\n } else if (label === 'Role' && type === 'Role') {\n return `${baseUrl}/iam/home#/roles/${getNameFromSrn(srn)}`\n } else if (label === 'Compute') {\n if (type === 'EC2') {\n return `${baseUrl}/ec2/home?region=${region}#Home:`\n } else if (type === 'AWSLambda') {\n return `${baseUrl}/lambda/home?region=${region}#/functions/${getNameFromSrn(\n srn\n )}`\n } else {\n return null\n }\n } else if (label === 'DataContainer') {\n if (type === 'S3Bucket') {\n return `${baseUrl}/s3/buckets/${getNameFromSrn(srn)}/?region=${region}`\n }\n } else if (label === 'MFADevice') {\n if (type === 'Virtual') {\n return `${baseUrl}/iam/home?#/users/${getNameFromSrn(\n srn\n )}?section=security_credentials`\n }\n } else if (label === 'Policy') {\n if (type === 'ManagedPolicy') {\n return `${baseUrl}/iam/home?#/policies/${resourceId}`\n }\n } else if (label === 'IdentityProvider') {\n if (type === 'SAMLProvider') {\n return `${baseUrl}/iam/home?#/providers/${resourceId}`\n }\n } else if (label === 'Group') {\n if (type === 'Group') {\n return `${baseUrl}/iam/home#/groups/${getNameFromSrn(srn)}`\n }\n } else if (label === 'Snapshot') {\n if (type === 'BlockStorage') {\n return `${baseUrl}/ec2/v2/home?region=${region}#Snapshots:search=${getNameFromSrn(\n srn\n )}`\n } else if (type === 'Instance') {\n // return `${baseUrl}/ec2/home#/groups/${getNameFromSrn(srn)}`\n }\n } else if (label === 'Image') {\n if (type === 'AMI') {\n // this one is fudged because it cant tell if ami is public or private\n // return `${baseUrl}/ec2/v2/home?region=${region}#Images:search=${getNameFromSrn(\n // srn\n // )}`\n }\n }\n return null\n}\n\nexport const getProvidersFromSrn = srn => {\n if (!srn) {\n return ''\n }\n const tag = '/providers/'\n let providers = ''\n if (srn.search(tag) !== -1) {\n providers = srn.substring(srn.indexOf(tag) + tag.length)\n }\n\n if (providers.search('/dnsrecords/') !== -1) {\n providers = providers.substr(\n 0,\n providers\n .substr(\n 0,\n providers.substr(0, providers.lastIndexOf('/')).lastIndexOf('/')\n )\n .lastIndexOf('/')\n )\n }\n return providers\n}\n\nexport const getWhateverFromSrn = (whatever, srn) => {\n if (!srn) {\n return ''\n }\n let userId = ''\n if (srn.toLowerCase().search(whatever.toLowerCase()) !== -1) {\n userId = srn\n .toLowerCase()\n .substring(\n srn.toLowerCase().indexOf(whatever.toLowerCase()) + whatever.length\n )\n if (userId.search('/') !== -1) {\n userId = userId.substring(0, userId.indexOf('/'))\n }\n }\n return userId\n}\n\nexport const getResourceGroupFromSrn = srn => {\n if (!srn) {\n return ''\n }\n const tag = '/resourcegroups/'\n const camelTag = '/resourceGroups/'\n let resourceGroups = ''\n if (resourceGroups === '' && srn.search(camelTag) !== -1) {\n resourceGroups = srn.substring(srn.indexOf(camelTag) + camelTag.length)\n resourceGroups = resourceGroups.substring(0, resourceGroups.indexOf('/'))\n } else if (srn.search(tag) !== -1) {\n resourceGroups = srn.substring(srn.indexOf(tag) + tag.length)\n if (resourceGroups.search('/') !== -1) {\n resourceGroups = resourceGroups.substring(0, resourceGroups.indexOf('/'))\n }\n }\n return resourceGroups\n}\n\nexport const isCrmType = srn => {\n return TYPES_WITH_CRM.includes(getTypeFromSrn(srn).toLowerCase())\n}\n\nexport const getCloudFromSrn = (srn = '') => {\n if (!srn) {\n return '-'\n }\n\n return srn.split(':')[1]\n}\n\nexport const getAccountFromSrn = (srn = '') => {\n if (!srn || !srn.startsWith('srn')) {\n return '-'\n }\n\n if (srn.includes('srn:sonrai::')) {\n return '-'\n }\n\n return srn.split(':')[4].split('/')[0]\n}\n\nexport const getAccountSrnFromId = (id, accounts) => {\n const account = accounts.find(\n account => account.get('srn').includes(id),\n null,\n Map()\n )\n return account.get('srn')\n}\n\nexport const getNameFromSrn = (srn = '') => {\n if (!srn) {\n return ''\n }\n\n if (!srn.startsWith('srn')) {\n return srn\n }\n\n if (srn.startsWith('srn:sonrai::')) {\n const typeandname = srn.replace('srn:sonrai::', '').split('/')\n typeandname.splice(0, 1)\n return typeandname.join('/')\n }\n\n const allParts = srn.split(':')\n\n let accounttypeandname\n if (allParts.length < 5) {\n accounttypeandname = allParts[allParts.length - 1].split('/')\n } else {\n accounttypeandname = allParts[4].split('/')\n }\n\n if (accounttypeandname.length >= 4) {\n if (accounttypeandname[1] === 'User') {\n accounttypeandname.splice(0, 3)\n } else if (accounttypeandname[2] === 'AWSLambda') {\n accounttypeandname.splice(0, 4)\n } else {\n accounttypeandname.splice(0, 2)\n }\n return accounttypeandname.join('/')\n } else {\n return accounttypeandname[accounttypeandname.length - 1]\n }\n}\n\nexport const getAccountIdFromAccountSrn = (srn = '') => {\n const str = srn.substring(srn.lastIndexOf('/') + 1)\n if (str.includes('k8')) {\n return str.replace('k8scluster', 'K8SCluster')\n }\n return str\n}\n\nexport const getSubscriptionFromSrn = srn => {\n if (!srn) {\n return ''\n }\n const bigSub = '/Subscription/'\n const lilSub = '/subscriptions/'\n let subscriptionId = ''\n if (srn.search(bigSub) !== -1) {\n subscriptionId = srn.substring(srn.indexOf(bigSub) + bigSub.length)\n if (subscriptionId.search('/') !== -1) {\n subscriptionId = subscriptionId.substring(0, subscriptionId.indexOf('/'))\n }\n }\n if (srn.search(lilSub) !== -1) {\n subscriptionId = srn.substring(srn.indexOf(lilSub) + lilSub.length)\n subscriptionId = subscriptionId.substring(0, subscriptionId.indexOf('/'))\n }\n\n return subscriptionId\n}\n\nexport const resultsLimitExceeded = data => {\n return _.get(data, 'items', []).length >= 500\n}\n\nexport const pluralize = (string = '', count) => {\n if (exists(count) && count === 1) {\n return string\n }\n\n return pluralizeLib(string)\n}\n\nexport const guidGen = () =>\n S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4()\n\n//Util for guidGen\nconst S4 = () => (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)\n\n//\"The Bert Rocker Algorithm\"\nexport const computeAvailableFilters = (type, queryRelations, queryTypes) => {\n const relations = queryRelations\n const graphQLTypes = queryTypes\n\n const typeRelationsExpanded = {}\n\n const putRelation = (otherType, name) => {\n if (typeRelationsExpanded[otherType] == undefined) {\n typeRelationsExpanded[otherType] = []\n }\n typeRelationsExpanded[otherType].push(name)\n }\n\n const getImplementingTypes = interfaceTypeName => {\n let implementingTypes = []\n for (let possibleType of graphQLTypes\n .get(interfaceTypeName)\n .get('possibleTypes')\n .toJS()) {\n if (possibleType.kind === 'INTERFACE') {\n implementingTypes.push.apply(\n implementingTypes,\n getImplementingTypes(possibleType.name)\n )\n } else {\n implementingTypes.push(possibleType.name)\n }\n }\n return implementingTypes\n }\n\n const putAllRelationsForType = (type, relations) => {\n for (let relation of relations) {\n let otherType = relation.to === type ? relation.from : relation.to\n let name = relation.name\n\n if (graphQLTypes.get(otherType).get('kind') === 'INTERFACE') {\n const implementingTypes = getImplementingTypes(otherType)\n for (let implementingType of implementingTypes) {\n putRelation(implementingType, name)\n }\n } else {\n putRelation(otherType, name)\n }\n }\n }\n\n const typeRelationsRaw = relations\n .find(rel => rel.get('type') === type, null, Map())\n .toJS()\n\n if (typeRelationsRaw.relations) {\n putAllRelationsForType(type, typeRelationsRaw.relations)\n }\n\n if (typeRelationsRaw.interfaces) {\n for (let interfaze of typeRelationsRaw.interfaces) {\n putAllRelationsForType(interfaze.type, interfaze.relations)\n }\n }\n\n return typeRelationsExpanded\n}\n\nexport const sonraiCountDisplay = (count, hasSearchLimit) => {\n const formatNumber = number => numeral(number).format('0.[00]a')\n if (exists(count)) {\n if (count >= SONRAI_MAX_COUNT && !hasSearchLimit) {\n return `${formatNumber(SONRAI_MAX_COUNT)}+`\n } else {\n return formatNumber(count)\n }\n } else {\n return '_'\n }\n}\n\nexport const truncateMiddle = (value = '', n = 25, charCount = 8) => {\n if (value.length <= n) {\n return value\n }\n\n return `${value.substr(0, charCount - 1)}\\u2026${value.substr(\n value.length - charCount,\n value.length - 1\n )}`\n}\n\nexport const getSearchIdForSonraiSearches = (options, sonraiSearches) => {\n const searches = {}\n if (options && sonraiSearches) {\n Object.keys(options.sonraiSearches).forEach(key => {\n searches[options.sonraiSearches[key]] = ''\n })\n const searchesJS = isImmutable(sonraiSearches)\n ? List.isList(sonraiSearches)\n ? sonraiSearches.toJS()\n : sonraiSearches.toList().toJS()\n : sonraiSearches\n if (!_.isEmpty(searchesJS)) {\n for (let searchGuy of searchesJS) {\n if (searchGuy.name in searches) {\n searches[searchGuy.name] = searchGuy.query\n }\n }\n }\n }\n return searches\n}\n\nexport const monthsToDays = numMonths => {\n return Math.abs(\n Number.parseInt(\n moment\n .duration(moment().diff(moment().add(numMonths, 'M').calendar()))\n .asDays()\n )\n )\n}\n\nexport const isMonitored = field => {\n if (exists(field) && !_.isEmpty(field)) {\n return field.includes('MONITORED')\n }\n return false\n}\n\nexport const formatChangeDetectionProperties = properties => {\n let changeDetectionProperties = []\n if (properties.length >= 1) {\n properties.forEach(property => {\n if (!_.isEmpty(changeDetectionProperties)) {\n const indexByKeyName = changeDetectionProperties\n .map(x => x.keyName)\n .indexOf(property.keyName)\n if (indexByKeyName !== -1) {\n const haveSameAlertLevel =\n changeDetectionProperties[indexByKeyName].alertLevel ===\n property.alertLevel\n if (haveSameAlertLevel) {\n if (\n exists(\n changeDetectionProperties[indexByKeyName].actionClassification\n )\n ) {\n changeDetectionProperties[indexByKeyName].actionClassification = [\n ...changeDetectionProperties[indexByKeyName]\n .actionClassification,\n property.actionClassification[0],\n ]\n }\n } else {\n const indexByAlertLevel = changeDetectionProperties.findIndex(\n item => {\n return (\n item.keyName === property.keyName &&\n item.alertLevel === property.alertLevel\n )\n }\n )\n\n if (indexByAlertLevel !== -1) {\n if (\n exists(\n changeDetectionProperties[indexByAlertLevel]\n .actionClassification\n )\n ) {\n changeDetectionProperties[\n indexByAlertLevel\n ].actionClassification = [\n ...changeDetectionProperties[indexByAlertLevel]\n .actionClassification,\n property.actionClassification &&\n property.actionClassification[0],\n ]\n }\n } else {\n changeDetectionProperties.push(property)\n }\n }\n } else {\n changeDetectionProperties.push(property)\n }\n } else {\n changeDetectionProperties.push(property)\n }\n })\n }\n if (!_.isEmpty(changeDetectionProperties)) {\n changeDetectionProperties.forEach(item => {\n if (\n exists(item.actionClassification) &&\n Array.isArray(item.actionClassification)\n ) {\n item.actionClassification = _.uniq(item.actionClassification)\n }\n })\n }\n return changeDetectionProperties\n}\n\nexport const metadataToObj = metadata => {\n const mappedVals = _.reduce(\n metadata,\n (finalMap, val) => {\n // the key is everything on the LHS of first unescaped colon so we split\n // on all unescaped ':'\n const split = val.match(/(\\\\.|[^:])+/g)\n\n // do replacement here ot unescape colons\n let key = split[0].replace(/\\\\:/g, ':')\n const value = val.substring(split[0].length + 1).replace(/\\\\:/g, ':')\n\n return {\n ...finalMap,\n [key]: value,\n }\n },\n {}\n )\n return mappedVals\n}\n\nexport const metdataNestedObject = metadata => {\n const metadataObject = metadataToObj(metadata)\n return _.reduce(\n metadataObject,\n (result, value, key) => {\n const jsonPath = key.split('.').map(segment => {\n const number = Number(segment)\n return _.isNaN(number) ? segment : number\n })\n _.set(result, jsonPath, value)\n return result\n },\n {}\n )\n}\n\nconst ESCAPED_WHITESPACE_PATTERN = '\\\\\\\\[nrt]'\n\n/**\n * If a metadata field is a string, it can contain stringified JSON. This\n * method tries to identify if that is the case and then parse the string.\n *\n * Sometimes the strings have excaped whitespace characters them so it will\n * try to remove those too before it parses it.\n */\nexport const parseJSONString = value => {\n // First try to figure out if the string might contain JSON before actually\n // trying to parse it. Trying to save come CPU cycles by doing this...\n\n // remove both escaped and non-escaped whitesapce from start of string\n const startUnescapped = value\n .replace(new RegExp(ESCAPED_WHITESPACE_PATTERN), '')\n .trim()\n\n // it could be stringified, non-literal (object or array) json if the first\n // character is '[' or '{'\n const couldBeNonLiteral =\n startUnescapped.charAt(0) === '[' || startUnescapped.charAt(0) === '{'\n\n // here we think it's probably not stringified JSON, or if it is, it's not\n // an object or an array, so no sense parsing it.\n if (!couldBeNonLiteral) {\n return value\n }\n\n // remove all the escaped whitespace\n const allWhitespaceUnescaped = value.replace(\n new RegExp(ESCAPED_WHITESPACE_PATTERN, 'g'),\n ''\n )\n\n // try to return the parsed value\n try {\n return JSON.parse(allWhitespaceUnescaped)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.debug('Could not escape metadata value: ', allWhitespaceUnescaped)\n }\n\n // maybe the string wasn't JSON afterall, so we just return original value\n return value\n}\n\n/**\n * Sometimes metadata gets reported with values that are stringified json. This\n * method iterates over the metadata object and will find fields that are\n * stringified JSON and parse them.\n */\nexport const unescapeJSONObject = arg => {\n // this method gets called recursively, so it's possible a child in the\n // document got passed that isn't an object...\n if (_.isArray(arg)) {\n return arg.map(value => unescapeJSONObject(value))\n }\n\n // if it's a string, try parse it as JSON\n if (_.isString(arg)) {\n const parsedString = parseJSONString(arg)\n if (parsedString !== arg) {\n // the string must have been JSON, so escape the nested object\n return unescapeJSONObject(parsedString)\n }\n }\n\n if (!_.isObject(arg)) {\n return arg // the child passed must be a literal\n }\n\n // create a copy of the object w/ all it's fields unescaped\n const doc = { ...arg }\n for (let key of Object.keys(doc)) {\n const value = arg[key]\n doc[key] = unescapeJSONObject(value)\n }\n\n return doc // return our copy\n}\n\nexport const getIconMapping = (type = '') => {\n switch (type.toLowerCase()) {\n case 'actor':\n return { unicode: '\\uf85e', faIcon: 'digging' }\n case 'audit':\n return { unicode: '\\uf70e', faIcon: 'scroll' }\n case 'policy':\n case 'networkpolicy':\n case 'policyentry':\n case 'platformpolicyentry':\n case 'platformpolicy':\n case 'sharedaccesspolicy':\n case 'passwordpolicy':\n return { unicode: '\\uf15b', faIcon: 'file' }\n case 'cert':\n case 'servercertificate':\n case 'signingcertificate':\n return { unicode: '\\uf5f3', faIcon: 'file-certificate' }\n case 'effectivepermission':\n return { unicode: '\\uf0c1', faIcon: 'link' }\n case 'entity':\n case 'resource':\n case 'service':\n return { unicode: '\\uf1b2', faIcon: 'cube' }\n case 'account':\n case 'platformaccount':\n return { unicode: '\\uf2bd', faIcon: 'user-circle' }\n case 'platformorganization':\n return { unicode: '\\uf1ad', faIcon: 'building' }\n case 'networkinterface':\n return { unicode: '\\uf090', faIcon: 'sign-in' }\n case 'publickey':\n case 'accesskey':\n case 'encryptionkey':\n return { unicode: '\\uf084', faIcon: 'key' }\n case 'mfadevice':\n return { unicode: '\\uf029', faIcon: 'qrcode' }\n case 'blockstorage':\n case 'datacontainer':\n case 'datastore':\n case 'cidr':\n case 'data':\n return { unicode: '\\uf1c0', faIcon: 'database' }\n case 'image':\n return { unicode: '\\uf0a0', faIcon: 'hdd' }\n case 'dataobject':\n case 'resourcegroup':\n return { unicode: '\\uf1b3', faIcon: 'cubes' }\n case 'network':\n case 'networksubnet':\n case 'networkcomponent':\n case 'infrastructure':\n return { unicode: '\\uf0e8', faIcon: 'sitemap' }\n case 'storageaccount':\n case 'organizationalunit':\n return { unicode: '\\uf660', faIcon: 'folders' }\n case 'networkpermission':\n case 'permission':\n case 'platformpermission':\n return { unicode: '\\uf30d', faIcon: 'lock-alt' }\n case 'list':\n case 'permissionlist':\n return { unicode: '\\uf03a', faIcon: 'list' }\n case 'identity':\n case 'platformidentity':\n return { unicode: '\\uf2c1', faIcon: 'id-badge' }\n case 'identityprovider':\n return { unicode: '\\uf19c', faIcon: 'university' }\n case 'protection':\n return { unicode: '\\uf023', faIcon: 'hollowLock' }\n case 'systemconfig':\n return { unicode: '\\uf085', faIcon: 'cogs' }\n case 'networkservice':\n return { unicode: '\\uf519', faIcon: 'broadcast-tower' }\n case 'platformgroup':\n case 'subnetgroup':\n case 'optiongroup':\n case 'rollup':\n return { unicode: '\\uf247', faIcon: 'object-group' }\n case 'subscription':\n return { unicode: '\\uf2b9', faIcon: 'address-book' }\n case 'city':\n case 'subdivision':\n return { unicode: '\\uf64f', faIcon: 'city' }\n case 'policyversion':\n case 'datastoreversion':\n return { unicode: '\\uf292', faIcon: 'hashtag' }\n case 'platformbusinessunit':\n return { unicode: '\\uf1ad', faIcon: 'building' }\n case 'role':\n case 'group':\n return { unicode: '\\uf0c0', faIcon: 'users' }\n case 'snapshot':\n return { unicode: '\\uf083', faIcon: 'camera-retro' }\n case 'content':\n return { unicode: '\\uf573', faIcon: 'file-signature' }\n case 'country':\n return { unicode: '\\uf57d', faIcon: 'globe-americas' }\n case 'region':\n case 'availabilityzone':\n return { unicode: '\\uf0ac', faIcon: 'globe' }\n case 'action':\n case 'platformaction':\n return { unicode: '\\uf245', faIcon: 'mouse-pointer' }\n case 'user':\n return { unicode: '\\uf007', faIcon: 'user' }\n case 'servicetype':\n case 'platformactiontype':\n case 'actiontype':\n case 'servicetag':\n case 'datastoretype':\n case 'platformdatatype':\n case 'serviceclassification':\n case 'actionclassification':\n case 'dataclassification':\n case 'datastoreclassification':\n return { unicode: '\\uf02c', faIcon: 'tags' }\n case 'portrange':\n return { unicode: '\\uf0ec', faIcon: 'exchange' }\n case 'protocol':\n return { unicode: '\\uf101', faIcon: 'angle-double-right' }\n case 'report':\n return { unicode: '\\uf570', faIcon: 'file-invoice' }\n case 'cluster':\n return { unicode: '\\uf58d', faIcon: 'grip-horizontal' }\n case 'compute':\n return { unicode: '\\uf2db', faIcon: 'microchip' }\n case 'cloud':\n return { unicode: '\\uf0c2', faIcon: 'cloud' }\n case 'tag':\n return { unicode: '\\uf02b', faIcon: 'tag' }\n case 'parameter':\n case 'property':\n case 'clusterparametergroup':\n case 'parametergroup':\n return { unicode: '\\uf121', faIcon: 'code' }\n case 'platformuser':\n return { unicode: '\\uf509', faIcon: 'users-cog' }\n case 'location':\n return { unicode: '\\uf3c5', faIcon: 'map-marker-alt' }\n case 'secretstore':\n return { unicode: '\\uf495', faIcon: 'warehouse-alt' }\n case 'secret':\n return { unicode: '\\uf6fa', faIcon: 'mask' }\n case 'workload':\n return { unicode: '\\uf5fc', faIcon: 'laptop-code' }\n default:\n return { unicode: '\\uf1b2', faIcon: 'cube' }\n }\n}\n\nexport const getBaseEntityColor = (type = '', theme = {}) => {\n switch (type.toLowerCase()) {\n case 'publickey':\n case 'encryptionkey':\n case 'cert':\n case 'servercertificate':\n case 'signingcertificate':\n return theme.protection\n case 'blockstorage':\n case 'datacontainer':\n case 'datastore':\n case 'data':\n case 'dataobject':\n case 'keystore':\n case 'secret':\n case 'secretstore':\n return theme.data\n case 'identity':\n case 'role':\n case 'group':\n case 'user':\n case 'platformuser':\n case 'account':\n case 'mfadevice':\n case 'organization':\n case 'organizationalunit':\n case 'identityprovider':\n case 'identityreference':\n case 'accesskey':\n return theme.identity\n case 'networkpolicy':\n case 'audit':\n case 'cidr':\n case 'cloud':\n case 'eventStream':\n case 'compute':\n case 'dnszone':\n case 'dnsrecord':\n case 'networkcomponent':\n case 'networklisteners':\n case 'networkgroups':\n case 'image':\n case 'network':\n case 'networkinterface':\n case 'networkpermission':\n case 'networkroutetable':\n case 'networkroute':\n case 'networksubnet':\n case 'option':\n case 'optiongroup':\n case 'parameter':\n case 'paramatergroup':\n case 'clusterparamatergroup':\n case 'servicetag':\n case 'cluster':\n case 'snapshot':\n case 'subnetgroup':\n case 'trigger':\n return theme.infrastructure\n case 'city':\n case 'subdivision':\n case 'country':\n case 'region':\n case 'availabilityzone':\n case 'location':\n return theme.emphasis\n default:\n return theme.secondary\n }\n}\n\nexport const hashCode = (str = '') => {\n var hash = 0\n for (var i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash)\n }\n return hash\n}\n\nexport const colorForEntityString = (val = '', typeColors) => {\n const value = typeof val !== 'string' ? String(val) : val.toLowerCase()\n\n if (typeColors) {\n return typeColors[value] || colorForString(value)\n }\n\n return colorForString(value)\n}\n\nexport const colorForString = (val = '') => {\n const num = hashCode(val)\n var c = (num & 0x00ffffff).toString(16).toUpperCase()\n\n const hex = '00000'.substring(0, 6 - c.length) + c\n return '#' + hex\n}\n\nexport const shiftColorToMatch = (colorToShift, baseColor) => {\n const baseColorLib = color(baseColor)\n if (\n baseColorLib.red() === baseColorLib.green() &&\n baseColorLib.red() === baseColorLib.blue()\n ) {\n //target color is grey, so desaturate the given color otherwise it will turn out red\n return color(colorToShift).desaturate(1).hex()\n }\n\n const baseHue = baseColorLib.hue()\n\n return color(colorToShift).hue(baseHue).hex()\n}\n\nexport const createNestedOrderMap = excuseMeSirIMustRemainOrdered => {\n // very important that i remain ordered\n return typeof excuseMeSirIMustRemainOrdered !== 'object' ||\n excuseMeSirIMustRemainOrdered === null\n ? excuseMeSirIMustRemainOrdered\n : Array.isArray(excuseMeSirIMustRemainOrdered)\n ? Immutable.Seq(excuseMeSirIMustRemainOrdered)\n .map(createNestedOrderMap)\n .toList()\n : Immutable.Seq(excuseMeSirIMustRemainOrdered)\n .map(createNestedOrderMap)\n .toOrderedMap()\n}\n\nexport const getValidAliasName = alias => {\n // wow so cool! fancy pants over heremaking it in 5 lines instead of 35\n return alias\n .slice(/[a-zA-Z]|_/.exec(alias).index) // slice off everything before first char\n .replace(/([^a-zA-Z_0-9 ]+)/g, '') // replace all the invsalid characters with nothing\n .split(/\\s/) // get an array of the words\n .map((val, index) => (index > 0 ? _.capitalize(val) : val)) // capitalize each one\n .join('') // make one string\n}\n\nexport const shiftDateArg = (arg, alertTime) => {\n const originalAlertTime = alertTime.toISOString()\n\n if (arg.get('dateOffset')) {\n if (isImmutable(arg.get('dateOffset'))) {\n const offsetType = arg.getIn(['dateOffset', 'type'])\n const tense = arg.getIn(['dateOffset', 'tense'])\n const number = arg.getIn(['dateOffset', 'number'])\n const measure = arg.getIn(['dateOffset', 'measure'])\n\n if (offsetType === 'LT' && tense === 'past') {\n // \"More than 30 days ago\"\n return arg\n .set('op', 'LT')\n .set('value', alertTime.subtract(number, measure).toISOString())\n .delete('dateOffset')\n } else if (offsetType === 'LT' && tense === 'future') {\n // \"Within the next 90 days\"\n return arg\n .set('op', 'BETWEEN')\n .set(\n 'values',\n fromJS([\n originalAlertTime,\n alertTime.add(number, measure).toISOString(),\n ])\n )\n .delete('dateOffset')\n } else if (offsetType === 'GT' && tense === 'past') {\n // \"Within the past 24 hours\"\n return arg\n .set('op', 'BETWEEN')\n .set(\n 'values',\n fromJS([\n alertTime.subtract(number, measure).toISOString(),\n originalAlertTime,\n ])\n )\n .delete('dateOffset')\n } else if (offsetType === 'GT' && tense === 'future') {\n // \"More than 90 days from now\"\n return arg\n .set('op', 'GT')\n .set('value', alertTime.add(number, measure).toISOString())\n .delete('dateOffset')\n }\n } else {\n if (arg.get('dateOffset') < 0) {\n //Value is Older than X days ago\n return arg\n .set('op', 'LTE')\n .set(\n 'value',\n alertTime.add(arg.get('dateOffset'), 'days').toISOString()\n )\n .delete('dateOffset')\n } else {\n //Value is newer than X days ago\n return arg\n .set('op', 'BETWEEN')\n .set(\n 'values',\n fromJS([\n alertTime\n .subtract(arg.get('dateOffset'), 'days')\n .subtract(1, 'hour')\n .toISOString(),\n originalAlertTime,\n ])\n )\n .delete('dateOffset')\n }\n }\n }\n\n return arg\n}\n\nexport const shiftDateArgs = (keyedArgs, timestamp) => {\n const alertTime =\n typeof timestamp === 'string' ? moment(timestamp) : moment.unix(timestamp)\n return keyedArgs.map(keyedArg => {\n const firstKey = keyedArg.keySeq().first()\n const arg = shiftDateArg(keyedArg.get(firstKey), alertTime)\n\n return fromJS({\n [firstKey]: arg,\n })\n })\n}\n\nexport const getColorByTimePassed = date => {\n const days = moment().diff(moment(date), 'days')\n if (days < 7) {\n return '#11871f'\n } else if (days < 30) {\n return '#fccf49'\n } else if (days < 90) {\n return '#ff802b'\n } else {\n return '#bc1818'\n }\n}\n\nexport const getPrincipalType = srn => {\n if (srn.includes('/User/Root/') || srn.includes('/Account/')) {\n return 'Account'\n }\n\n if (srn.includes('/User/')) {\n return 'User'\n }\n\n if (srn.includes('/IdentityProvider/')) {\n return 'Identity Provider'\n }\n\n if (srn.includes('/Service/')) {\n return 'AWS Service'\n }\n\n return '-'\n}\n\nexport const getDefaultChangeDetectionPropertiesByType = type => {\n switch (type && type.toLowerCase()) {\n case 'user':\n return ['accessed', 'activefrom', 'accessedusing']\n default:\n return []\n }\n}\n\nexport const stripExtraChars = (text = '') => {\n return text\n .toLowerCase()\n .replace(/[^\\w\\s]|_/g, '')\n .replace(/\\s+/g, ' ')\n .trim()\n}\n\nexport const keywordMatch = (a, b) => {\n const first = (a || '').toLowerCase()\n const second = (b || '').toLowerCase()\n\n return first.includes(second) || second.includes(first)\n}\n\nexport const getNameForHelmet = data => {\n const keys = ['friendlyName', 'name', 'title', 'type', '__typename'] // fields to use in order\n const key = keys.find(key => data[key]) // first field thats not null\n const charLimit = 20\n let name = _.truncate(data[key], {\n length: charLimit,\n separator: ' ',\n })\n return name || ''\n}\n\nexport const getSwimlaneNameFromSrn = (srn, swimlanes) => {\n const swimlane =\n swimlanes.find(swimlane => swimlane.get('srn') === srn) || Map()\n return swimlane.get('title') || swimlane.get('name') || srn\n}\n\nexport const getSwimlaneSrnFromResourceId = (resourceId, swimlanes) => {\n const swimlane =\n swimlanes.find(swimlane => swimlane.get('resourceId') === resourceId) ||\n Map()\n return swimlane.get('srn')\n}\n\nexport const getAcceptableCloudAccountTypesForBots = (\n swimlaneAccounts,\n allAccounts\n) => {\n if (swimlaneAccounts.isEmpty()) {\n return []\n }\n const accountsByCloudType = swimlaneAccounts\n .map(accountId => getAccountSrnFromId(accountId, allAccounts))\n .filter(srn => srn) // if it doesn't exist the account was likely deleted\n .map(srn => srn && srn.split(':')[1]) // grab the cloud type of the srn\n .map(type => type && type.toLowerCase())\n return !accountsByCloudType.isEmpty() ? accountsByCloudType.toJS() : []\n}\n\nexport const isPlatformRole = role => {\n const isntSwimmyPerm = perm => !SWIMLANE_SCOPED_PERMISSIONS.includes(perm)\n const perms = role.get('expandedPermissions', List())\n return undefined !== perms.find(isntSwimmyPerm)\n}\n\nexport const isValidURL = url => {\n if (url && typeof url === 'string' && url.length >= 1) {\n var pattern = new RegExp(\n '^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$',\n 'i'\n ) // fragment locator\n return !!pattern.test(url)\n }\n return false\n}\nexport const getNodeTypeMap = (\n filteredMappings,\n nodeTypeCounts,\n queryTypes\n) => {\n const getCountFromGroupedQuery = nodeType => {\n const node = nodeTypeCounts.find(\n node => node.get('value').toLowerCase() === nodeType.toLowerCase()\n )\n if (node) {\n return node.get('count')\n }\n return null\n }\n let map = {}\n for (let i = 0; i < filteredMappings.length; i++) {\n const type = filteredMappings[i]\n const { nodeType } = type\n let count = getCountFromGroupedQuery(nodeType)\n if (!count) {\n const isInterface = queryTypes.getIn([nodeType, 'kind']) === 'INTERFACE'\n if (!isInterface) {\n map[nodeType] = { count: 0 }\n } else {\n const obj = queryTypes.get(nodeType, Map())\n const possibleTypes = obj.get('possibleTypes', List())\n const accumCountForInterfaceNodeType = possibleTypes.reduce(\n (acc, cur) => {\n const count = getCountFromGroupedQuery(cur.get('name'))\n if (count) {\n return acc + count\n }\n return acc\n },\n 0\n )\n map[nodeType] = { count: accumCountForInterfaceNodeType }\n }\n } else {\n map[nodeType] = { count }\n }\n }\n return fromJS(map)\n}\n\nexport const stripTags = things => {\n if (typeof things === 'string') {\n return things.replace(//g, '\t>')\n }\n return things.map(cat => cat.replace(//g, '\t>'))\n}\n\nexport const getTicketId = ticketResourceId => {\n return _.last(_.split(ticketResourceId, '/'))\n}\n\nexport const getPoliciesFromObjectives = objectives => {\n const policies = []\n objectives.forEach(objective => {\n objective\n .getIn(['appliedControlFrameworks', 'items'], List())\n .forEach(item => {\n item.getIn(['contains', 'items'], List()).forEach(item =>\n policies.push({\n srn: item.get('srn'),\n name: objective.get('name'),\n })\n )\n })\n })\n const grouped = _.groupBy(\n _.uniqBy(policies, item => item.srn),\n 'name'\n )\n _.keys(grouped).forEach(key => {\n grouped[key] = grouped[key].map(item => item.srn)\n })\n return grouped\n}\n\nexport const orderObjectiveViolationData = (tickets, objectives, policies) => {\n const sortedByCFOrder = _.sortBy(tickets, ticket => {\n const objective =\n objectives.find(\n objective => objective.get('srn') === ticket.objectiveSrn\n ) || Map()\n\n const policy =\n policies.find(item => item.get('srn') === ticket.ticketKey) || Map()\n\n const controlFrameworksInPolicy = policy.getIn(\n ['containedByControlFramework', 'items'],\n List()\n )\n const controlFrameworksInObjective =\n objective.get('definedControlFrameworks') || List()\n\n const controlFrameWorkToOrderBy = controlFrameworksInObjective.find(cf => {\n const match = controlFrameworksInPolicy.find(\n item => item.get('srn') === cf.get('controlFrameworkSrn')\n )\n return match\n })\n\n return controlFrameWorkToOrderBy.get('controlFrameworkOrder')\n })\n\n const sortedByPolicy = sortedByCFOrder.sort((a, b) => {\n const policyA =\n policies.find(item => item.get('srn') === a.ticketKey) || Map()\n const policyB =\n policies.find(item => item.get('srn') === b.ticketKey) || Map()\n\n if (a.objectiveSrn === b.objectiveSrn) {\n const controlFrameworksInPolicyA = policyA.getIn(\n ['containedByControlFramework', 'items'],\n List()\n )\n const controlFrameworksInPolicyB = policyB.getIn(\n ['containedByControlFramework', 'items'],\n List()\n )\n controlFrameworksInPolicyA.forEach(cf => {\n if (controlFrameworksInPolicyB.includes(cf)) {\n return (\n policyB.get('alertingLevelNumeric') -\n policyA.get('alertingLevelNumeric')\n )\n }\n })\n }\n })\n\n return sortedByPolicy\n}\n\nexport const getInterfaceCount = (queryTypes, interfaceName, countsByType) => {\n const possibleTypes = queryTypes.getIn(\n [interfaceName, 'possibleTypes'],\n List()\n )\n\n const casedKeys = Object.keys(countsByType)\n const countsByTypeLower = {}\n casedKeys.forEach(key => {\n countsByTypeLower[key.toLowerCase()] = countsByType[key]\n })\n\n const totalCount = possibleTypes.reduce((total, possibletype) => {\n const type = possibletype.get('name').toLowerCase()\n const count = countsByTypeLower[type] || 0\n return total + count\n }, 0)\n\n return totalCount\n}\n\nexport const hasFinishedEvaluatingFrameworks = (\n appliedControlFrameworks,\n controlGroups, //ALL control frameworks\n swimlaneSrn\n) => {\n const controlFrameworks = appliedControlFrameworks.filter(\n cf =>\n !cf.get('swimlaneSRNs') || //If swimalneSRNs is null, it is enabled globally\n (cf.get('swimlaneSRNs') || List()).includes(swimlaneSrn)\n )\n\n const controlFrameworksThatHaveEvaluated = controlFrameworks.filter(cf => {\n const fullCf = controlGroups.get(cf.get('srn')) || Map()\n const lastRunSwimlanes = fullCf.get('lastRunSwimlanes') || List()\n return lastRunSwimlanes.includes(swimlaneSrn)\n })\n\n return (\n controlFrameworks.size !== 0 &&\n controlFrameworks.size === controlFrameworksThatHaveEvaluated.size\n )\n}\n\nexport const getSearchLimit = (reduxLimit, prevLimit) => {\n if (\n !prevLimit ||\n (reduxLimit !== prevLimit && reduxLimit !== DEFAULT_SEARCH_LIMIT)\n ) {\n return reduxLimit\n }\n return prevLimit\n}\n\nexport const hadResourceDeleted = ticket => {\n const resource = ticket.resource || {}\n if (ticket.resourceSRN) {\n if (_.isEmpty(resource)) {\n return true\n }\n }\n return false\n}\n\nexport const isEnableAllObjectiveSwimlaneDisabled = (\n objectives,\n controlFrameworks\n) => {\n const controlFrameworkSrns = objectives\n .map(objective =>\n objective\n .getIn(['appliedControlFrameworks', 'items'], List())\n .map(item => item.get('srn'))\n )\n .flatten()\n\n const disabledControlFrameworks = controlFrameworkSrns.filter(srn => {\n return !(\n controlFrameworks.getIn([srn, 'enabled']) &&\n controlFrameworks.getIn([srn, 'swimlaneSRNs']) === null\n )\n })\n\n return disabledControlFrameworks.isEmpty()\n}\n\nexport const getSupportedFilterFields = (filterFieldType, types) => {\n const fields = (types.get(filterFieldType) || Map()).get(\n 'inputFields',\n List()\n )\n\n return fields.reduce((supportedFilters, currentDef) => {\n const fieldName = currentDef.get('name')\n const typeName = currentDef.getIn(['type', 'name'])\n if (typeName) {\n const childFields = (types.get(typeName) || Map())\n .get('inputFields', List())\n .map(def => def.get('name'))\n .filter(field => !supportedFilters.includes(field))\n return supportedFilters.merge(childFields)\n }\n return supportedFilters.push(fieldName)\n }, List())\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport TextLink from 'components/TextLink'\nimport Hoverable from 'components/Hoverable'\nimport { TitleShimmer } from 'components/ShimmerLoader'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport ReactTooltip from 'react-tooltip'\nimport uuid from 'uuid/v4'\n\nclass HeaderLabelLink extends React.PureComponent {\n constructor(props) {\n super(props)\n this.tooltipId = uuid()\n }\n\n styles = {\n clipboardButton: {\n marginBottom: '5px',\n width: '32px',\n },\n textStyle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '30px',\n marginTop: '-3px',\n },\n stayInHereYouPieceOfTrash: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }\n\n getTooltop = srn => {\n return (\n \n {srn}\n \n )\n }\n\n render() {\n let name = ''\n if (!this.props.loading) {\n name = this.props.data.friendlyName\n ? this.props.data.friendlyName\n : this.props.data.name\n }\n\n return (\n
    \n {this.props.loading ? (\n \n ) : (\n
    \n {name ? (\n (\n
    \n
    \n {this.props.noLink ? (\n name\n ) : (\n \n {name}\n \n )}\n
    \n {hovered && this.props.copy ? (\n
    \n \n
    \n ) : (\n
    \n )}\n
    \n )}\n />\n ) : (\n `-`\n )}\n {this.props.tooltip && this.getTooltop(this.props.tooltip)}\n
    \n )}\n
    \n )\n }\n}\n\nHeaderLabelLink.propTypes = {\n tooltip: PropTypes.string,\n data: PropTypes.any,\n copy: PropTypes.bool,\n noLink: PropTypes.bool,\n loading: PropTypes.bool,\n}\n\nexport default HeaderLabelLink\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nexport class SmolExpand extends React.Component {\n constructor(props) {\n super(props)\n this.styles = {\n expanded: {\n height: 'auto',\n overflow: 'visible',\n },\n content: {\n wordBreak: 'break-word',\n wordWrap: 'break-word', //Needed for Firefox\n overflow: 'hidden',\n position: 'relative',\n },\n expandButton: {\n fontSize: '0.8em',\n },\n }\n\n this.state = {\n contentOverflows: null,\n }\n\n this.containerRef = React.createRef()\n }\n\n componentDidMount() {\n const element = this.containerRef.current\n if (element) {\n this.setState({\n contentOverflows: element.scrollHeight > element.clientHeight,\n })\n this.props.setContentOverflow(element.scrollHeight > element.clientHeight)\n }\n }\n\n componentDidUpdate() {\n if (this.props.autoUpdate) {\n const element = this.containerRef.current\n if (element) {\n if (element.scrollHeight <= Number.parseInt(this.props.height)) {\n if (this.state.contentOverflows) {\n this.props.setContentOverflow(false)\n this.setState({ contentOverflows: false })\n }\n } else {\n if (!this.state.contentOverflows) {\n this.props.setContentOverflow(true)\n this.setState({ contentOverflows: true })\n }\n }\n }\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n
    \n )\n }\n}\n\nSmolExpand.defaultProps = {\n height: '1.7em',\n style: {},\n}\n\nSmolExpand.propTypes = {\n children: PropTypes.node,\n expanded: PropTypes.bool,\n height: PropTypes.string,\n style: PropTypes.object,\n autoUpdate: PropTypes.bool,\n scale: PropTypes.bool,\n setContentOverflow: PropTypes.func,\n}\n\nexport default SmolExpand\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { selectSubscriptions } from 'containers/SonraiData/selectors'\nimport { Map } from 'immutable'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport TextLink from 'components/TextLink'\nimport Hoverable from 'components/Hoverable'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport ReactTooltip from 'react-tooltip'\nimport uuid from 'uuid/v4'\n\nclass Subscription extends React.PureComponent {\n constructor(props) {\n super(props)\n this.tooltipId = uuid()\n }\n\n styles = {\n clipboardButton: {\n marginBottom: '5px',\n width: '32px',\n },\n textStyle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '30px',\n marginTop: '-3px',\n },\n }\n\n getTooltop = srn => {\n return (\n \n {srn}\n \n )\n }\n\n render() {\n const subscription = this.props.subscriptions.find(\n sub => sub.get('srn').includes(this.props.subscriptionId),\n Map()\n )\n let name = this.props.subscriptionId\n\n if (subscription) {\n name = subscription.get('friendlyName') || subscription.get('name') || '-'\n }\n\n return (\n
    \n
    \n {subscription ? (\n (\n
    \n
    \n \n {name}\n \n
    \n {hovered ? (\n
    \n \n
    \n ) : (\n
    \n )}\n
    \n )}\n />\n ) : (\n `${this.props.subscriptionId}`\n )}\n {this.getTooltop(this.props.subscriptionId)}\n
    \n
    \n )\n }\n}\n\nSubscription.propTypes = {\n subscriptions: ImmutablePropTypes.iterable,\n subscriptionId: PropTypes.string,\n}\n\nconst mapStateToProps = createStructuredSelector({\n subscriptions: selectSubscriptions,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default withConnect(Subscription)\n","const PREFIX = 'app/containers/NodeViewHeader/'\n\nexport const GET_NODE_DATA = `${PREFIX}GET_NODE_DATA`\nexport const SET_NODE_DATA = `${PREFIX}SET_NODE_DATA`\nexport const ERR_NODE_DATA = `${PREFIX}ERR_NODE_DATA`\n\nexport const SET_CRM_DATA = `${PREFIX}SET_CRM_DATA`\nexport const ERR_CRM_DATA = `${PREFIX}ERR_CRM_DATA`\n\nexport const SET_SWIMLANES = `${PREFIX}SET_SWIMLANES`\nexport const ERR_SWIMLANES = `${PREFIX}ERR_SWIMLANES`\n\nexport const GET_KEYVAULT_DATA = `${PREFIX}GET_KEYVAULT_DATA`\nexport const SET_KEYVAULT_DATA = `${PREFIX}SET_KEYVAULT_DATA`\nexport const ERR_KEYVAULT_DATA = `${PREFIX}ERR_KEYVAULT_DATA`\n\nexport const GET_RESOURCE_GROUP = `${PREFIX}GET_RESOURCE_GROUP`\nexport const SET_RESOURCE_GROUP = `${PREFIX}SET_RESOURCE_GROUP`\nexport const ERR_RESOURCE_GROUP = `${PREFIX}ERR_RESOURCE_GROUP`\n\nexport const ADD_KEYVAULT_CREDS = `${PREFIX}ADD_KEYVAULT_CREDS`\nexport const ADD_KEYVAULT_CREDS_SUCCESS = `${PREFIX}ADD_KEYVAULT_CREDS_SUCCESS`\n\nexport const ADD_RESOURCE_TO_SWIMLANE = `${PREFIX}ADD_RESOURCE_TO_SWIMLANE`\nexport const ADD_RESOURCE_TO_SWIMLANE_SUCCESS = `${PREFIX}ADD_RESOURCE_TO_SWIMLANE_SUCCESS`\n\nexport const ADD_TAG = `${PREFIX}ADD_TAG`\nexport const ADD_TAG_SUCCESS = `${PREFIX}ADD_TAG_SUCCESS`\n\nexport const REMOVE_TAG = `${PREFIX}REMOVE_TAG`\nexport const REMOVE_TAG_SUCCESS = `${PREFIX}REMOVE_TAG_SUCCESS`\n\nexport const REMOVE_KEYVAULT_CREDS = `${PREFIX}REMOVE_KEYVAULT_CREDS`\nexport const REMOVE_KEYVAULT_CREDS_SUCCESS = `${PREFIX}REMOVE_KEYVAULT_CREDS_SUCCESS`\n\nexport const UPDATE_KEYVAULT_CREDS = `${PREFIX}UPDATE_KEYVAULT_CREDS`\nexport const UPDATE_KEYVAULT_CREDS_SUCCESS = `${UPDATE_KEYVAULT_CREDS}UPDATE_KEYVAULT_CREDS_SUCCESS`\n\nexport const ADD_CHANGE_DETECTION_PROPERTIES = `${PREFIX}ADD_CHANGE_DETECTION_PROPERTIES`\nexport const ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS = `${PREFIX}ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS`\n\nexport const REMOVE_CHANGE_DETECTION_PROPERTIES = `${PREFIX}REMOVE_CHANGE_DETECTION_PROPERTIES`\nexport const REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS = `${PREFIX}REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS`\n\nexport const TOGGLE_RESOURCE_MONITORING = `${PREFIX}TOGGLE_RESOURCE_MONITORING`\nexport const TOGGLE_RESOURCE_MONITORING_SUCCESS = `${PREFIX}TOGGLE_RESOURCE_MONITORING_SUCCESS`\n\nexport const UPDATE_CHANGE_DETECTION_PROPERTY = `${PREFIX}UPDATE_CHANGE_DETECTION_PROPERTY`\nexport const UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS = `${PREFIX}UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS`\n\nexport const UPDATE_FRIENDLY_NAME = `${PREFIX}UPDATE_FRIENDLY_NAME`\nexport const UPDATE_FRIENDLY_NAME_SUCCESS = `${PREFIX}UPDATE_FRIENDLY_NAME_SUCCESS`\n\nexport const UPDATE_IMPORTANCE = `${PREFIX}UPDATE_IMPORTANCE`\nexport const UPDATE_IMPORTANCE_SUCCESS = `${PREFIX}UPDATE_IMPORTANCE_SUCCESS`\n","import { createAction } from 'redux-actions'\n\nimport {\n GET_NODE_DATA,\n SET_NODE_DATA,\n ERR_NODE_DATA,\n SET_CRM_DATA,\n ERR_CRM_DATA,\n GET_KEYVAULT_DATA,\n SET_KEYVAULT_DATA,\n ERR_KEYVAULT_DATA,\n GET_RESOURCE_GROUP,\n SET_RESOURCE_GROUP,\n ERR_RESOURCE_GROUP,\n SET_SWIMLANES,\n ERR_SWIMLANES,\n ADD_CHANGE_DETECTION_PROPERTIES,\n ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS,\n ADD_KEYVAULT_CREDS,\n ADD_KEYVAULT_CREDS_SUCCESS,\n ADD_RESOURCE_TO_SWIMLANE,\n ADD_RESOURCE_TO_SWIMLANE_SUCCESS,\n ADD_TAG,\n ADD_TAG_SUCCESS,\n REMOVE_CHANGE_DETECTION_PROPERTIES,\n REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS,\n REMOVE_KEYVAULT_CREDS,\n REMOVE_KEYVAULT_CREDS_SUCCESS,\n REMOVE_TAG,\n REMOVE_TAG_SUCCESS,\n UPDATE_CHANGE_DETECTION_PROPERTY,\n UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS,\n TOGGLE_RESOURCE_MONITORING,\n TOGGLE_RESOURCE_MONITORING_SUCCESS,\n UPDATE_FRIENDLY_NAME,\n UPDATE_FRIENDLY_NAME_SUCCESS,\n UPDATE_IMPORTANCE,\n UPDATE_IMPORTANCE_SUCCESS,\n UPDATE_KEYVAULT_CREDS,\n UPDATE_KEYVAULT_CREDS_SUCCESS,\n} from './constants'\n\nexport const getNodeData = createAction(GET_NODE_DATA)\nexport const setNodeData = createAction(SET_NODE_DATA)\nexport const errNodeData = createAction(ERR_NODE_DATA)\n\nexport const setCrmData = createAction(SET_CRM_DATA)\nexport const errCrmData = createAction(ERR_CRM_DATA)\n\nexport const setSwimlanes = createAction(SET_SWIMLANES)\nexport const errSwimlanes = createAction(ERR_SWIMLANES)\n\nexport const getResourceGroup = createAction(GET_RESOURCE_GROUP)\nexport const setResourceGroup = createAction(SET_RESOURCE_GROUP)\nexport const errResourceGroup = createAction(ERR_RESOURCE_GROUP)\n\nexport const getKeyVaultData = createAction(GET_KEYVAULT_DATA)\nexport const setKeyVaultData = createAction(SET_KEYVAULT_DATA)\nexport const errKeyVaultData = createAction(ERR_KEYVAULT_DATA)\n\nexport const addChangeDetectionProperties = createAction(\n ADD_CHANGE_DETECTION_PROPERTIES\n)\nexport const addChangeDetectionPropertiesSuccess = createAction(\n ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS\n)\n\nexport const addKeyVaultCreds = createAction(ADD_KEYVAULT_CREDS)\nexport const addKeyVaultCredsSuccess = createAction(ADD_KEYVAULT_CREDS_SUCCESS)\n\nexport const addResourceToSwimlane = createAction(ADD_RESOURCE_TO_SWIMLANE)\nexport const addResourceToSwimlaneSuccess = createAction(\n ADD_RESOURCE_TO_SWIMLANE_SUCCESS\n)\n\nexport const addTag = createAction(ADD_TAG)\nexport const addTagSuccess = createAction(ADD_TAG_SUCCESS)\n\nexport const removeChangeDetectionProperties = createAction(\n REMOVE_CHANGE_DETECTION_PROPERTIES\n)\nexport const removeChangeDetectionPropertiesSuccess = createAction(\n REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS\n)\n\nexport const removeKeyVaultCreds = createAction(REMOVE_KEYVAULT_CREDS)\nexport const removeKeyVaultCredsSuccess = createAction(\n REMOVE_KEYVAULT_CREDS_SUCCESS\n)\n\nexport const removeTag = createAction(REMOVE_TAG)\nexport const removeTagSuccess = createAction(REMOVE_TAG_SUCCESS)\n\nexport const updateChangeDetectionProperty = createAction(\n UPDATE_CHANGE_DETECTION_PROPERTY\n)\nexport const updateChangeDetectionPropertySucces = createAction(\n UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS\n)\n\nexport const toggleResourceMonitoring = createAction(TOGGLE_RESOURCE_MONITORING)\nexport const toggleResourceMonitoringSuccess = createAction(\n TOGGLE_RESOURCE_MONITORING_SUCCESS\n)\n\nexport const updateFriendlyName = createAction(UPDATE_FRIENDLY_NAME)\nexport const updateFriendlyNameSuccess = createAction(\n UPDATE_FRIENDLY_NAME_SUCCESS\n)\n\nexport const updateImportance = createAction(UPDATE_IMPORTANCE)\nexport const updateImportanceSuccess = createAction(UPDATE_IMPORTANCE_SUCCESS)\n\nexport const updateKeyVaultCreds = createAction(UPDATE_KEYVAULT_CREDS)\nexport const updateKeyVaultCredsSuccess = createAction(\n UPDATE_KEYVAULT_CREDS_SUCCESS\n)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n account: {\n id: 'app.containers.NodeViewHeader.account',\n defaultMessage: 'Account',\n },\n add: {\n id: 'app.containers.NodeViewHeader.add',\n defaultMessage: 'Add',\n },\n addTag: {\n id: 'app.containers.NodeViewHeader.addTag',\n defaultMessage: 'Add Tag',\n },\n addToSwimlane: {\n id: 'app.containers.NodeViewHeader.addToSwimlane',\n defaultMessage: 'Add To Swimlane',\n },\n aksDiscoveryInstructions: {\n id: 'app.containers.NodeViewHeader.aksDiscoveryInstructions',\n defaultMessage:\n 'Some extra steps are required to discover Kubernetes Resources. If you have not already done so please complete the steps in the Help Center Document {docLink}',\n },\n cancel: {\n id: 'app.containers.NodeViewHeader.cancel',\n defaultMessage: 'Cancel',\n },\n close: {\n id: 'app.containers.NodeViewHeader.enableMonitoring',\n defaultMessage: 'Close',\n },\n disableMonitoring: {\n id: 'app.containers.NodeViewHeader.enableMonitoring',\n defaultMessage: 'Disable Monitoring',\n },\n enableMonitoring: {\n id: 'app.containers.NodeViewHeader.enableMonitoring',\n defaultMessage: 'Enable Monitoring',\n },\n key: {\n id: 'app.containers.NodeViewHeader.key',\n defaultMessage: 'Key',\n },\n manageKeyVaultCredentials: {\n id: 'app.containers.NodeViewHeader.manageKeyVaultCredentials',\n defaultMessage: 'Manage KeyVault Credentials',\n },\n showAll: {\n id: 'app.containers.NodeViewHeader.showMore',\n defaultMessage: 'Show All',\n },\n showLess: {\n id: 'app.containers.NodeViewHeader.showMore',\n defaultMessage: 'Show Less',\n },\n swimlanes: {\n id: 'app.containers.NodeViewHeader.swimlanes',\n defaultMessage: 'Swimlanes',\n },\n tags: {\n id: 'app.containers.NodeViewHeader.tags',\n defaultMessage: 'Tags',\n },\n tenant: {\n id: 'app.containers.NodeViewHeader.tenant',\n defaultMessage: 'Tenant',\n },\n value: {\n id: 'app.containers.NodeViewHeader.value',\n defaultMessage: 'Value',\n },\n})\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\n\nimport permissionChecker from 'containers/PermissionChecker'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport CloudAccount from 'components/CloudAccount'\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport Popover, { PopoverAnchor, PopoverBody } from 'components/Popover'\nimport SelectBar from 'components/SelectBar'\nimport TextLink from 'components/TextLink'\n\nimport { addResourceToSwimlane } from './actions'\n\nimport { selectSwimlanes } from 'containers/SonraiData/selectors'\n\nimport { getAccountFromSrn } from 'utils/sonraiUtils'\n\nimport messages from './messages'\n\nexport class AddSwimlaneForm extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n value: '',\n open: false,\n suggestions: [],\n autoValue: '',\n errorKey: false,\n clearMe: false,\n }\n\n this.styles = {\n keyInput: {},\n addTagButton: {\n padding: '0rem 0.7rem',\n borderRadius: '1rem',\n border: `1px dashed ${props.theme.neutralMedium}`,\n backgroundColor: 'transparent',\n height: '20px',\n lineHeight: '20px',\n fontSize: '0.9em',\n margin: '0.5rem',\n },\n inputWrapper: {\n width: '100%',\n paddingBottom: '0.5em',\n },\n inputLabel: {\n display: 'flex',\n alignItems: 'center',\n margin: 0,\n },\n actionButtons: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n addIcon: { fontSize: '17px', top: '-2px', position: 'relative' },\n }\n }\n\n handleAddSL = () => {\n this.props.addResourceToSwimlane({\n srn: this.props.srn,\n swimlaneSrn: this.state.value,\n resourceId: this.props.resourceId,\n })\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.savingSL && !this.props.savingSL) {\n this.toggleAddSL()\n }\n }\n\n onChange = swim => {\n this.setState({\n value: swim.value,\n })\n }\n\n toggleAddSL = () => {\n this.setState(oldState => ({\n open: !oldState.open,\n }))\n }\n\n renderPopover = () => {\n if (!this.props.resourceId) {\n return (\n
    \n This resource has no ResourceID and cannot be added to a swimlane\n directly.\n
    \n )\n }\n\n const alreadyIn = []\n const options = []\n const account = getAccountFromSrn(this.props.srn)\n\n if (this.props.currentSwimlanes) {\n this.props.currentSwimlanes.forEach(swombo => {\n alreadyIn.push(swombo.srn)\n })\n }\n\n if (this.props.swimlanes) {\n this.props.swimlanes.forEach(lane => {\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.swimlanes',\n resourceId: lane.get('resourceId'),\n })\n if (canEdit && !alreadyIn.includes(lane.get('srn'))) {\n if (!lane.get('accounts') || lane.get('accounts').isEmpty()) {\n options.push({ label: lane.get('title'), value: lane.get('srn') })\n } else if (lane.get('accounts').includes(account)) {\n options.push({ label: lane.get('title'), value: lane.get('srn') })\n }\n }\n })\n }\n\n if (options.length === 0) {\n return (\n
    \n

    There are no more valid swimlanes for this resource.

    \n

    \n In order to add this resource to another swimlane, the swimlane must\n either apply to all accounts, or be applied to the{' '}\n account\n

    \n
    \n )\n }\n\n return (\n
    \n

    \n Valid swimlanes either apply to all accounts, or are applied to the{' '}\n account\n

    \n
    \n \n
    \n
    \n \n \n \n \n {this.props.savingSL ? (\n \n ) : (\n \n )}\n \n
    \n
    \n )\n }\n\n render() {\n return (\n \n \n \n \n {this.renderPopover()}\n \n )\n }\n}\n\nAddSwimlaneForm.propTypes = {\n theme: themeShape,\n\n // passed from permissionChecker\n userHasPermission: PropTypes.func.isRequired,\n\n // ~ passed props ~\n currentSwimlanes: PropTypes.arrayOf(PropTypes.object),\n disabled: PropTypes.bool,\n resourceId: PropTypes.string.isRequired,\n savingSL: PropTypes.bool,\n srn: PropTypes.string.isRequired,\n\n // ~ props from redux store ~\n swimlanes: ImmutablePropTypes.map,\n\n // ~ bound action creators ~\n addResourceToSwimlane: PropTypes.func.isRequired,\n}\n\nconst makeStateToProps = createStructuredSelector({\n swimlanes: selectSwimlanes,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n addResourceToSwimlane,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(makeStateToProps, mapDispatchToProps)\n\nexport default compose(\n permissionChecker,\n withConnect,\n themeable\n)(AddSwimlaneForm)\n","import { handleActions } from 'redux-actions'\nimport { fromJS, isImmutable } from 'immutable'\nimport _ from 'lodash'\n\nexport const REDUX_KEY = 'nodeViewHeader'\n\nimport {\n ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS,\n ADD_KEYVAULT_CREDS,\n ADD_KEYVAULT_CREDS_SUCCESS,\n ADD_RESOURCE_TO_SWIMLANE,\n ADD_RESOURCE_TO_SWIMLANE_SUCCESS,\n ADD_TAG,\n ADD_TAG_SUCCESS,\n ERR_CRM_DATA,\n ERR_KEYVAULT_DATA,\n ERR_NODE_DATA,\n ERR_RESOURCE_GROUP,\n ERR_SWIMLANES,\n GET_KEYVAULT_DATA,\n GET_NODE_DATA,\n GET_RESOURCE_GROUP,\n REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS,\n REMOVE_KEYVAULT_CREDS,\n REMOVE_KEYVAULT_CREDS_SUCCESS,\n REMOVE_TAG,\n REMOVE_TAG_SUCCESS,\n SET_CRM_DATA,\n SET_KEYVAULT_DATA,\n SET_NODE_DATA,\n SET_RESOURCE_GROUP,\n SET_SWIMLANES,\n TOGGLE_RESOURCE_MONITORING_SUCCESS,\n UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS,\n UPDATE_FRIENDLY_NAME,\n UPDATE_FRIENDLY_NAME_SUCCESS,\n UPDATE_KEYVAULT_CREDS,\n UPDATE_KEYVAULT_CREDS_SUCCESS,\n} from './constants'\n\nexport const defaultInitialNodeState = {\n loading: true,\n error: false,\n data: {},\n crmData: {\n error: false,\n monitored: null,\n importance: null,\n changeDetectionProperties: [],\n changeDetectionOptions: [],\n },\n keyVault: {\n loading: false,\n adding: false,\n deleting: {},\n updating: {},\n error: null,\n data: [],\n },\n resourceGroup: {\n error: false,\n loading: false,\n group: {},\n storageAccount: {},\n },\n swimlanes: {\n addingResourceToSL: false,\n loading: false,\n error: false,\n data: [],\n },\n tags: {\n loading: false,\n data: [],\n saving: false,\n },\n updateFriendlyName: {\n loading: false,\n },\n}\n\nconst initialState = fromJS({\n nodes: {},\n})\n\nconst nodeViewHeader = handleActions(\n {\n // Editting Cahnge detection properties\n [ADD_CHANGE_DETECTION_PROPERTIES_SUCCESS]: (state, { payload }) => {\n const path = [\n 'nodes',\n payload.srn,\n 'crmData',\n 'changeDetectionProperties',\n ]\n const currentState = state.getIn(path)\n const newState = payload.properties.reduce(\n (nextState, property) => mergeCDProperty(nextState, property),\n currentState\n )\n return state.setIn(path, newState)\n },\n [REMOVE_CHANGE_DETECTION_PROPERTIES_SUCCESS]: (state, { payload }) => {\n const path = [\n 'nodes',\n payload.srn,\n 'crmData',\n 'changeDetectionProperties',\n ]\n\n const propertiesToRemove = (isImmutable(payload.properties)\n ? payload.properties.toJS()\n : payload.properties\n ).map(prop => ({\n keyName: prop.keyName,\n alertLevel: prop.alertLevel,\n actionClassification: prop.actionClassification,\n }))\n\n const currentState = state.getIn(path)\n const newState = currentState.filter(existingProp => {\n const findMeIndex = propertiesToRemove.findIndex(\n prop =>\n prop.keyName === existingProp.get('keyName') &&\n prop.alertLevel === existingProp.get('alertLevel')\n )\n if (findMeIndex === -1) {\n return true\n } else if (\n !propertiesToRemove[findMeIndex].actionClassification ||\n (propertiesToRemove[findMeIndex].actionClassification.length ===\n existingProp.get('actionClassification').size &&\n existingProp\n .get('actionClassification')\n .every(val =>\n propertiesToRemove[findMeIndex].actionClassification.includes(\n val\n )\n ))\n ) {\n return false\n } else {\n return true\n }\n })\n return state.setIn(path, newState)\n },\n [UPDATE_CHANGE_DETECTION_PROPERTY_SUCCESS]: (state, { payload }) => {\n const path = [\n 'nodes',\n payload.srn,\n 'crmData',\n 'changeDetectionProperties',\n ]\n const currentState = state.getIn(path)\n return state.setIn(path, mergeCDProperty(currentState, payload.property))\n },\n\n // Editting KeyVault creds\n [ADD_KEYVAULT_CREDS]: (state, { payload }) =>\n state.setIn(['nodes', payload.srn, 'keyVault', 'adding'], true),\n [ADD_KEYVAULT_CREDS_SUCCESS]: (state, { payload }) => {\n const dataPath = ['nodes', payload.srn, 'keyVault', 'data']\n const currentData = state.getIn(dataPath)\n return state\n .setIn(['nodes', payload.srn, 'keyVault', 'adding'], false)\n .setIn(dataPath, currentData.push(fromJS(payload.newCreds)))\n },\n\n [REMOVE_KEYVAULT_CREDS]: (state, { payload }) =>\n state.setIn(\n ['nodes', payload.srn, 'keyVault', 'deleting', payload.id],\n true\n ),\n [REMOVE_KEYVAULT_CREDS_SUCCESS]: (state, { payload }) =>\n state\n .setIn(\n ['nodes', payload.srn, 'keyVault', 'deleting', payload.id],\n false\n )\n .updateIn(['nodes', payload.srn, 'keyVault', 'data'], data =>\n data.filter(cred => cred.get('id') !== payload.id)\n ),\n\n [UPDATE_KEYVAULT_CREDS]: (state, { payload }) =>\n state.setIn(\n ['nodes', payload.srn, 'keyVault', 'updating', payload.id],\n true\n ),\n [UPDATE_KEYVAULT_CREDS_SUCCESS]: (state, { payload }) =>\n state\n .setIn(\n ['nodes', payload.srn, 'keyVault', 'updating', payload.id],\n false\n )\n .updateIn(['nodes', payload.srn, 'keyVault', 'data'], data =>\n data.set(\n data.findIndex(cred => cred.get('id') === payload.id),\n fromJS(payload.updateCreds)\n )\n ),\n\n // Fetching KeyVault Data\n [GET_KEYVAULT_DATA]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'keyVault', 'loading'], true)\n .setIn(['nodes', payload.srn, 'keyVault', 'error'], false),\n [ERR_KEYVAULT_DATA]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'keyVault', 'loading'], false)\n .setIn(['nodes', payload.srn, 'keyVault', 'error'], true),\n [SET_KEYVAULT_DATA]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'keyVault', 'loading'], false)\n .setIn(['nodes', payload.srn, 'keyVault', 'error'], false)\n .setIn(\n ['nodes', payload.srn, 'keyVault', 'data'],\n fromJS(payload.data)\n ),\n\n // Updating swimlanes\n [ADD_RESOURCE_TO_SWIMLANE]: (state, { payload }) =>\n state.setIn(\n ['nodes', payload.srn, 'swimlanes', 'addingResourceToSL'],\n true\n ),\n [ADD_RESOURCE_TO_SWIMLANE_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'swimlanes', 'addingResourceToSL'], false)\n .updateIn(['nodes', payload.srn, 'data', 'swimlaneSRNs'], data => {\n return data.push(payload.swimlane.srn)\n }),\n // Updating tags\n [ADD_TAG]: (state, { payload }) =>\n state.setIn(['nodes', payload.srn, 'tags', 'loading'], true),\n [ADD_TAG_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'tags', 'loading'], false)\n .updateIn(['nodes', payload.srn, 'tags', 'data'], tags =>\n tags.push(payload.newTag)\n ),\n [REMOVE_TAG]: (state, { payload }) =>\n state.setIn(['nodes', payload.srn, 'tags', 'loading'], true),\n [REMOVE_TAG_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'tags', 'loading'], false)\n .updateIn(['nodes', payload.srn, 'tags', 'data'], tags => {\n const index = tags.findIndex(tag => payload.tagSrn === tag.get('srn'))\n return index >= 0 ? tags.remove(index) : tags // nothing to remove\n }),\n\n // Fetching Node View Data\n [GET_NODE_DATA]: (state, { payload }) =>\n state.setIn(['nodes', payload.srn], fromJS(defaultInitialNodeState)),\n [SET_NODE_DATA]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'loading'], false)\n .setIn(['nodes', payload.srn, 'error'], false)\n .setIn(['nodes', payload.srn, 'data'], fromJS(payload.data))\n .setIn(['nodes', payload.srn, 'tags', 'loading'], false)\n .setIn(\n ['nodes', payload.srn, 'tags', 'data'],\n fromJS(_.get(payload.data, ['hasTag', 'items']))\n ),\n [ERR_NODE_DATA]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'loading'], true)\n .setIn(['nodes', payload.srn, 'error'], true),\n\n // Fetching CRN Data\n [SET_CRM_DATA]: (state, { payload }) =>\n state.setIn(\n ['nodes', payload.srn, 'crmData'],\n fromJS({ ...payload, error: false })\n ),\n [ERR_CRM_DATA]: (state, { payload }) =>\n state.setIn(['nodes', payload.srn, 'crmData', 'error'], true),\n\n // Fetching Swimlane Data\n [ERR_SWIMLANES]: (state, { payload }) =>\n state.setIn(['nodes', payload.srn, 'swimlanes', 'error'], true),\n [SET_SWIMLANES]: (state, { payload }) =>\n state\n .setIn(\n ['nodes', payload.srn, 'swimlanes', 'data'],\n fromJS(payload.swimlanes)\n )\n .setIn(['nodes', payload.srn, 'swimlanes', 'error'], false),\n\n // Fetching Resource Group\n [GET_RESOURCE_GROUP]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'resourceGroup', 'loading'], true)\n .setIn(['nodes', payload.srn, 'resourceGroup', 'error'], false),\n [ERR_RESOURCE_GROUP]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'resourceGroup', 'loading'], false)\n .setIn(['nodes', payload.srn, 'resourceGroup', 'error'], true),\n [SET_RESOURCE_GROUP]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'resourceGroup', 'loading'], false)\n .setIn(['nodes', payload.srn, 'resourceGroup', 'error'], false)\n .setIn(['nodes', payload.srn, 'resourceGroup', 'group'], payload.group)\n .setIn(\n ['nodes', payload.srn, 'resourceGroup', 'storageAccount'],\n payload.storageAccount\n ),\n\n // Toggling resource Monitoring\n [TOGGLE_RESOURCE_MONITORING_SUCCESS]: (state, { payload }) =>\n state.setIn(\n ['nodes', payload.srn, 'crmData', 'monitored'],\n payload.isMonitored\n ),\n\n // Updating Friendly Name\n [UPDATE_FRIENDLY_NAME]: (state, { payload }) =>\n state.setIn(\n ['nodes', payload.srn, 'updateFriendlyName', 'loading'],\n true\n ),\n [UPDATE_FRIENDLY_NAME_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['nodes', payload.srn, 'updateFriendlyName', 'loading'], false)\n .setIn(['nodes', payload.srn, 'data', 'friendlyName'], payload.value),\n },\n initialState\n)\n\n/**\n * in the list of properties, find it, and then merge the new property with the\n * existing one. If cannot find the existing property, just add it to the list\n */\nconst mergeCDProperty = (currentProperties, newProperty) => {\n if (!isImmutable(newProperty)) {\n return mergeCDProperty(currentProperties, fromJS(newProperty))\n }\n\n // search for the index of the current property, if it exists\n const findKey = newProperty.get('keyName')\n const currentIndex = currentProperties.findIndex(\n property => property.get('keyName') == findKey\n )\n\n if (currentIndex < 0) {\n // if it can't be foudn, just add the new property\n return currentProperties.push(newProperty)\n } else {\n // otherwise assign new values to the old values\n const propToUpdate = currentProperties.get(currentIndex)\n let updatedProp = propToUpdate.mergeDeep(newProperty)\n const maxImortance = Math.max(\n newProperty.get('importance'),\n propToUpdate.get('importance')\n )\n if (_.isNumber(maxImortance) && maxImortance > 0) {\n updatedProp = updatedProp.set('importance', maxImortance)\n }\n return currentProperties.set(currentIndex, updatedProp)\n }\n}\n\nexport default nodeViewHeader\n","import { createSelector } from 'reselect'\nimport { fromJS } from 'immutable'\nimport { REDUX_KEY } from './reducers'\nimport { defaultInitialNodeState } from './reducers'\n\nexport const selectNodeData = (state, props) => {\n const nodeData = state.getIn(\n [REDUX_KEY, 'nodes', props.nodeId],\n fromJS({ ...defaultInitialNodeState, default: true })\n )\n return nodeData\n}\n\nexport const makeSelectNodeDataIsLoading = () =>\n createSelector(\n selectNodeData,\n nodeData => nodeData.get('loading')\n )\n\nexport const makeSelectNodeData = () =>\n createSelector(\n selectNodeData,\n nodeData => {\n const nodeDataData = nodeData.get('data')\n return nodeDataData.toJS()\n }\n )\n\nexport const makeSelectNodeDataError = () =>\n createSelector(\n selectNodeData,\n nodeData => nodeData.get('error')\n )\n\nexport const makeSelectUpdateFriendlyName = () =>\n createSelector(\n selectNodeData,\n nodeData => nodeData.get('updateFriendlyName').toJS()\n )\n\nexport const makeSelectCrmData = () =>\n createSelector(\n selectNodeData,\n nodeData => nodeData.get('crmData').toJS()\n )\n\nexport const makeSelectKeyVault = () =>\n createSelector(\n selectNodeData,\n nodeData => nodeData.get('keyVault')\n )\n\nexport const makeSelectResourceGroup = () =>\n createSelector(\n selectNodeData,\n nodeData => nodeData.get('resourceGroup').toJS()\n )\n\nexport const makeSelectSwimlanes = () =>\n createSelector(\n selectNodeData,\n nodeData => nodeData.get('swimlanes').toJS()\n )\n\nexport const makeSelectTags = () =>\n createSelector(\n selectNodeData,\n nodeData => nodeData.get('tags').toJS()\n )\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport Autosuggest from 'react-autosuggest'\nimport { Input } from 'reactstrap'\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport FormLabel from 'components/FormLabel'\nimport Icon from 'components/Icon'\nimport Popover, { PopoverAnchor, PopoverBody } from 'components/Popover'\nimport TextLink from 'components/TextLink'\n\nimport { addTag } from './actions'\n\nimport { selectTags as selectTagOptions } from 'containers/SonraiData/selectors'\nimport { makeSelectTags } from './selectors'\n\nimport messages from './messages'\n\nexport class AddTagForm extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n value: '',\n open: false,\n suggestions: [],\n autoValue: '',\n errorKey: false,\n }\n\n this.styles = {\n keyInput: {},\n addTagButton: {\n padding: '0rem 0.7rem',\n borderRadius: '1rem',\n border: `1px dashed ${props.theme.neutralMedium}`,\n backgroundColor: 'transparent',\n height: '20px',\n lineHeight: '20px',\n fontSize: '0.9em',\n margin: '0.25rem 0.5rem',\n },\n inputWrapper: {\n width: '400px',\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto auto',\n gridColumnGap: '0.5em',\n gridRowGap: '0.5em',\n padding: '1em 0.5em',\n },\n inputLabel: {\n display: 'flex',\n alignItems: 'center',\n margin: 0,\n },\n actionButtons: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n addIcon: { fontSize: '17px', top: '-2px', position: 'relative' },\n }\n }\n\n getSuggestions = value => {\n const inputValue =\n typeof value === 'string' ? value.trim().toLowerCase() : value\n\n if (inputValue.length === 0) {\n return []\n }\n\n return this.props.tagOptions\n .map(tagObj => decodeURIComponent(tagObj.get('key')) || '')\n .filter(tag => tag.toLowerCase().includes(inputValue))\n .toJS()\n }\n\n onSuggestionsFetchRequested = ({ value }) => {\n this.setState({\n suggestions: this.getSuggestions(value),\n })\n }\n\n onSuggestionsClearRequested = () => {\n this.setState({\n suggestions: [],\n })\n }\n\n getSuggestionValue = suggestion => suggestion\n\n renderSuggestion = suggestion =>
    {suggestion}
    \n\n toggleAddTag = () => {\n if (this.state.errorKey) {\n this.setState({ errorKey: false })\n }\n this.setState(oldState => ({\n open: !oldState.open,\n }))\n }\n\n onChange = (event, { newValue }) => {\n if (this.state.errorKey) {\n this.setState({ errorKey: false })\n }\n this.setState({\n value: newValue,\n })\n }\n\n handleAddTag = () => {\n if (this.state.value === '' || this.state.autoValue === '') {\n this.setState({\n errorKey: true,\n })\n } else {\n this.props.addTag({\n srn: this.props.nodeId,\n tag: {\n key: encodeURIComponent(this.state.value),\n value: this.state.autoValue,\n },\n })\n }\n }\n\n handleKeyPress = e => {\n const { value, autoValue } = this.state\n if (value.trim() !== '' && autoValue.trim() !== '') {\n if (e.key === 'Enter') {\n this.handleAddTag()\n }\n }\n }\n\n handleVal = event => {\n this.setState({\n autoValue: event.target.value,\n })\n }\n\n render() {\n return (\n \n \n \n \n \n
    \n \n \n \n \n \n \n \n \n
    \n
    \n \n \n \n \n {this.props.tags.saving ? (\n \n ) : (\n 'Add'\n )}\n \n
    \n
    \n
    \n )\n }\n}\n\nAddTagForm.propTypes = {\n theme: themeShape,\n\n // ~ passed props ~\n nodeId: PropTypes.string,\n\n // ~ props from redux store ~\n tags: PropTypes.shape({\n saving: PropTypes.bool,\n }),\n tagOptions: ImmutablePropTypes.iterableOf(\n ImmutablePropTypes.contains({\n key: PropTypes.string,\n })\n ),\n\n // ~ bound action creators ~\n addTag: PropTypes.func.isRequired,\n}\n\nconst makeMapStateToProps = (state, props) => {\n const selectTags = makeSelectTags(state, props)\n return createStructuredSelector({\n tags: selectTags,\n tagOptions: selectTagOptions,\n })\n}\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators({ addTag }, dispatch)\n}\n\nconst withConnect = connect(\n makeMapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n themeable\n)(AddTagForm)\n","/*\n * NodeSolutionCenter Messages\n *\n * This contains all the text for the NodeSolutionCenter component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n identity: {\n id: 'app.container.NodeSolutionCenter.header',\n defaultMessage: 'Identity',\n },\n infrastructure: {\n id: 'app.container.NodeSolutionCenter.infrastructure',\n defaultMessage: 'Infrastructure',\n },\n data: {\n id: 'app.container.NodeSolutionCenter.data',\n defaultMessage: 'Data',\n },\n cloud: {\n id: 'app.container.NodeSolutionCenter.cloud',\n defaultMessage: 'Cloud',\n },\n header: {\n id: 'app.containers.NodeSolutionCenter.header',\n defaultMessage: 'This is NodeSolutionCenter container !',\n },\n saving: {\n id: 'app.components.NodeView.saving',\n defaultMessage: 'Saving...',\n },\n editName: {\n id: 'app.components.NodeView.editName',\n defaultMessage: 'Edit Display Name',\n },\n typeLabel: {\n id: 'app.components.NodeView.typeLabel',\n defaultMessage: 'Type',\n },\n accountLabel: {\n id: 'app.components.NodeView.accountLabel',\n defaultMessage: 'Account',\n },\n subscription: {\n id: 'app.components.NodeView.subscription',\n defaultMessage: 'Subscription',\n },\n toggle: {\n id: 'app.components.Tag.toggle',\n defaultMessage: 'Toggle add tag',\n },\n tags: {\n id: 'app.components.Tag.tags',\n defaultMessage: 'Tags',\n },\n error: {\n id: 'app.components.Tag.error',\n defaultMessage: 'Both fields are required',\n },\n addButtonLabel: {\n id: 'app.components.Tag.addButtonLabel',\n defaultMessage: 'Add Tag',\n },\n keyPlaceholder: {\n id: 'app.components.Tag.keyPlaceholder',\n defaultMessage: 'Tag Key',\n },\n valuePlaceholder: {\n id: 'app.components.Tag.valuePlaceholder',\n defaultMessage: 'Tag Value',\n },\n enableChangeDetectionMessage: {\n id: 'app.components.ManageDriftDetectionModal.enableChangeDetectionMessage',\n defaultMessage:\n 'To enable change detection please select one or many of the monitored properties below to enable change detection on. Once they are enabled you can manange them by clicking the \"Manage Change Detection\" button on the upper right corner of a monitored resource.',\n },\n})\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport DataTable from 'components/DataTable'\nimport messages from 'containers/NodeSolutionCenter/messages'\nimport { FormattedMessage } from 'react-intl'\nimport { getFriendlyKeyName } from 'utils/widgetUtils'\n\nclass EnableChangeDetection extends Component {\n style = {\n table: {\n height: '50vh',\n width: '500px',\n margin: '0 auto',\n },\n }\n\n render() {\n return (\n
    \n

    \n \n

    \n
    \n {\n return getFriendlyKeyName(params.value)\n },\n },\n }}\n multiRowSelect\n hasCheckBoxes\n selectionChanged={this.props.selectionChanged}\n autosize={false}\n />\n
    \n
    \n )\n }\n}\n\nEnableChangeDetection.propTypes = {\n selectionChanged: PropTypes.func.isRequired,\n data: PropTypes.array.isRequired,\n}\n\nexport default EnableChangeDetection\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport { exists } from 'utils/sonraiUtils'\nimport { fromJS, List } from 'immutable'\nimport Icon from 'components/Icon'\nimport Popup from 'reactjs-popup'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport SelectBar from 'components/SelectBar'\nimport { getFriendlyActionName, getFriendlyKeyName } from 'utils/widgetUtils'\nimport MultiSelect, { components } from 'react-select'\nimport _ from 'lodash'\nclass AddProperty extends Component {\n state = {\n popup: false,\n keyName: null,\n alertLevel: null,\n actionClassification: null,\n }\n\n style = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n button: {\n background: '#FFFFFF',\n borderRadius: '2px',\n paddingTop: '0.1em',\n paddingBottom: '0.1em',\n paddingRight: '0.5em',\n paddingLeft: '0.5em',\n marginRight: '0.5em',\n height: '2em',\n },\n }\n\n isDisabled = () => {\n const { keyName, alertLevel, actionClassification } = this.state\n if (this.hasActionClassifications()) {\n if (\n exists(keyName) &&\n exists(alertLevel) &&\n exists(actionClassification) &&\n !_.isEmpty(actionClassification)\n ) {\n return false\n }\n } else {\n if (exists(keyName) && exists(alertLevel)) {\n return false\n }\n }\n return true\n }\n\n hasActionClassifications = () => {\n const { keyName } = this.state\n const { changeDetectionOptions } = this.props\n if (keyName) {\n const option = changeDetectionOptions.find(\n x => x.get('keyName') === keyName\n )\n if (\n option &&\n option.get('keyType') === 'PATH' &&\n option.get('actionClassification') &&\n !option.get('actionClassification').isEmpty()\n ) {\n return true\n }\n }\n return false\n }\n\n handleAdd = () => {\n const { keyName, alertLevel, actionClassification } = this.state\n const {\n resourceSrn,\n addChangeDetectionProperties,\n changeDetectionOptions,\n } = this.props\n const option = changeDetectionOptions.find(x => x.get('keyName') == keyName)\n const properties = fromJS([\n {\n keyName: option.get('keyName'),\n keyType: option.get('keyType'),\n alertLevel: parseInt(alertLevel),\n actionClassification:\n actionClassification && actionClassification.map(x => x.value),\n },\n ])\n this.setState({\n keyName: null,\n alertLevel: null,\n actionClassification: null,\n })\n addChangeDetectionProperties({\n properties,\n resourceSrn,\n })\n }\n\n handleSelectAllActions = actionClassificationsUsed => {\n const option = this.props.changeDetectionOptions.find(\n x => x.get('keyName') == this.state.keyName\n )\n const actionClassification = option\n .get('actionClassification')\n .filter(option => !actionClassificationsUsed.includes(option))\n .toJS()\n .map(y => ({\n label: getFriendlyActionName(y, this.state.keyName),\n value: y,\n }))\n this.setState({ actionClassification })\n }\n\n getContents = () => {\n const { keyName } = this.state\n const { changeDetectionOptions, changeDetectionProperties } = this.props\n const alertLevelList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\n const changeDetectionPropertiesWithKeyName = changeDetectionProperties.filter(\n x => x.get('keyName') === keyName\n )\n\n const propertyIndexes = changeDetectionPropertiesWithKeyName.map(x =>\n changeDetectionProperties.indexOf(x)\n )\n\n const optionIndex = changeDetectionOptions.findIndex(\n x => x.get('keyName') === keyName\n )\n\n const actionClassificationsUsed = List().merge(\n ...propertyIndexes.map(index =>\n changeDetectionProperties.getIn([index, 'actionClassification'])\n )\n )\n\n const actionClassificationOptions = changeDetectionOptions\n .getIn([optionIndex, 'actionClassification'])\n .toJS()\n .map(option => {\n return {\n label: getFriendlyActionName(option, keyName),\n value: option,\n }\n })\n\n actionClassificationOptions.forEach(option => {\n if (actionClassificationsUsed.includes(option.value)) {\n option.isDisabled = true\n } else {\n option.isDisabled = false\n }\n })\n\n const keyNameOptions = changeDetectionOptions.filter(option => {\n if (option.get('keyType') === 'PROPERTY') {\n if (\n changeDetectionProperties\n .map(property => property.get('keyName'))\n .includes(option.get('keyName'))\n ) {\n return false\n }\n }\n return true\n })\n\n return (\n
    \n
    Add New Property
    \n
    \n What would you like to monitor for changes?\n
    \n
    \n ({\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }),\n singleValue: provided => ({\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }),\n }}\n onChange={params => this.setState({ keyName: params.value })}\n options={keyNameOptions\n .map(option => ({\n label: getFriendlyKeyName(option.get('keyName')),\n value: option.get('keyName'),\n }))\n .toJS()}\n value={this.state.keyName || 'Select...'}\n />\n
    \n\n
    \n When a change occurs, what level should the alert be?\n
    \n
    \n ({\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }),\n singleValue: provided => ({\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }),\n }}\n onChange={params => this.setState({ alertLevel: params.value })}\n options={alertLevelList.map(level => ({\n label: level,\n value: level,\n }))}\n value={this.state.alertLevel || 'Select...'}\n />\n
    \n {this.hasActionClassifications() && (\n
    \n Which actions types should change detection be restricted to?\n
    \n )}\n {this.hasActionClassifications() && (\n \n \n this.handleSelectAllActions(actionClassificationsUsed)\n }\n style={{\n fontSize: '0.9rem',\n margin: '0rem 0.5rem 0.5rem 0rem',\n cursor: 'pointer',\n alignSelf: 'flex-end',\n color: this.props.theme.secondary,\n }}\n >\n Select All\n \n {\n if (props.isDisabled) {\n return (\n
    \n \n
    \n {props.data.label}\n \n (Already Enabled)\n \n
    \n
    \n
    \n )\n } else {\n return \n }\n },\n }}\n value={this.state.actionClassification || 'Select...'}\n onChange={params =>\n this.setState({\n actionClassification: params,\n })\n }\n options={actionClassificationOptions.sort((a, b) =>\n a.label.localeCompare(b.label)\n )}\n styles={{\n option: provided => ({\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }),\n multiValue: provided => {\n return {\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }\n },\n }}\n isDisabled={!exists(this.state.alertLevel)}\n />\n
    \n )}\n \n
    \n this.setState({ popup: false })}\n style={{\n fontSize: '0.9rem',\n marginRight: '0.5rem',\n cursor: 'pointer',\n }}\n >\n Cancel\n \n \n Add\n \n
    \n
    \n \n )\n }\n\n render() {\n return (\n
    \n this.setState({ popup: true })}\n onClose={() => this.setState({ popup: false })}\n modal\n trigger={\n \n \n Add\n \n }\n position=\"right top\"\n closeOnDocumentClick\n contentStyle={{\n width: '20rem',\n minHeight: '200px',\n padding: '0.75rem',\n boxShadow: `rgba(0, 0, 0, 0.1) 0px 4px 3px -1px`,\n display: 'flex',\n zIndex: 100,\n }}\n >\n {this.getContents()}\n \n
    \n )\n }\n}\n\nAddProperty.propTypes = {\n theme: themeShape,\n changeDetectionOptions: ImmutablePropTypes.iterable.isRequired,\n resourceSrn: PropTypes.string.isRequired,\n addChangeDetectionProperties: PropTypes.func.isRequired,\n changeDetectionProperties: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default themeable(AddProperty)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport { exists } from 'utils/sonraiUtils'\nimport { List } from 'immutable'\nimport Icon from 'components/Icon'\nimport Popup from 'reactjs-popup'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport SelectBar from 'components/SelectBar'\nimport { getFriendlyActionName, getFriendlyKeyName } from 'utils/widgetUtils'\nimport MultiSelect, { components } from 'react-select'\nimport _ from 'lodash'\n\nclass EditProperty extends Component {\n state = {\n popup: false,\n newAlertLevel: null,\n newActionClassification: null,\n }\n\n style = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n button: {\n background: '#FFFFFF',\n borderRadius: '2px',\n paddingTop: '0.1em',\n paddingBottom: '0.1em',\n paddingRight: '0.5em',\n paddingLeft: '0.5em',\n marginRight: '0.5em',\n height: '2em',\n },\n }\n\n isDisabled = () => {\n const { newAlertLevel, newActionClassification } = this.state\n const { alertLevel, actionClassification } = this.props.selected\n if (exists(actionClassification)) {\n const oldState = { alertLevel, actionClassification }\n if (\n (exists(newAlertLevel) || exists(newActionClassification)) &&\n !_.isEqual(oldState, this.state)\n ) {\n return false\n }\n }\n if (exists(newAlertLevel)) {\n if (newAlertLevel !== alertLevel) {\n return false\n }\n }\n return true\n }\n\n hasActionClassifications = () => {\n const { keyName } = this.state\n const { changeDetectionOptions } = this.props\n if (keyName) {\n const option = changeDetectionOptions.find(\n x => x.get('keyName') === keyName\n )\n if (\n option &&\n option.get('keyType') === 'PATH' &&\n option.get('actionClassification') &&\n !option.get('actionClassification').isEmpty()\n ) {\n return true\n }\n }\n return false\n }\n\n getRemoveProperty = (oldList, newList, oldProperty) => {\n let removingActionClassifications = []\n if (oldList && !_.isEmpty(newList)) {\n oldList.forEach(action => {\n if (!newList.map(x => x.value).includes(action)) {\n removingActionClassifications.push(action)\n }\n })\n }\n\n delete oldProperty.actionClassification\n const x = {\n ...oldProperty,\n actionClassification: removingActionClassifications,\n }\n if (_.isEmpty(x.actionClassification)) {\n return null\n } else {\n return x\n }\n }\n\n handleUpdate = () => {\n const { newAlertLevel, newActionClassification } = this.state\n const {\n resourceSrn,\n selected,\n updateChangeDetectionProperty,\n changeDetectionProperties,\n } = this.props\n const oldList = selected.actionClassification\n const keyName = selected.keyName\n const keyType = selected.actionClassification === null ? 'PROPERTY' : 'PATH'\n const alertLevel = newAlertLevel || selected.alertLevel\n const oldProperty = selected\n\n const newProperty = {\n keyName,\n keyType,\n alertLevel,\n actionClassification:\n exists(newActionClassification) && !_.isEmpty(newActionClassification)\n ? newActionClassification.map(x => x.value)\n : selected.actionClassification,\n __typename: 'Cdconfig',\n }\n\n const toRemove = this.getRemoveProperty(\n oldList,\n newActionClassification,\n oldProperty\n )\n\n const index = changeDetectionProperties.findIndex(\n x =>\n x.get('keyName') === selected.keyName &&\n x.get('alertLevel') === selected.alertLevel\n )\n\n if (index !== -1) {\n this.setState({ popup: false })\n updateChangeDetectionProperty({\n toRemove,\n resourceSrn,\n newProperty,\n oldProperty,\n index,\n })\n }\n }\n\n handleSelectAllActions = () => {\n if (!this.props.changeDetectionOptions.isEmpty()) {\n const newActionClassification = this.props.changeDetectionOptions\n .find(x => x.get('keyName') == this.props.selected.keyName)\n .get('actionClassification')\n .toJS()\n .map(y => ({\n label: getFriendlyActionName(y, this.props.selected.keyName),\n value: y,\n }))\n\n this.setState({ newActionClassification })\n }\n }\n\n getContents = () => {\n const { keyName, alertLevel, actionClassification } = this.props.selected\n const { changeDetectionOptions, changeDetectionProperties } = this.props\n const alertLevelList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\n const changeDetectionPropertiesWithKeyName = changeDetectionProperties.filter(\n x => x.get('keyName') === keyName\n )\n\n const propertyIndexes = changeDetectionPropertiesWithKeyName.map(x =>\n changeDetectionProperties.indexOf(x)\n )\n\n const optionIndex = changeDetectionOptions.findIndex(\n x => x.get('keyName') === keyName\n )\n const actionClassificationsUsed = List().merge(\n ...propertyIndexes.map(index =>\n changeDetectionProperties.getIn([index, 'actionClassification'])\n )\n )\n\n const actionClassificationOptions = changeDetectionOptions\n .getIn([optionIndex, 'actionClassification'])\n .toJS()\n .map(option => {\n return {\n label: getFriendlyActionName(option, keyName),\n value: option,\n }\n })\n\n actionClassificationOptions.forEach(option => {\n if (actionClassificationsUsed.includes(option.value)) {\n option.isDisabled = true\n } else {\n option.isDisabled = false\n }\n })\n\n return (\n
    \n
    \n Edit {getFriendlyKeyName(keyName)}\n
    \n\n
    \n Alert Level\n
    \n
    \n ({\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }),\n singleValue: provided => ({\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }),\n }}\n onChange={params => this.setState({ newAlertLevel: params.value })}\n options={alertLevelList.map(level => ({\n label: level,\n value: level,\n }))}\n value={\n exists(this.state.newAlertLevel)\n ? this.state.newAlertLevel\n : alertLevel\n }\n />\n
    \n\n {exists(actionClassification) && !_.isEmpty(actionClassification) && (\n \n \n
    Action Classification(s)
    \n this.handleSelectAllActions()}\n style={{\n fontSize: '0.9rem',\n cursor: 'pointer',\n color: this.props.theme.secondary,\n }}\n >\n Select All\n \n
    \n {\n if (props.isDisabled) {\n return (\n
    \n \n
    \n {props.value}\n \n (Already Enabled)\n \n
    \n
    \n
    \n )\n } else {\n return \n }\n },\n }}\n value={\n exists(this.state.newActionClassification)\n ? this.state.newActionClassification\n : actionClassification\n .sort((a, b) => a.localeCompare(b))\n .map(action => ({\n label: getFriendlyActionName(action, keyName),\n value: action,\n }))\n }\n onChange={params =>\n this.setState({\n newActionClassification: params,\n })\n }\n options={actionClassificationOptions.sort((a, b) =>\n a.label.localeCompare(b.label)\n )}\n styles={{\n option: provided => ({\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }),\n multiValue: provided => {\n return {\n ...provided,\n fontSize: '0.85rem',\n fontWeight: '400',\n }\n },\n }}\n />\n \n )}\n \n
    \n this.setState({ popup: false })}\n style={{\n fontSize: '0.9rem',\n marginRight: '0.5rem',\n cursor: 'pointer',\n }}\n >\n Cancel\n \n \n Update\n \n
    \n \n \n )\n }\n\n render() {\n return (\n
    \n this.setState({ popup: true })}\n onClose={() => this.setState({ popup: false })}\n modal\n trigger={\n \n \n Edit\n \n }\n position=\"right top\"\n closeOnDocumentClick\n contentStyle={{\n width: '20rem',\n minHeight: '200px',\n padding: '0.75rem',\n boxShadow: `rgba(0, 0, 0, 0.1) 0px 4px 3px -1px`,\n display: 'flex',\n zIndex: 100,\n }}\n >\n {this.getContents()}\n \n
    \n )\n }\n}\n\nEditProperty.propTypes = {\n theme: themeShape,\n changeDetectionOptions: ImmutablePropTypes.iterable.isRequired,\n resourceSrn: PropTypes.string.isRequired,\n changeDetectionProperties: ImmutablePropTypes.iterable.isRequired,\n updateChangeDetectionProperty: PropTypes.func.isRequired,\n selected: PropTypes.object.isRequired,\n}\n\nexport default themeable(EditProperty)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport AddProperty from './AddProperty'\nimport DataTable from 'components/DataTable'\nimport { getFriendlyKeyName } from 'utils/widgetUtils'\nimport { exists } from 'utils/sonraiUtils'\nimport _ from 'lodash'\nimport EditProperty from './EditProperty'\nimport { getFriendlyActionName } from 'utils/widgetUtils'\nimport { ToolbarItem } from 'components/ActionToolbar'\nclass ManageChangeDetection extends Component {\n style = {\n table: {\n height: '50vh',\n width: '100%',\n minWidth: '500px',\n },\n propertyContainer: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between',\n },\n button: {\n backgroundColor: `${this.props.theme.primary}`,\n fontSize: '0.9rem',\n color: '#fff',\n padding: '0.5rem 1rem',\n },\n }\n render() {\n const {\n data,\n selected,\n propertySelectionChanged,\n resourceSrn,\n changeDetectionOptions,\n changeDetectionProperties,\n addChangeDetectionProperties,\n handleRemoveChangeDetectionProperties,\n updateChangeDetectionProperty,\n } = this.props\n const orderedData = data\n .map(row => ({\n ...row,\n actualKeyName: row.keyName,\n keyName: getFriendlyKeyName(row.keyName),\n }))\n .sort((a, b) => (!a.keyName ? false : a.keyName.localeCompare(b.keyName)))\n\n return (\n
    \n
    \n {exists(selected) && selected.length === 1 ? (\n \n ) : (\n \n )}\n
    \n
    \n \n Disable\n \n }\n style={{ width: '100%', minWidth: '600px' }}\n data={orderedData}\n rowHeight\n customColumnConfig={{\n keyName: {\n width: 280,\n pinned: 'left',\n },\n actualKeyName: {\n hide: true,\n },\n actionClassification: {\n valueFormatter: params => {\n return exists(params.value)\n ? params.value.map(action =>\n getFriendlyActionName(action, params.data.keyName)\n )\n : '-'\n },\n },\n }}\n multiRowSelect\n hasCheckBoxes\n selectionChanged={propertySelectionChanged}\n autosize={false}\n />\n
    \n
    \n )\n }\n}\n\nManageChangeDetection.propTypes = {\n theme: themeShape,\n data: PropTypes.array.isRequired,\n selected: PropTypes.array,\n resourceSrn: PropTypes.string.isRequired,\n changeDetectionOptions: ImmutablePropTypes.iterable.isRequired,\n changeDetectionProperties: ImmutablePropTypes.iterable.isRequired,\n addChangeDetectionProperties: PropTypes.func.isRequired,\n updateChangeDetectionProperty: PropTypes.func.isRequired,\n handleRemoveChangeDetectionProperties: PropTypes.func.isRequired,\n propertySelectionChanged: PropTypes.func.isRequired,\n}\n\nexport default themeable(ManageChangeDetection)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { fromJS } from 'immutable'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport EnableChangeDetection from './EnableChangeDetection'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport ManageChangeDetection from './ManageChangeDetection'\nimport { DEFAULT_ACTION_CLASSIFICATIONS_TO_ENABLE } from 'appConstants'\nclass ChangeDetectionModal extends Component {\n constructor(props) {\n super(props)\n this.state = {}\n this.style = {\n propertyContainer: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between',\n },\n enableChangeDetectionText: {\n width: '100%',\n textAlign: 'center',\n padding: '0.25rem',\n color: '#888',\n fontSize: '0.9rem',\n fontWeight: '400',\n },\n enableButton: {\n marginLeft: '1rem',\n },\n table: {\n height: '50vh',\n width: '100%',\n minWidth: '500px',\n },\n button: {\n backgroundColor: `${this.props.theme.primary}`,\n fontSize: '0.9rem',\n color: '#fff',\n padding: '0.5rem 1rem',\n },\n loadingContainer: {\n height: '50vh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n }\n this.modalRef = React.createRef()\n }\n\n handleEscPress = ({ key }) => {\n if (key && key === 'Escape') {\n this.props.close()\n }\n }\n\n componentDidMount() {\n document.addEventListener('keypress', this.handleEscPress)\n document.addEventListener('keydown', this.handleEscPress)\n }\n\n componentWillUnmount() {\n document.removeEventListener('keypress', this.handleEscPress)\n document.removeEventListener('keydown', this.handleEscPress)\n }\n\n optionSelectionChanged = ({ api }) => {\n const { changeDetectionOptions } = this.props\n const selectedKeyNames = api.getSelectedRows().map(row => row.keyName)\n const selectedChangeDetectionOptions = changeDetectionOptions\n .toJS()\n .filter(option => selectedKeyNames.includes(option.keyName))\n\n this.setState({\n selectedChangeDetectionOptions,\n })\n }\n\n propertySelectionChanged = ({ api }) => {\n const { changeDetectionProperties } = this.props\n const selectedProperties = api.getSelectedRows()\n\n const selectedChangeDetectionProperties = changeDetectionProperties\n .toJS()\n .filter(option =>\n selectedProperties.map(x => x.actualKeyName).includes(option.keyName)\n )\n .filter(option =>\n selectedProperties.map(x => x.alertLevel).includes(option.alertLevel)\n )\n\n this.setState({\n selectedChangeDetectionProperties,\n })\n }\n\n handleUpdateChangeDetectionProperty = params => {\n this.props.updateChangeDetectionProperty(params)\n }\n\n handleEnableChangeDetectionProperties = () => {\n const { resourceSrn, addChangeDetectionProperties } = this.props\n const { selectedChangeDetectionOptions } = this.state\n\n selectedChangeDetectionOptions.forEach(option => {\n option.alertLevel = 5\n if (!_.isEmpty(option.actionClassification)) {\n option.actionClassification = DEFAULT_ACTION_CLASSIFICATIONS_TO_ENABLE\n }\n })\n\n addChangeDetectionProperties({\n properties: fromJS(selectedChangeDetectionOptions),\n resourceSrn,\n })\n }\n\n handleRemoveChangeDetectionProperties = () => {\n const {\n resourceSrn,\n removeChangeDetectionProperties,\n changeDetectionProperties,\n } = this.props\n const { selectedChangeDetectionProperties } = this.state\n let indexes = []\n selectedChangeDetectionProperties.forEach(property => {\n const index = changeDetectionProperties.findIndex(\n x =>\n x.get('keyName') === property.keyName &&\n x.get('alertLevel') === property.alertLevel\n )\n\n if (index !== -1) {\n indexes.push(index)\n }\n })\n\n removeChangeDetectionProperties({\n properties: fromJS(selectedChangeDetectionProperties),\n resourceSrn,\n indexes,\n })\n this.setState({ selectedChangeDetectionProperties: undefined })\n }\n\n getModalBody = () => {\n const {\n isLoading,\n changeDetectionProperties,\n changeDetectionOptions,\n } = this.props\n\n if (isLoading) {\n return (\n
    \n \n
    \n )\n }\n\n if (!changeDetectionProperties.isEmpty()) {\n return (\n ({\n actionClassification: property.actionClassification,\n keyName: property.keyName,\n alertLevel: property.alertLevel,\n }))}\n updateChangeDetectionProperty={\n this.handleUpdateChangeDetectionProperty\n }\n />\n )\n } else {\n return (\n ({\n keyName: option.keyName,\n }))}\n selectionChanged={this.optionSelectionChanged}\n />\n )\n }\n }\n\n render() {\n const { isOpen, toggle } = this.props\n const isActive = !this.props.changeDetectionProperties.isEmpty()\n\n return (\n \n \n {isActive\n ? 'Manage Resource Change Detection'\n : 'Enable Resource Change Detection'}\n \n {this.getModalBody()}\n \n \n Close\n \n {!isActive && (\n \n Enable\n \n )}\n \n \n )\n }\n}\n\nChangeDetectionModal.propTypes = {\n theme: themeShape,\n toggle: PropTypes.func.isRequired,\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n addChangeDetectionProperties: PropTypes.func.isRequired,\n resourceSrn: PropTypes.string.isRequired,\n changeDetectionOptions: ImmutablePropTypes.iterable,\n changeDetectionProperties: ImmutablePropTypes.iterable,\n removeChangeDetectionProperties: PropTypes.func.isRequired,\n isLoading: PropTypes.bool,\n updateChangeDetectionProperty: PropTypes.func.isRequired,\n}\n\nexport default themeable(ChangeDetectionModal)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { withRouter } from 'react-router'\nimport { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport { DEFAULT_ACTION_CLASSIFICATIONS_TO_ENABLE } from 'appConstants'\nimport _ from 'lodash'\nimport color from 'color'\nimport { fromJS } from 'immutable'\nimport qs from 'query-string'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { getDefaultChangeDetectionPropertiesByType } from 'utils/sonraiUtils'\nimport BorderlessButton from 'components/BorderlessButton'\nimport ChangeDetectionModal from 'components/ChangeDetectionModal'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\n\nimport {\n addChangeDetectionProperties,\n removeChangeDetectionProperties,\n toggleResourceMonitoring,\n updateChangeDetectionProperty,\n} from './actions'\n\nimport { makeSelectCrmData } from './selectors'\n\nimport messages from './messages'\n\nexport class ChangeDetectionActions extends Component {\n constructor(props) {\n super(props)\n this.state = {\n driftDetectionModal: false,\n }\n\n this.styles = {\n container: {\n display: 'flex',\n alignItems: 'flex-end',\n flexDirection: props.direction === 'horizontal' ? '' : 'column',\n marginLeft: '4px',\n marginBottom: '4px',\n },\n button: {\n height: '1.85rem',\n fontSize: '0.85rem',\n border: `1px solid ${this.props.theme.primary}`,\n padding: '0.25rem 0.5rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginRight: props.direction === 'horizontal' ? '5px' : '',\n color: color(props.theme.neutralDark).darken(0.6),\n },\n toggle: {\n marginTop: '1rem',\n },\n }\n }\n\n handleAddChangeDetectionProperties = payload => {\n this.props.addChangeDetectionProperties({\n ...payload,\n onNodeView: this.props.onNodeView,\n srn: this.props.nodeId,\n })\n }\n\n handleDriftDetectionToggle = () => {\n this.setState(oldState => ({\n driftDetectionModal: !oldState.driftDetectionModal,\n }))\n }\n\n handleCloseDriftDetectionToggle = () => {\n this.setState({\n driftDetectionModal: false,\n })\n }\n\n handleDefaultChangeDetection = () => {\n const { __typename } = this.props.nodeData\n const { changeDetectionOptions } = this.props.crmData\n const defaultProperties = getDefaultChangeDetectionPropertiesByType(\n __typename\n )\n const selected = changeDetectionOptions.filter(option =>\n defaultProperties.includes(option.keyName.toLowerCase())\n )\n\n selected.forEach(option => {\n option.alertLevel = 5\n if (!_.isEmpty(option.actionClassification)) {\n option.actionClassification = DEFAULT_ACTION_CLASSIFICATIONS_TO_ENABLE\n }\n })\n\n this.handleAddChangeDetectionProperties({\n properties: fromJS(selected),\n resourceSrn: this.props.nodeId,\n })\n }\n\n handleMonitorChange = () => {\n const { monitored, changeDetectionProperties } = this.props.crmData\n const isMonitored = monitored\n this.props.push({\n search: qs.stringify({\n ...qs.parse(this.props.location.search),\n showAccessActivity: !isMonitored,\n }),\n state: this.props.location.state,\n })\n\n this.props.toggleResourceMonitoring({\n srn: this.props.nodeId,\n isMonitored: isMonitored,\n onNodeView: this.props.onNodeView,\n })\n\n if (!isMonitored && _.isEmpty(changeDetectionProperties)) {\n this.handleDefaultChangeDetection()\n }\n }\n\n handleRemoveChangeDetectionProperties = payload => {\n this.props.removeChangeDetectionProperties({\n ...payload,\n onNodeView: this.props.onNodeView,\n srn: this.props.nodeId,\n })\n }\n\n handleUpdateChangeDetectionProperty = payload => {\n this.props.updateChangeDetectionProperty({\n ...payload,\n onNodeView: this.props.onNodeView,\n srn: this.props.nodeId,\n })\n }\n\n render() {\n const isMonitored = this.props.crmData.monitored\n\n const {\n changeDetectionProperties,\n changeDetectionOptions,\n } = this.props.crmData\n const hasChangeDetectionEnabled = changeDetectionProperties.length > 0\n\n const buttomMessage = isMonitored\n ? messages.disableMonitoring\n : messages.enableMonitoring\n return [\n
    \n \n
    \n \n
    \n \n \n
    ,\n
    \n {isMonitored && (\n \n
    \n \n
    \n {hasChangeDetectionEnabled\n ? 'Manage Change Detection'\n : 'Enable Change Detection'}\n \n )}\n \n
    ,\n ]\n }\n}\n\nChangeDetectionActions.propTypes = {\n theme: themeShape,\n isLoading: PropTypes.bool,\n // ~ passed props ~\n direction: PropTypes.string,\n nodeData: PropTypes.object,\n nodeId: PropTypes.string.isRequired,\n onNodeView: PropTypes.bool, // see comment in NodeViewHeader\n\n // ~ bound action creators ~\n addChangeDetectionProperties: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n removeChangeDetectionProperties: PropTypes.func.isRequired,\n toggleResourceMonitoring: PropTypes.func.isRequired,\n updateChangeDetectionProperty: PropTypes.func.isRequired,\n\n // ~ props from redux store ~\n crmData: PropTypes.shape({\n error: PropTypes.bool,\n monitored: PropTypes.bool,\n importance: PropTypes.number,\n // TODO - change this to shape below?\n changeDetectionProperties: PropTypes.arrayOf(PropTypes.object),\n changeDetectionOptions: PropTypes.arrayOf(PropTypes.object),\n }),\n location: PropTypes.object.isRequired,\n}\n\nconst makeMapStateToProps = () => {\n const selectCrmData = makeSelectCrmData()\n return createStructuredSelector({\n crmData: selectCrmData,\n })\n}\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n addChangeDetectionProperties,\n push,\n removeChangeDetectionProperties,\n toggleResourceMonitoring,\n updateChangeDetectionProperty,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n makeMapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n withRouter,\n themeable\n)(ChangeDetectionActions)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Input } from 'reactstrap'\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\n// import BorderCard from 'components/BorderCard'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport { Map } from 'immutable'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport InlineEditableText from 'components/InlineEditableText'\nimport { Alert } from 'reactstrap'\nimport BorderlessButton from 'components/BorderlessButton'\n\nexport class KeyVaultConfig extends ImmutablePureComponent {\n styles = {\n addCredForm: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto auto auto',\n gridColumnGap: '1em',\n gridRowGap: '1em',\n gridTemplateAreas: '\". .\" \". .\" \". .\" \". submit\"',\n },\n addButtonWrapper: {\n gridArea: 'submit',\n },\n existingContainer: {\n marginBottom: '1em',\n maxHeight: '400px',\n overflowY: 'auto',\n overflowX: 'hidden',\n },\n cardContainer: {\n // backgroundColor: this.props.theme.neutralLight,\n marginBottom: '10px',\n },\n rowContainer: {\n display: 'grid',\n gridTemplateColumns: '115px 1fr',\n whiteSpace: 'nowrap',\n },\n title: { fontWeight: '400', marginTop: '8px', textAlign: 'right' },\n content: {\n display: 'inline-block',\n marginLeft: '5px',\n textOverflow: 'ellipsis',\n overflowX: 'hidden',\n backgroundColor: this.props.theme.highlight,\n borderRadius: '5px',\n },\n name: {\n paddingLeft: '0.3em',\n width: '100%',\n whiteSpace: 'nowrap',\n overflowX: 'hidden',\n alignItems: 'center',\n },\n }\n\n state = {\n containerName: '',\n path: '',\n reset: false,\n editingNames: Map(),\n editingPaths: Map(),\n }\n\n componentDidUpdate() {\n if (!this.props.isAdding && this.state.reset) {\n this.setState({\n containerName: '',\n path: '',\n reset: false,\n })\n }\n }\n\n setEditingName = (id, name) => {\n this.setState(prevState => {\n return { editingNames: prevState.editingNames.set(id, name) }\n })\n }\n\n setEditingPath = (id, path) => {\n this.setState(prevState => {\n return {\n editingPaths: prevState.editingPaths.set(id, path),\n }\n })\n }\n\n setContainerName = e => {\n this.setState({\n containerName: e.target.value,\n })\n }\n\n setPath = e => {\n this.setState({\n path: e.target.value.replace(/ /g, ''),\n })\n }\n\n addVaultCreds = () => {\n this.setState({ reset: true })\n\n this.props.addAzureKeyVaultCreds({\n srn: this.props.srn,\n name: this.state.containerName,\n path: this.state.path,\n })\n }\n\n removeVaultCreds = id => {\n this.props.removeAzureKeyVaultCreds({\n id: id,\n srn: this.props.srn,\n })\n }\n\n updateName = (id, name, path) => {\n this.setEditingName(id, name)\n this.props.updateAzureKeyVaultCreds({\n srn: this.props.srn,\n id: id,\n containerName: name,\n containerPrefix: path.replace(/ /g, ''),\n })\n }\n\n updatePath = (id, path, name) => {\n this.setEditingPath(id, path)\n this.props.updateAzureKeyVaultCreds({\n srn: this.props.srn,\n id: id,\n containerName: name,\n containerPrefix: path.replace(/ /g, ''),\n })\n }\n\n dismissError = () => {\n this.props.setAzureKeyVaultError({ error: null })\n }\n\n render() {\n const keyVaultCreds = this.props.keyVaultCreds.toJS()\n\n const submitDisabled = !this.state.containerName || !this.state.path\n\n return (\n
    \n {this.props.error && (\n \n
    {this.props.error}
    \n \n \n \n \n )}\n {keyVaultCreds.length > 0 ? (\n
    \n
    \n {keyVaultCreds.map(creds => {\n const deleting = !!this.props.isDeleting.get(creds.id)\n const updating = !!this.props.isUpdating.get(creds.id)\n\n const nameValue =\n updating && this.state.editingNames.get(creds.id)\n ? this.state.editingNames.get(creds.id)\n : creds.blob.containerName\n const pathValue =\n updating && this.state.editingPaths.get(creds.id)\n ? this.state.editingPaths.get(creds.id)\n : creds.blob.containerPrefix\n\n if (\n creds.blob.containerName ===\n this.state.editingNames.get(creds.id)\n ) {\n this.setState(prevState => {\n return {\n editingNames: prevState.editingNames.delete(creds.id),\n }\n })\n }\n\n if (\n creds.blob.containerPrefix ===\n this.state.editingPaths.get(creds.id)\n ) {\n this.setState(prevState => {\n return {\n editingPaths: prevState.editingPaths.delete(creds.id),\n }\n })\n }\n\n return (\n \n \n \n
    \n
    KeyVault Name:
    \n \n {\n if (creds.blob.containerName !== name) {\n this.updateName(creds.id, name, pathValue)\n }\n }}\n style={this.styles.name}\n saving={updating || deleting}\n />\n
    \n
    \n
    \n
    \n
    Secret Name:
    \n \n {\n if (creds.blob.containerPrefix !== path) {\n this.updatePath(creds.id, path, nameValue)\n }\n }}\n style={this.styles.name}\n saving={updating || deleting}\n trim={true}\n />\n
    \n
    \n \n {\n this.removeVaultCreds(creds.id)\n }}\n style={{ marginLeft: '5px', float: 'right' }}\n disabled={deleting}\n color={`danger`}\n >\n
    Delete
    \n {!deleting ? (\n \n ) : (\n \n )}\n \n \n )\n })}\n \n \n ) : (\n
    \n
    Configure New Credentials:
    \n
     
    \n \n KeyVault Name\n \n \n \n Secret Name\n \n \n\n
    \n \n {this.props.isAdding\n ? 'Adding Credentials..'\n : 'Add Credentials'}\n \n
    \n
    \n )}\n \n )\n }\n}\n\nKeyVaultConfig.propTypes = {\n isAdding: PropTypes.bool,\n srn: PropTypes.string,\n theme: themeShape,\n removeAzureKeyVaultCreds: PropTypes.func,\n keyVaultCreds: ImmutablePropTypes.list,\n isDeleting: ImmutablePropTypes.map,\n setAzureKeyVaultError: PropTypes.func,\n error: PropTypes.string,\n}\n\nexport default themeable(KeyVaultConfig)\n","import React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { compose } from 'redux'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\n\nimport color from 'color'\n\nimport KeyVaultConfig from 'containers/Deploy/KeyVaultConfig'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport { FormattedMessage } from 'react-intl'\nimport styled from 'styled-components'\nimport BorderlessButton from 'components/BorderlessButton'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport TextLink from 'components/TextLink'\n\nimport {\n addKeyVaultCreds,\n getKeyVaultData,\n errKeyVaultData,\n removeKeyVaultCreds,\n updateKeyVaultCreds,\n} from './actions'\n\nimport { makeSelectKeyVault } from './selectors'\n\nimport messages from './messages'\nimport { bindActionCreators } from 'redux'\n\nconst AKS_HELP_ARTICLE_NAME = 'Enable AKS Discovery'\n\nconst HelpCenterTextContainer = styled.div`\n margin-left: 12px;\n margin-bottom: 8px;\n`\n\nfunction getAKSHelpCenterHREF() {\n const protocol = window.origin.startsWith('http:') ? 'http://' : 'https://'\n return (\n protocol +\n window.location.host +\n '/App/HelpCenter?preloadSearch=' +\n AKS_HELP_ARTICLE_NAME\n )\n}\n\nfunction AKSHelpCenterLink() {\n return (\n \n \n \n {AKS_HELP_ARTICLE_NAME}\n \n \n ),\n }}\n {...messages.aksDiscoveryInstructions}\n />\n \n )\n}\n\nexport class KeyVaultActions extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n keyVaultModal: false,\n addingNew: false,\n }\n\n this.styles = {\n container: {\n display: 'flex',\n alignItems: 'flex-end',\n flexDirection: 'column',\n },\n button: {\n height: '1.85rem',\n fontSize: '0.85rem',\n border: `1px solid ${this.props.theme.primary}`,\n padding: '0.25rem 0.5rem',\n margin: '4px 5px 0px 0px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n color: color(this.props.theme.neutralDark).darken(0.6),\n },\n toggle: {\n marginTop: '1rem',\n },\n }\n }\n\n componentDidMount() {\n this.props.getKeyVaultData({\n srn: this.props.nodeId,\n onNodeView: this.props.onNodeView,\n })\n }\n\n openModal = () => {\n this.setState({\n keyVaultModal: true,\n })\n }\n\n closeModal = () => {\n this.setState({\n keyVaultModal: false,\n })\n }\n\n handleAddKeyVaultCreds = payload => {\n this.props.addKeyVaultCreds({\n ...payload,\n onNodeView: this.props.onNodeView,\n })\n }\n\n handleRemoveKeyVaultCreds = payload => {\n this.props.removeKeyVaultCreds({\n ...payload,\n onNodeView: this.props.onNodeView,\n })\n }\n\n handleUpdateKeyVaultCreds = payload => {\n this.props.updateKeyVaultCreds({\n ...payload,\n onNodeView: this.props.onNodeView,\n })\n }\n\n render() {\n return (\n
    \n \n
    \n \n
    \n \n
    \n \n \n \n \n \n {this.props.keyVault.get('loading') ? (\n \n ) : (\n \n {'AzureKubernetesCluster' === this.props.nodeType && (\n \n )}\n \n \n )}\n \n \n \n \n \n \n \n
    \n )\n }\n}\n\nKeyVaultActions.propTypes = {\n theme: themeShape,\n\n // ~ passed props ~\n nodeId: PropTypes.string.isRequired,\n onNodeView: PropTypes.bool.isRequired,\n nodeType: PropTypes.string,\n\n // ~ props from redux store ~\n keyVault: PropTypes.object.isRequired,\n\n // ~ bound action creators ~\n addKeyVaultCreds: PropTypes.func.isRequired,\n errKeyVaultData: PropTypes.func.isRequired,\n getKeyVaultData: PropTypes.func.isRequired,\n removeKeyVaultCreds: PropTypes.func.isRequired,\n updateKeyVaultCreds: PropTypes.func.isRequired,\n}\n\nconst makeMapStateToProps = () => {\n const selectKeyVault = makeSelectKeyVault()\n return createStructuredSelector({\n keyVault: selectKeyVault,\n })\n}\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n addKeyVaultCreds,\n getKeyVaultData,\n errKeyVaultData,\n removeKeyVaultCreds,\n updateKeyVaultCreds,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n makeMapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n themeable\n)(KeyVaultActions)\n","import { all, call, put, takeLatest, select } from 'redux-saga/effects'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport { parse, print } from 'graphql'\nimport { fromJS } from 'immutable'\nimport { RESOURCE_GROUP_FOR_NODE } from 'static-queries'\n\nimport { getClient } from 'apolloClient'\nimport { DATA_TYPES_FOR_CRM, TYPES_WITH_CRM } from 'appConstants'\n\nimport {\n dudeWheresMyType,\n getNodeInfoQuery,\n getTypeFromSrn,\n} from 'utils/graphDataUtils'\nimport { isMonitored, formatChangeDetectionProperties } from 'utils/sonraiUtils'\n\nimport {\n ADD_CHANGE_DETECTION_PROPERTIES,\n ADD_KEYVAULT_CREDS,\n ADD_RESOURCE_TO_SWIMLANE,\n ADD_TAG,\n GET_NODE_DATA,\n GET_KEYVAULT_DATA,\n GET_RESOURCE_GROUP,\n REMOVE_CHANGE_DETECTION_PROPERTIES,\n TOGGLE_RESOURCE_MONITORING,\n REMOVE_TAG,\n REMOVE_KEYVAULT_CREDS,\n UPDATE_CHANGE_DETECTION_PROPERTY,\n UPDATE_FRIENDLY_NAME,\n UPDATE_IMPORTANCE,\n UPDATE_KEYVAULT_CREDS,\n} from './constants'\n\nimport {\n addChangeDetectionPropertiesSuccess as changeManagerAddChangeDetectionPropertiesSuccess,\n removeChangeDetectionPropertiesSuccess as changeManagerRemoveChangeDetectionPropertiesSuccess,\n updateChangeDetectionPropertySuccess as changeManagerUpdateChangeDetectionPropertySuccess,\n} from 'containers/ChangeDetectionManager/actions'\nimport { setResourceMonitoring as nodeSolutionCenterSetResourceMonitor } from 'containers/NodeSolutionCenter/actions'\nimport { updateRapsheetResourceMonitor } from 'containers/RapSheet/actions'\nimport { loadTag as sonraiDataLoadTag } from 'containers/SonraiData/actions'\nimport {\n addChangeDetectionPropertiesSuccess,\n addKeyVaultCredsSuccess,\n addResourceToSwimlaneSuccess,\n addTagSuccess,\n setCrmData,\n errCrmData,\n setNodeData,\n errNodeData,\n setKeyVaultData,\n errKeyVaultData,\n setResourceGroup,\n errResourceGroup,\n setSwimlanes,\n errSwimlanes,\n removeChangeDetectionPropertiesSuccess,\n removeKeyVaultCredsSuccess,\n removeTagSuccess,\n toggleResourceMonitoringSuccess,\n updateChangeDetectionPropertySucces,\n updateFriendlyNameSuccess,\n updateImportanceSuccess,\n updateKeyVaultCredsSuccess,\n} from './actions'\n\nimport { addProperty } from 'containers/ChangeDetectionManager/sagas'\nimport { removeProperty } from '../ChangeDetectionManager/sagas'\n\nimport { selectTags } from 'containers/SonraiData/selectors'\n\n// these are selectors to pull the respective fields from the state\nexport const getQueryNames = state => state.getIn(['sonraiData', 'queryNames'])\nexport const getQueryTypes = state => state.getIn(['sonraiData', 'queryTypes'])\n\n/**\n * Add CD some properties to the thing in the header\n */\nfunction* addChangeDetectionProperties(action) {\n const { srn, properties, onNodeView } = action.payload\n try {\n // be optimistic\n const actions = [\n put(addChangeDetectionPropertiesSuccess({ srn, properties })),\n ]\n if (onNodeView) {\n actions.push(\n put(changeManagerAddChangeDetectionPropertiesSuccess(properties))\n )\n }\n yield all(actions)\n\n for (let property of properties.toJS()) {\n yield call(addProperty, property, srn)\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error adding change detection properties', e)\n }\n}\n\nfunction* addKeyVaultCreds(action) {\n const { srn } = action.payload\n try {\n const client = yield getClient()\n const results = yield client.mutate({\n mutation: gql`\n mutation addKeyVaultCreds($config: CollectorConfigurationInput!) {\n CreateCollectorConfiguration(input: $config) {\n id\n srn\n targetSrn\n enabled\n type\n blob\n }\n }\n `,\n variables: {\n config: {\n targetSrn: srn,\n enabled: true,\n type: 'AzureTokenCredentials',\n blob: JSON.stringify({\n location: 'keyvault',\n containerName: action.payload.name,\n containerPrefix: action.payload.path,\n }),\n },\n },\n })\n\n const path = ['data', 'CreateCollectorConfiguration']\n const newCreds = _.get(results, path)\n if (!newCreds) {\n throw `result did not return ${path.join('.')}`\n }\n\n const actions = [put(addKeyVaultCredsSuccess({ srn, newCreds }))]\n yield all(actions)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened adding the KeyVault creds', e)\n yield put(errKeyVaultData({ srn }))\n }\n}\n\nfunction* removeKeyVaultCreds(action) {\n try {\n const { srn, id } = action.payload\n const client = yield getClient()\n const results = yield client.mutate({\n variables: { id },\n mutation: gql`\n mutation deleteKeyVault($id: String!) {\n DeleteCollectorConfiguration(id: $id)\n }\n `,\n })\n\n const path = ['data', 'DeleteCollectorConfiguration']\n if (!_.get(results, path)) {\n throw `result did not return ${path.join}`\n }\n const actions = [put(removeKeyVaultCredsSuccess({ srn, id }))]\n yield all(actions)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error removing adding the KeyVault creds', e)\n }\n}\n\nfunction* updateKeyVaultCreds(action) {\n try {\n const { srn, id } = action.payload\n const client = yield getClient()\n const results = yield client.mutate({\n mutation: gql`\n mutation updateCollectorConfiguration(\n $config: CollectorConfigurationInput!\n $id: String!\n ) {\n UpdateCollectorConfiguration(id: $id, input: $config) {\n id\n srn\n targetSrn\n enabled\n type\n blob\n }\n }\n `,\n variables: {\n config: {\n targetSrn: srn,\n enabled: true,\n type: 'AzureTokenCredentials',\n blob: JSON.stringify({\n location: 'keyvault',\n containerName: action.payload.containerName,\n containerPrefix: action.payload.containerPrefix,\n }),\n },\n id: id,\n },\n })\n\n const path = ['data', 'UpdateCollectorConfiguration']\n const updateCreds = _.get(results, path)\n // nodeSolutionCenterUpdateAzureKeyVaultCredsSuccess\n if (!updateCreds) {\n throw `result did not return ${path.join('.')}`\n }\n\n const actions = [put(updateKeyVaultCredsSuccess({ srn, id, updateCreds }))]\n yield all(actions)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened updating KeyVault creds', e)\n }\n}\n\nfunction* addResourceToSwimlane(action) {\n const client = yield getClient()\n try {\n const results = yield client.mutate({\n mutation: gql`\n mutation addResourceToSwimlane($srn: ID!, $resourceId: String!) {\n UpdateSwimlane(\n srn: $srn\n value: { resourceIds: { add: [$resourceId] } }\n ) {\n srn\n title\n }\n }\n `,\n variables: {\n resourceId: action.payload.resourceId,\n srn: action.payload.swimlaneSrn,\n },\n })\n\n if (results) {\n yield put(\n addResourceToSwimlaneSuccess({\n srn: action.payload.srn,\n swimlane: results.data.UpdateSwimlane,\n })\n )\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('An error happened adding resource to swimlane', e)\n }\n}\n\nfunction* addTag(action) {\n const {\n tag: { key, value },\n srn,\n } = action.payload\n try {\n const client = yield getClient()\n const response = yield client.mutate({\n variables: { key, value, srn },\n mutation: gql`\n mutation addTagsWithNoDuplicates(\n $key: String\n $value: String\n $srn: ID\n ) {\n AddTag(\n value: { key: $key, value: $value, tagsEntity: { add: [$srn] } }\n ) {\n srn\n key\n value\n }\n }\n `,\n })\n const newTag = _.get(response, ['data', 'AddTag'])\n if (!newTag) {\n throw 'the response did not return a new tag'\n }\n\n const actions = [put(addTagSuccess({ srn, newTag }))]\n\n // if we created a new tag, save it for dropdown population\n const existingTags = yield select(selectTags)\n const existedBefore = existingTags.find(t => t.get('key') === newTag.key)\n if (!existedBefore) {\n actions.push(put(sonraiDataLoadTag(fromJS(newTag))))\n }\n\n yield all(actions)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened in nodeViewHeader adding tag', e)\n }\n}\n\nfunction* removeTag(action) {\n try {\n const client = yield getClient()\n const { srn, nodeId } = action.payload\n const response = yield client.mutate({\n mutation: gql`\n mutation removeTag($resourceSrn: ID!, $value: ResourceUpdater!) {\n UpdateResource(srn: $resourceSrn, value: $value) {\n resourceId\n }\n }\n `,\n variables: {\n resourceSrn: nodeId,\n value: {\n hasTag: {\n remove: [srn],\n },\n },\n },\n })\n const { data } = response\n if (!data) {\n throw 'the response did not return data'\n }\n yield put(\n removeTagSuccess({\n srn: nodeId,\n tagSrn: srn,\n })\n )\n } catch (e) {\n // eslint-disable-next-line\n console.error('Error removing tag', e)\n }\n}\n\n/**\n * Remove some properties from the thing in the header\n */\nfunction* removeChangeDetectionProperties(action) {\n const { srn, properties, onNodeView } = action.payload\n try {\n const actions = [\n put(removeChangeDetectionPropertiesSuccess({ srn, properties })),\n ]\n if (onNodeView) {\n actions.push(\n put(changeManagerRemoveChangeDetectionPropertiesSuccess(properties))\n )\n }\n yield all(actions)\n\n for (let property of properties.toJS()) {\n yield call(removeProperty, property, srn)\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error removing change detection properties', e)\n }\n}\n\nfunction* updateChangeDetectionProperty(action) {\n const { srn, toRemove, newProperty, onNodeView, index } = action.payload\n try {\n // do API calls\n if (toRemove) {\n yield call(removeProperty, toRemove, srn)\n }\n yield call(addProperty, newProperty, srn)\n\n // put changes\n const actions = [\n put(updateChangeDetectionPropertySucces({ srn, property: newProperty })),\n ]\n if (onNodeView) {\n actions.push(\n changeManagerUpdateChangeDetectionPropertySuccess({\n newProperty,\n index,\n })\n )\n }\n yield all(actions)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error updating CD Property in header', e)\n }\n}\n\n/**\n * modifies the passed query to get the CDConfigs field in the query operation\n */\nconst addFetchChangeDetectionPropertiesFields = query => {\n const cdQuery = gql`\n query {\n CDConfigs(\n where: { resourceSrn: { value: $srn }, active: { value: true } }\n ) {\n items {\n keyType\n keyName\n alertLevel\n actionClassification\n }\n }\n }\n `\n const querySelections = query.definitions[0].selectionSet.selections\n const cdSelections = cdQuery.definitions[0].selectionSet.selections\n cdSelections.forEach(selection => querySelections.push(selection))\n}\n\n/**\n * modifies the passed query (parsed document) to include the\n * getChangeDetection field in the query operation\n */\nexport const addFetchChangeDetectionOptionsFields = query => {\n const cdQuery = gql`\n query getOptions($type: ResourceType) {\n getChangeDetectionOptions(resourceType: $type) {\n keyType\n keyName\n actionClassification\n }\n }\n `\n const queryOpDef = query.definitions[0]\n const cdOpDef = cdQuery.definitions[0]\n\n const queryVarDefs = queryOpDef.variableDefinitions\n const cdVarDefs = cdOpDef.variableDefinitions\n cdVarDefs.forEach(varDef => queryVarDefs.push(varDef))\n\n const querySelections = queryOpDef.selectionSet.selections\n const cdSelections = cdOpDef.selectionSet.selections\n cdSelections.forEach(selection => querySelections.push(selection))\n}\n\n/**\n * Add fields to query for the swimlane for the resource\n */\nconst SWIMLANE_ALIAS = 'resource_swimlane'\nexport const addSwimlaneOptionsFields = query => {\n const swQuery = gql`\n query resource_swimlane($srn: String) {\n ${SWIMLANE_ALIAS}: Resources(where: { srn: { value: $srn } }) {\n items(limit: 1) {\n swimlane {\n items {\n description\n label\n title\n srn\n defaultImportance\n createdBy\n sid\n lastModified\n createdDate\n name\n }\n }\n }\n }\n }\n `\n\n const querySelections = query.definitions[0].selectionSet.selections\n const swimlaneSelections = swQuery.definitions[0].selectionSet.selections\n swimlaneSelections.forEach(selection => querySelections.push(selection))\n}\n\n/**\n * Fetches node data and also the CRM data\n */\nfunction* getNodeData(action) {\n const { srn } = action.payload\n let cdConfigs\n let cdOptions\n let swimlanes\n let item\n\n // this part just fetches everything, but only puts actions for fetching node data\n try {\n const queryNames = yield select(getQueryNames)\n const queryTypes = yield select(getQueryTypes)\n\n // in this saga we get the prebuild node info query, and then add other stuff to it\n // so we make fewer requests to graphql server to get all the data\n //\n // we do parse(print()) b/c if we don't and this saga runs twice we get the original\n // unmodified query passed into client.query({}) below don't know why\n const query = parse(print(getNodeInfoQuery(srn, queryNames, queryTypes)))\n addFetchChangeDetectionPropertiesFields(query)\n addFetchChangeDetectionOptionsFields(query)\n addSwimlaneOptionsFields(query, queryTypes)\n const type = DATA_TYPES_FOR_CRM.includes(getTypeFromSrn(srn).toLowerCase())\n ? 'Data'\n : 'Identity'\n\n const client = yield getClient()\n const result = yield client.query({\n variables: { srn, type },\n query: gql`\n ${print(query)}\n `,\n })\n\n const { data } = result\n if (!data || data == null) {\n throw 'the result had no data'\n }\n\n const { items } = Object.values(data)[0]\n if (!items || items == null) {\n throw 'the result had no items'\n }\n\n if (items.length == 0) {\n throw 'the result had no items'\n }\n\n item = items[0]\n yield put(setNodeData({ srn, data: item }))\n\n cdConfigs = _.get(data, ['CDConfigs', 'items'])\n cdOptions = _.get(data, ['getChangeDetectionOptions'])\n swimlanes = _.get(data, [SWIMLANE_ALIAS, 'items', 0, 'swimlane', 'items'])\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened fetching nodeViewHeader nodeData ', e)\n yield put(errNodeData({ srn }))\n }\n\n // this part uses the response from the first part to formulate the CRM data\n try {\n if (!cdConfigs || cdConfigs == null) {\n throw 'the result had no cdConfigs'\n }\n\n if (!cdOptions || cdOptions == null) {\n throw 'the result had no cdOptions'\n }\n\n const cdProperties = formatChangeDetectionProperties(cdConfigs)\n\n cdOptions.forEach(option => {\n if (\n option.keyType !== 'PATH' ||\n option.keyName === 'activeFrom' ||\n option.keyName === 'accessedUsing' ||\n option.keyName === 'accessedFrom'\n ) {\n option.actionClassification = []\n }\n })\n // Get's rid of the Activity action classification as this is not a valid action classification type (should do this server side)\n cdOptions.forEach(option => {\n if (!_.isEmpty(option.actionClassification)) {\n option.actionClassification = [...option.actionClassification].filter(\n x => x !== 'Activity'\n )\n }\n })\n\n const type = getTypeFromSrn(srn).toLowerCase()\n const monitoredField = TYPES_WITH_CRM.includes(type)\n ? item.sonraiConfig\n : undefined\n\n yield put(\n setCrmData({\n srn,\n monitored: isMonitored(monitoredField),\n importance: item.importance,\n changeDetectionProperties: cdProperties,\n changeDetectionOptions: cdOptions,\n })\n )\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened fetching nodeViewHeader CRM data', e)\n yield put(errCrmData({ srn }))\n }\n\n // this part uses the response from the first part to formulate the swimlane data\n try {\n if (!swimlanes) {\n const path = [SWIMLANE_ALIAS, 'items', 0, 'swimlane', 'items']\n throw `response did not have results ${path.join('.')}`\n }\n\n yield put(setSwimlanes({ srn, swimlanes }))\n } catch (e) {\n // eslint-disable-next-line no-console\n yield put(errSwimlanes({ srn }))\n }\n}\n\nfunction* getKeyVaultData(action) {\n const { srn } = action.payload\n try {\n const client = yield getClient()\n const results = yield client.query({\n variables: { srn },\n query: gql`\n query getKeyVaultData($srn: String) {\n CollectorConfigurations(where: { targetSrn: $srn }) {\n items {\n id\n srn\n targetSrn\n enabled\n type\n blob\n }\n }\n }\n `,\n })\n\n const path = ['data', 'CollectorConfigurations', 'items']\n const data = _.get(results, path)\n if (!data) {\n throw `the response did not return ${path.join('.')}`\n }\n const actions = [put(setKeyVaultData({ srn, data }))]\n yield all(actions)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened fetching nodeViewHeader KeyVault data', e)\n yield put(errKeyVaultData({ srn }))\n }\n}\n\nfunction* getResourceGroup(action) {\n const { srn } = action.payload\n try {\n const client = yield getClient()\n const results = yield client.query({\n variables: { srn },\n query: gql`\n ${RESOURCE_GROUP_FOR_NODE}\n `,\n })\n\n const path = ['data', 'Resources', 'items']\n if (_.get(results, path, false)) {\n const resourceGroup = dudeWheresMyType(\n results.data.Resources,\n 'isIn',\n 'ResourceGroup'\n )\n const storageAccount = dudeWheresMyType(\n results.data.Resources,\n 'isIn',\n 'DataStore'\n )\n\n yield put(\n setResourceGroup({\n srn,\n group: resourceGroup,\n storageAccount: storageAccount,\n })\n )\n } else {\n throw `the result did not return ${path.join('.')}`\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error happened nodeViewHeader fetching resource groups', e)\n yield put(errResourceGroup({ srn }))\n }\n}\n\n/**\n * multiple places read the isMonitored state, change them all for good measure\n */\nconst allMonitorChangeActions = ({ change, srn, onNodeView }) => {\n const actions = [\n toggleResourceMonitoringSuccess({ srn, isMonitored: change }),\n updateRapsheetResourceMonitor({ srn, isMonitored: change }),\n ]\n\n if (onNodeView) {\n actions.push(nodeSolutionCenterSetResourceMonitor(change))\n }\n return actions.map(action => put(action))\n}\n\n/**\n * Toggle monitoring for the resource\n */\nfunction* toggleResourceMonitoring(action) {\n try {\n const { isMonitored, onNodeView, srn } = action.payload\n const change = !isMonitored\n\n //optimiticly update change in many places that may want the change\n yield all(allMonitorChangeActions({ srn, change, onNodeView }))\n\n const client = yield getClient()\n const response = yield client.mutate({\n variables: { srn, change },\n mutation: gql`\n mutation toggleResourceMonitoring($srn: String!, $change: Boolean!) {\n setMonitor(monitorStatusBySrn: [{ srn: $srn, monitor: $change }]) {\n srn\n monitor\n }\n }\n `,\n })\n\n const update = _.get(response, ['data', 'setMonitor', 0, 'monitor'])\n if (!update && false !== update) {\n throw 'The response did not return data.setMonitor.0.monitor'\n }\n\n // compare result of change to our assumption, if they are the same do\n // nothing, if not, correct the data\n if (update !== change) {\n yield all(allMonitorChangeActions({ srn, change: update }))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened toggling resource monitoring: ', e)\n }\n}\n\nfunction* updateFriendlyName(action) {\n try {\n const client = getClient()\n const { srn, value } = action.payload\n const response = yield client.mutate({\n variables: { srn, value },\n mutation: gql`\n mutation update_resource($srn: ID!, $value: String) {\n UpdateResource(srn: $srn, value: { friendlyName: $value }) {\n srn\n friendlyName\n }\n }\n `,\n })\n yield put(\n updateFriendlyNameSuccess({\n srn: srn,\n value: response.data.UpdateResource.friendlyName,\n })\n )\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error saving friendly name', e)\n }\n}\n\n/**\n * change the 'importance' value of the resource\n */\nfunction* updateImportance(action) {\n const { srn, importance } = action.payload\n try {\n const client = getClient()\n const result = yield client.mutate({\n variables: { srn, importance },\n mutation: gql`\n mutation setImportance($srn: String!, $importance: Long!) {\n setImportance(srn: $srn, importance: $importance) {\n srn\n importance\n }\n }\n `,\n })\n\n const path = ['data', 'setImportance', 'importance']\n const updatedImportance = _.get(result, path)\n if (!updatedImportance && !_.isNumber(updatedImportance)) {\n throw `result did not return ${path.join('.')}`\n }\n yield put(updateImportanceSuccess({ srn, importance: updatedImportance }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error updating resource importance', e)\n }\n}\n\nfunction* nodeViewHeaderSaga() {\n yield all([\n takeLatest(ADD_CHANGE_DETECTION_PROPERTIES, addChangeDetectionProperties),\n takeLatest(ADD_KEYVAULT_CREDS, addKeyVaultCreds),\n takeLatest(ADD_RESOURCE_TO_SWIMLANE, addResourceToSwimlane),\n takeLatest(ADD_TAG, addTag),\n takeLatest(GET_NODE_DATA, getNodeData),\n takeLatest(GET_KEYVAULT_DATA, getKeyVaultData),\n takeLatest(GET_RESOURCE_GROUP, getResourceGroup),\n takeLatest(\n REMOVE_CHANGE_DETECTION_PROPERTIES,\n removeChangeDetectionProperties\n ),\n takeLatest(REMOVE_KEYVAULT_CREDS, removeKeyVaultCreds),\n takeLatest(REMOVE_TAG, removeTag),\n takeLatest(TOGGLE_RESOURCE_MONITORING, toggleResourceMonitoring),\n takeLatest(UPDATE_CHANGE_DETECTION_PROPERTY, updateChangeDetectionProperty),\n takeLatest(UPDATE_FRIENDLY_NAME, updateFriendlyName),\n takeLatest(UPDATE_IMPORTANCE, updateImportance),\n takeLatest(UPDATE_KEYVAULT_CREDS, updateKeyVaultCreds),\n ])\n}\n\nexport default nodeViewHeaderSaga\n","import React, { Component, Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { push } from 'connected-react-router'\nimport { withRouter } from 'react-router'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\n\nimport color from 'color'\nimport { fromJS, List } from 'immutable'\nimport _ from 'lodash'\nimport qs from 'query-string'\n\nimport HeaderLabelLink from 'containers/NodeSolutionCenter/HeaderLabelLink'\nimport permissionChecker from 'containers/PermissionChecker'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport WithoutPermission from 'containers/PermissionChecker/WithoutPermission'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport { Dropdown, DropdownToggle } from 'reactstrap'\n\nimport Pill from 'components/Badge/Pill'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Button from 'components/Button'\nimport CloudBadge from 'components/CloudBadge'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport Icon from 'components/Icon'\nimport InlineEditableText from 'components/InlineEditableText'\nimport ImportanceWidget from 'components/ImportanceWidget'\nimport Hoverable from 'components/Hoverable'\nimport NodeViewDetailAccount from 'components/NodeView/NodeViewDetailAccount'\nimport { TitleShimmer } from 'components/ShimmerLoader'\n\nimport { BlockShimmer } from 'components/ShimmerLoader'\nimport SmolExpand from 'components/SmolExpand'\nimport Subscription from 'components/Subscription'\nimport DropdownMenu from 'components/StyledReactstrapDropdownMenu'\nimport Tag from 'components/Tag'\nimport TextLink from 'components/TextLink'\n\nimport AddSwimlaneForm from './AddSwimlaneForm'\nimport AddTagForm from './AddTagForm'\nimport ChangeDetectionActions from './ChangeDetectionActions'\nimport KeyVaultActions from './KeyVaultActions'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { DAEMON } from 'utils/constants'\nimport reducer, { REDUX_KEY } from './reducers'\nimport sagas from './sagas'\n\nimport {\n getNodeData,\n getResourceGroup,\n removeTag,\n updateFriendlyName,\n updateImportance,\n} from './actions'\n\nimport { selectQueryTypes } from 'containers/SonraiData/selectors'\nimport {\n makeSelectCrmData,\n makeSelectNodeDataIsLoading,\n makeSelectNodeData,\n makeSelectNodeDataError,\n makeSelectResourceGroup,\n makeSelectSwimlanes,\n makeSelectTags,\n makeSelectUpdateFriendlyName,\n} from './selectors'\n\nimport {\n selectSwimlanes,\n selectSwimlanesLoading,\n} from 'containers/SonraiData/selectors'\n\nimport messages from './messages'\n\nimport { TYPES_WITH_CRM } from 'appConstants'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport {\n buildAzureResourceLink,\n buildAwsResourceLink,\n getCloudFromSrn,\n getIconMapping,\n getSubscriptionFromSrn,\n} from 'utils/sonraiUtils'\nimport CreateUpdateTicketModal from 'containers/CreateUpdateTicketModal'\n\nexport class NodeViewHeader extends Component {\n constructor(props) {\n super(props)\n this.state = {\n actionDropdownExpanded: false,\n tagOverflow: true,\n swimmyOverflow: true,\n tagExpanded: false,\n expandSwimmy: true,\n createTicketModal: false,\n }\n\n this.styles = {\n accountBar: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n actionDropdownButton: {\n width: '100%',\n textAlign: 'right',\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '4px',\n },\n property: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridColumnGap: '0.3em',\n alignItems: 'center',\n padding: '0 0.5em',\n },\n fieldLabel: {\n fontSize: '0.8em',\n fontWeight: '400',\n color: '#485460',\n },\n actions: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n actionsContainer: {\n overflow: 'hidden',\n display: 'flex',\n },\n button: {\n height: '1.85rem',\n fontSize: '0.85rem',\n border: `1px solid ${this.props.theme.primary}`,\n padding: '0 0.5rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginRight: '5px',\n color: color(this.props.theme.neutralDark).darken(0.6),\n },\n container: {\n margin: '0px 12px 12px 12px',\n boxShadow: `rgba(0, 0, 0, 0.1) 1px 4px 3px -1px`,\n borderRadius: '0.25em',\n border: '1px solid #e7e7e9',\n ...props.styles,\n },\n headerItem: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n },\n labelType: {\n marginTop: '2px',\n marginLeft: '12px',\n color: '#aaaaaa',\n fontVariant: 'small-caps',\n fontSize: '0.9em',\n fontWeight: '400',\n },\n linkGuy: {\n fontSize: '0.9em',\n gridArea: 'link',\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n marginTop: '1.5em',\n marginRight: '1.1em',\n },\n name: {\n fontSize: '1.3em',\n width: '100%',\n whiteSpace: 'nowrap',\n overflowX: 'hidden',\n maxWidth: '550px',\n },\n noFriendlyName: {\n color: 'black',\n display: 'grid',\n height: '40px',\n gridTemplateColumns: '80% 20%',\n fontSize: '18px',\n padding: '5px',\n },\n noFriendlyNameCopy: {\n position: 'relative',\n top: '-16px',\n height: '35px',\n textAlign: 'right',\n },\n noFriendlyNameHover: {\n backgroundColor: props.theme.neutralLight,\n },\n swimlanes: {\n fontSize: '0.9em',\n fontWeight: '300',\n color: this.props.theme.dark,\n marginRight: '0.5em',\n },\n top: {\n backgroundColor: this.props.theme.background,\n display: 'grid',\n gridTemplateColumns: 'auto',\n borderTopRightRadius: '0.25rem',\n borderTopLeftRadius: '0.25rem',\n padding: '0.25rem 0.5rem 0 0.5rem',\n },\n topNameStuff: {\n display: 'grid',\n gridTemplateColumns: '30px minmax(200px, 550px) 1fr',\n gridColumnGap: '5px',\n alignItems: 'flex-start',\n },\n mySides: {\n display: 'grid',\n gridTemplateColumns: 'auto 300px',\n },\n title: {\n minWidth: '240px',\n },\n }\n }\n\n componentDidMount() {\n this.props.getNodeData({ srn: this.props.nodeId })\n this.props.getResourceGroup({ srn: this.props.nodeId })\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.nodeId !== this.props.nodeId) {\n this.props.getNodeData({ srn: this.props.nodeId })\n this.props.getResourceGroup({ srn: this.props.nodeId })\n }\n }\n\n setTagOverflow = overflow => {\n this.setState({ tagOverflow: overflow })\n }\n\n setSwimmyOverflow = overflow => {\n this.setState({ swimmyOverflow: overflow })\n }\n\n toggleSwimmyExpand = () => {\n this.setState(oldState => ({\n expandSwimmy: !oldState.expandSwimmy,\n }))\n }\n\n toggleActionMenu = () => {\n this.setState(oldState => ({\n actionDropdownExpanded: !oldState.actionDropdownExpanded,\n }))\n }\n\n getActions = () => {\n const actions = [this.props.actions]\n\n const canEditResource = this.props.userHasPermission({\n permissionName: 'edit.resources',\n swimlanes: this.props.nodeData.swimlaneSRNs,\n })\n const canEditCrm = this.props.userHasPermission({\n permissionName: 'edit.crmsettings',\n swimlanes: this.props.nodeData.swimlaneSRNs,\n })\n\n actions.push(\n
    \n \n
    \n \n
    \n Relations\n \n
    \n )\n\n const hasCRM = TYPES_WITH_CRM.includes(\n getTypeFromSrn(this.props.nodeData.srn).toLowerCase()\n )\n\n if (hasCRM && canEditCrm) {\n actions.push(\n \n )\n }\n\n if (\n (canEditResource &&\n this.props.nodeData.type === 'AzureDatabricksAccount') ||\n this.props.nodeData.type === 'AzureKubernetesCluster'\n ) {\n actions.push(\n \n )\n }\n\n if (\n this.props.userHasPermission({\n permissionName: 'edit.tickets',\n swimlanes: this.props.nodeData.swimlaneSRNs,\n })\n ) {\n actions.push(\n this.setState({ createTicketModal: true })}\n style={{ ...this.styles.button, ...{ margin: '4px 0px 0px 0px' } }}\n key={`nodeViewHeader-actions-${this.props.nodeData.srn}-createTicketModal`}\n >\n
    \n \n
    \n Open Ticket\n \n )\n }\n\n return actions\n }\n\n getAccountTitle = () => {\n if (this.props.nodeData.cloudType === 'azure') {\n return \n } else {\n return \n }\n }\n\n getContainerBackgroundColor = () => {\n return this.props.nodeData && this.props.nodeData.active !== false\n ? this.props.theme.light\n : this.props.theme.neutralLight || this.props.theme.light\n }\n\n getDisplayName = () => {\n const baseName = this.props.nodeData.name || this.props.nodeData.srn\n const friendlyName = this.props.nodeData.friendlyName\n return friendlyName || baseName\n }\n\n getHeaderIcon = () => {\n const type = this.props.nodeData.__typename\n if (typeof type !== 'string') {\n return 'data'\n }\n return getIconMapping(type).faIcon\n }\n\n getImportance = swimlanes => {\n // if importance is set on the resource, return that\n if (this.props.crmData.importance) {\n return this.props.crmData.importance\n }\n\n // otherwise default importance is the max of all the swimlanes\n if (!swimlanes) {\n // eslint-disable-next-line no-console\n console.warn(\"could not get 'data' from swimlanes properties\")\n }\n\n const importance = swimlanes.reduce((maxImportance, swimlane) => {\n const { defaultImportance, srn } = swimlane\n if (!_.isNumber(defaultImportance)) {\n // eslint-disable-next-line no-console\n console.warn(`swimlane ${srn} does not have 'defaultImportance'`)\n }\n return Math.max(maxImportance, defaultImportance)\n }, -1)\n\n return importance > 0 ? importance : 5\n }\n\n getLinkToResource = () => {\n const noneOfTheseGuys = [\n 'PolicyVersion',\n 'PolicyEntry',\n 'PermissionList',\n 'Action',\n ]\n if (\n !this.props.nodeData.active &&\n !noneOfTheseGuys.includes(this.props.nodeData.label)\n ) {\n return null\n }\n let url = null\n const type = getCloudFromSrn(this.props.nodeData.srn)\n if (type === 'azure') {\n url = buildAzureResourceLink(\n this.props.nodeData.srn,\n this.props.nodeData.resourceId,\n this.props.nodeData.type,\n this.props.nodeData.label,\n this.props.nodeData.metadata\n )\n } else if (type === 'aws') {\n url = buildAwsResourceLink(this.props.nodeData)\n } else {\n return null\n }\n\n return url ? (\n \n ) : (\n
    \n )\n }\n\n getSupportsFriendlyName = () => {\n const fields = this.props.queryTypes.getIn(\n [this.props.nodeData.__typename, 'fields'],\n []\n )\n const friendlyNameField = fields.find(\n field => 'friendlyName' === field.get('name')\n )\n return friendlyNameField !== undefined\n }\n\n getSupportsTags = () => {\n const fields = this.props.queryTypes.getIn(\n [this.props.nodeData.__typename, 'fields'],\n []\n )\n const hasTag = fields.find(field => 'hasTag' === field.get('name'))\n return hasTag !== undefined\n }\n\n handleUpdateFriendlyName = newValue => {\n const value = newValue || ''\n this.props.updateFriendlyName({ srn: this.props.nodeId, value })\n }\n\n navigateToExplorer = () => {\n const id = this.props.nodeId\n const type = getTypeFromSrn(this.props.nodeId)\n\n this.props.push({\n pathname: '/App/Explorer',\n search: qs.stringify({\n id: id,\n type: type,\n }),\n })\n }\n\n hasImportance = node =>\n this.props.queryTypes\n .getIn([node.__typename, 'implements'], List())\n .includes('Resource')\n\n renderAccountBar = swimlanes => {\n const subscriptionId = getSubscriptionFromSrn(this.props.nodeData.srn)\n\n let resourceGroup = this.props.resourceGroup.group\n let storageAccount = this.props.resourceGroup.storageAccount\n if (!this.props.resourceGroup.loading) {\n if (_.isEmpty(resourceGroup)) {\n resourceGroup = null\n }\n if (_.isEmpty(storageAccount)) {\n storageAccount = null\n }\n }\n const importance = this.getImportance(swimlanes)\n const swimlanesSrns = this.props.nodeData.swimlaneSRNs\n const hasImportance = this.hasImportance(this.props.nodeData)\n return (\n
    \n
    \n
    \n
    {this.getAccountTitle()}:
    \n
    \n \n
    \n
    \n {!!subscriptionId && this.props.nodeData.label !== 'Subscription' && (\n
    \n
    Subscription:
    \n \n
    \n )}\n {this.props.nodeData.cloudType === 'azure' &&\n resourceGroup &&\n this.props.nodeData.label !== 'ResourceGroup' && (\n \n
    Resource Group:
    \n \n
    \n )}\n {this.props.nodeData.cloudType === 'azure' &&\n storageAccount &&\n this.props.nodeData.label !== 'DataStore' && (\n \n
    Storage Account:
    \n \n
    \n )}\n {this.props.nodeData.region && (\n
    \n
    Region:
    \n
    \n {this.props.nodeData.region}\n
    \n
    \n )}\n
    \n
    \n {hasImportance && (\n \n \n \n \n {' '}\n Importance:{' '}\n
    \n {!importance ? (\n \n ) : (\n \n )}\n
    \n \n \n )}\n {this.getLinkToResource()}\n \n \n )\n }\n\n renderLoading = () => {\n return (\n
    \n
    \n \n
    \n
    \n )\n }\n\n renderName = () => {\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.resources',\n swimlanes: this.props.nodeData.swimlaneSRNs,\n })\n const displayName = this.getDisplayName()\n if (!this.getSupportsFriendlyName() || !canEdit) {\n return (\n
    \n (\n
    \n
    {displayName}
    \n
    \n {hovered && (\n \n )}\n {hovered && (\n \n )}\n
    \n
    \n )}\n />\n
    \n )\n }\n\n return (\n \n )\n }\n\n renderSwimlanes = swimlanes => {\n if (this.props.swimlanesLoading) {\n return (\n
    \n \n
    \n )\n }\n\n if (swimlanes.length === 0) {\n return null\n }\n\n return (\n
    \n \n \n \n \n \n
    \n :\n
    \n
    \n {swimlanes.map((swimlane, index) => {\n return (\n \n {swimlane.title}\n \n )\n })}\n \n
    \n {this.state.swimmyOverflow && (\n \n {this.state.expandSwimmy ? (\n \n \n \n \n ) : (\n \n \n \n \n )}\n \n )}\n
    \n
    \n )\n }\n\n renderTags = () => {\n if (!this.getSupportsTags()) {\n return null\n }\n\n if (this.props.tags.loading || !this.props.tags.data) {\n return (\n
    \n \n
    \n )\n }\n\n const swimlanesSrns = this.props.nodeData.swimlaneSRNs\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.resources',\n swimlanes: swimlanesSrns,\n })\n\n return (\n
    \n \n \n \n \n \n
    \n :\n
    \n \n {this.props.tags.data\n .sort(tag =>\n decodeURIComponent(\n typeof tag.key === 'string' && tag.key.toLowerCase()\n )\n )\n .map((tag, index) => {\n let removeTag = canEdit\n ? () =>\n this.props.removeTag({\n srn: tag.srn,\n nodeId: this.props.nodeId,\n })\n : null\n\n return (\n \n )\n })}\n \n
    \n {this.state.tagOverflow && (\n \n {this.state.tagExpanded ? (\n \n Show Less \n \n ) : (\n \n Show All \n \n )}\n \n )}\n
    \n
    \n )\n }\n\n render() {\n if (this.props.isLoading) {\n return this.renderLoading()\n }\n const nodeLabel = this.props.nodeData.label.toUpperCase()\n const nodeType = this.props.nodeData.type\n ? ` - ${this.props.nodeData.type.toUpperCase()}`\n : ''\n\n const nodeDataSwombos = new Set(this.props.nodeData.swimlaneSRNs || []) // eslint-disable-line no-restricted-globals\n const swimlanes = this.props.swimlanes.filter(swombo =>\n nodeDataSwombos.has(swombo.get('srn'))\n )\n\n return (\n
    \n
    {`${nodeLabel}${nodeType}`}
    \n \n \n \n \n \n
    \n
    {this.renderName()}
    \n \n {!this.props.horizontal ? (\n
    \n
    \n {this.getActions()}\n
    \n
    \n ) : (\n
    \n \n \n \n \n \n {this.getActions()}\n \n
    \n \n )}\n \n
    \n {this.renderAccountBar(swimlanes)}\n {this.renderTags(swimlanes)}\n {this.renderSwimlanes(swimlanes.toList().toJS())}\n
    \n \n \n this.setState(oldState => ({\n createTicketModal: !oldState.createTicketModal,\n }))\n }\n resource={this.props.nodeData}\n />\n \n )\n }\n}\n\nNodeViewHeader.defaultProps = {\n onNodeView: false,\n styles: {},\n}\n\nNodeViewHeader.propTypes = {\n theme: themeShape,\n\n // passed from permissionChecker\n userHasPermission: PropTypes.func.isRequired,\n\n // ~ passed props ~\n actions: PropTypes.node, // any custom actions components (eg buttons, etc.)\n nodeId: PropTypes.string.isRequired,\n // set true if rendered on node view so we can set CRM data and other stuff used\n // on actual node view in sagas\n onNodeView: PropTypes.bool,\n\n // ~ props from redux store ~\n crmData: PropTypes.shape({\n error: PropTypes.bool,\n monitored: PropTypes.bool,\n importance: PropTypes.number,\n changeDetectionProperties: PropTypes.arrayOf(PropTypes.object),\n changeDetectionOptions: PropTypes.arrayOf(PropTypes.object),\n }),\n isLoading: PropTypes.bool,\n nodeData: PropTypes.shape({\n account: PropTypes.string,\n active: PropTypes.bool,\n cloudType: PropTypes.string,\n friendlyName: PropTypes.string,\n hasTags: PropTypes.object,\n label: PropTypes.string,\n metadata: PropTypes.arrayOf(PropTypes.string),\n name: PropTypes.string,\n region: PropTypes.string,\n resourceId: PropTypes.string,\n swimlaneSRNs: PropTypes.array,\n srn: PropTypes.string.isRequired,\n type: PropTypes.string,\n __typename: PropTypes.string.isRequired,\n }),\n swimlanes: ImmutablePropTypes.map,\n queryTypes: ImmutablePropTypes.map.isRequired,\n resourceGroup: PropTypes.shape({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n group: PropTypes.object,\n storageAccount: PropTypes.object,\n }),\n swimlaneInfo: PropTypes.shape({\n addingResourceToSL: PropTypes.bool,\n loading: PropTypes.bool,\n data: PropTypes.arrayOf(PropTypes.object),\n }),\n tags: PropTypes.shape({\n loading: PropTypes.bool,\n data: PropTypes.arrayOf(PropTypes.object),\n }),\n updateFriendlyNameStatus: PropTypes.shape({\n loading: PropTypes.bool,\n }),\n styles: PropTypes.object,\n\n // ~ bound action creators ~\n getNodeData: PropTypes.func.isRequired,\n getResourceGroup: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n removeTag: PropTypes.func.isRequired,\n updateFriendlyName: PropTypes.func.isRequired,\n updateImportance: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n swimlanesLoading: PropTypes.bool,\n}\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getNodeData,\n getResourceGroup,\n push,\n removeTag,\n updateFriendlyName,\n updateImportance,\n },\n dispatch\n )\n}\n\nconst makeMapStateToProps = () => {\n const selectCrmData = makeSelectCrmData()\n const selectNodeDataIsLoading = makeSelectNodeDataIsLoading()\n const selectNodeData = makeSelectNodeData()\n const selectNodeDataError = makeSelectNodeDataError()\n const selectResouceGroup = makeSelectResourceGroup()\n const selectTags = makeSelectTags()\n const selectSwimlaneInfo = makeSelectSwimlanes()\n const selectUpdateFriendlyName = makeSelectUpdateFriendlyName()\n return createStructuredSelector({\n crmData: selectCrmData,\n isLoading: selectNodeDataIsLoading,\n nodeData: selectNodeData,\n nodeDataError: selectNodeDataError,\n queryTypes: selectQueryTypes,\n resourceGroup: selectResouceGroup,\n swimlanes: selectSwimlanes,\n swimlaneInfo: selectSwimlaneInfo,\n swimlanesLoading: selectSwimlanesLoading,\n tags: selectTags,\n updateFriendlyNameStatus: selectUpdateFriendlyName,\n })\n}\n\nconst withConnect = connect(makeMapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: REDUX_KEY, reducer })\nconst withSaga = injectSaga({\n key: REDUX_KEY,\n saga: sagas,\n mode: DAEMON,\n})\n\nexport default compose(\n withConnect,\n permissionChecker,\n themeable,\n withSaga,\n withReducer,\n withRouter\n)(NodeViewHeader)\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\nimport { getCurrentOrg } from 'auth/current-org'\n\nexport const selectControlFrameworkDataDomain = state =>\n state.get('controlFrameworkData', Map())\n\nexport const selectLoadedControlGroups = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('loadedControlGroups')\n)\n\nexport const selectControlGroups = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('controlGroups') || Map()\n)\n\nexport const selectPolicies = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('policies') || Map()\n)\n\nexport const selectFetchingPolicies = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('fetchingPolicies')\n)\n\nexport const selectFetchingControlGroups = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('fetchingControlGroups')\n)\n\nexport const selectCreatingPolicy = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('creatingPolicy')\n)\n\nexport const selectDeletingCFs = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('deletingCFs')\n)\n\nexport const selectLoadedPolicies = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('loadedControlPolicies')\n)\n\nexport const selectPolicyError = createSelector(\n selectControlFrameworkDataDomain,\n sonraiData => sonraiData.get('policyError')\n)\n\nexport const selectUpdatingPolicies = createSelector(\n selectControlFrameworkDataDomain,\n sonraiData => sonraiData.get('updatingPolicies') || Map()\n)\n\nexport const selectTogglingSwimlaneOnCfs = createSelector(\n selectControlFrameworkDataDomain,\n sonraiData => sonraiData.get('togglingSwimlaneOnCfs') || Map()\n)\n\nexport const selectTogglingSwimlaneError = createSelector(\n selectControlFrameworkDataDomain,\n sonraiData => sonraiData.get('togglingSwimlaneError') || Map()\n)\n\nexport const selectControlFrameworksForUser = createSelector(\n [selectControlGroups],\n controlGroups =>\n controlGroups.filter(cf => {\n const thisOrgPrefix = `/org/${getCurrentOrg()}/`\n return cf.get('resourceId', '').startsWith(thisOrgPrefix)\n })\n)\n\nexport const selectPoliciesForUser = createSelector(\n [selectPolicies, selectControlFrameworksForUser],\n (policies, userFrameworks) => {\n const frameworkIds = userFrameworks.toList().map(cf => cf.get('srn'))\n\n return policies.filterNot(policy =>\n policy\n .getIn(['containedByControlFramework', 'items'], List())\n .filter(parentFramework =>\n frameworkIds.includes(parentFramework.get('srn'))\n )\n .isEmpty()\n )\n }\n)\n\nexport const selectUpdatingCFs = createSelector(\n selectControlFrameworkDataDomain,\n state => state.get('updatingCFs')\n)\n","export const ADD_FIELD = 'app/SearchQuery/ADD_FIELD'\nexport const ADD_RESULT_VIEW = 'app/SearchQuery/ADD_RESULT_VIEW'\nexport const CHANGE_ARGUMENT = 'app/SearchQuery/CHANGE_ARGUMENT'\nexport const CHANGE_FIELD_NAME = 'app/SearchQuery/CHANGE_FIELD_NAME'\nexport const REMOVE_ARGUMENT = 'app/SearchQuery/REMOVE_ARGUMENT'\nexport const REMOVE_FIELD = 'app/SearchQuery/REMOVE_FIELD'\nexport const REMOVE_RESULT_VIEW = 'app/SearchQuery/REMOVE_RESULT_VIEW'\nexport const START_QUERY = 'app/SearchQuery/START_QUERY'\nexport const LOAD_SAVED_QUERY = 'app/SearchQuery/LOAD_SAVED_QUERY'\nexport const RESET_QUERY = 'app/SearchQuery/RESET_QUERY'\nexport const UPDATE_RESULT_VIEW = 'app/SearchQuery/UPDATE_RESULT_VIEW'\nexport const SET_DEFAULT_VIEW = 'app/SearchQuery/SET_DEFAULT_VIEW'\nexport const ADD_ARGUMENT = 'app/SearchQuery/ADD_ARGUMENT'\nexport const MOVE_ARGUMENT = 'app/SearchQuery/MOVE_ARGUMENT'\nexport const LOAD_AND_CONVERT_SAVED_QUERY =\n 'app/SearchQuery/LOAD_AND_CONVERT_SAVED_QUERY'\nexport const CHANGE_CHILD_OPERATOR = 'app/SearchQuery/CHANGE_CHILD_OPERATOR'\nexport const ADD_PROPERTY = 'app/SearchQuery/ADD_PROPERTY'\nexport const REMOVE_PROPERTY = 'app/SearchQuery/REMOVE_PROPERTY'\nexport const TOGGLE_DEFAULT_PROPERTY = 'app/SearchQuery/TOGGLE_DEFAULT_PROPERTY'\nexport const RESET_DEFAULT_PROPERTIES =\n 'app/SearchQuery/RESET_DEFAULT_PROPERTIES'\n\nexport const ADD_COMMENT = 'app/SearchQuery/ADD_COMMENT'\nexport const REMOVE_COMMENT = 'app/SearchQuery/REMOVE_COMMENT'\nexport const SET_QUERY_PROPERTY_ORDER =\n 'app/SearchQuery/SET_QUERY_PROPERTY_ORDER'\nexport const SET_QUERY_COLUMN_ALIAS = 'app/SearchQuery/SET_QUERY_COLUMN_ALIAS'\nexport const REMOVE_QUERY_COLUMN_ALIAS =\n 'app/SearchQuery/REMOVE_QUERY_COLUMN_ALIAS'\nexport const SET_EFFECTIVE_PERMISSION_PROPERTY_ORDER =\n 'app/SearchQuery/SET_EFFECTIVE_PERMISSION_PROPERTY_ORDER'\nexport const ADD_EFFECTIVE_PERMISSION_INCLUDE_GROUP =\n 'app/SearchQuery/ADD_EFFECTIVE_PERMISSION_INCLUDE_GROUP'\nexport const ADD_EFFECTIVE_PERMISSION_EXCLUDE_GROUP =\n 'app/SearchQuery/ADD_EFFECTIVE_PERMISSION_EXCLUDE_GROUP'\nexport const REMOVE_EFFECTIVE_PERMISSION_GROUP =\n 'app/SearchQuery/REMOVE_EFFECTIVE_PERMISSION_GROUP'\nexport const ADD_EFFECTIVE_PERMISSION =\n 'app/SearchQuery/ADD_EFFECTIVE_PERMISSION'\nexport const REMOVE_EFFECTIVE_PERMISSION =\n 'app/SearchQuery/REMOVE_EFFECTIVE_PERMISSION'\nexport const ADD_EP_DISPLAY_COLUMN = 'app/SearchQuery/ADD_EP_DISPLAY_COLUMN'\nexport const REMOVE_EP_DISPLAY_COLUMN =\n 'app/SearchQuery/REMOVE_EP_DISPLAY_COLUMN'\nexport const SET_IS_DISTINCT_EP = 'app/SearchQuery/SET_IS_DISTINCT_EP'\nexport const SET_EP_DISPLAY_COLUMN_ALIAS =\n 'app/SearchQuery/SET_EP_DISPLAY_COLUMN_ALIAS'\nexport const REMOVE_EFFECTIVE_PERMISSION_BLOCK =\n 'app/SearchQuery/REMOVE_EFFECTIVE_PERMISSION_BLOCK'\nexport const UPDATE_EFFECTIVE_PERMISSION =\n 'app/SearchQuery/UPDATE_EFFECTIVE_PERMISSION'\nexport const SET_EP_COLUMN_ALIAS = 'app/SearchQuery/SET_EP_COLUMN_ALIAS'\nexport const REMOVE_EP_COLUMN_ALIAS = 'app/SearchQuery/REMOVE_EP_COLUMN_ALIAS'\nexport const INSERT_FIELD = 'app/SearchQuery/INSERT_FIELD'\nexport const SET_SEARCH_LIMIT = 'app/SearchQuery/SET_SEARCH_LIMIT'\nexport const CLEAR_SEARCH_LIMIT = 'app/SearchQuery/CLEAR_SEARCH_LIMIT'\n","import cookie from 'cookie'\nimport jwt from 'jsonwebtoken'\nimport _ from 'lodash'\n\n// the users current org is stored in a cookie\nexport const COOKIE_NAME = 'sonrai.currentOrg'\n\n// this is the claim on the access_token that contains allowed orgs\nexport const ORGS_CLAIM = `https://sonraisecurity.com/orgs`\n\n/**\n * Setup event handlers: Functions around app can subscribe to changes on to\n * the org. The events will emit across tabs using this BroadcastChannel\n */\nconst BC_CHANNEL_NAME = 'sonrai_current_org_channel'\nexport const Events = {\n CLEAR: `${BC_CHANNEL_NAME}/CLEAR`,\n SET: `${BC_CHANNEL_NAME}/SET`,\n}\n\nvar orgChangeChannel // this is the BroadcastChannel\nvar channelEventHandlers // { [Event.CLEAR]: [callback...], ... }\ninitBroadcastChannel()\n\n/**\n * ~~~ BEGIN PUBLIC INTERFACE ~~~\n */\nexport default {\n /**\n * export an object with everything if callers prefer not to just import\n * individual methods\n */\n Events,\n clearCurrentOrg,\n canSetDefaultOrg,\n setDefaultOrg,\n userIsDisabled,\n getCurrentOrg,\n setCurrentOrg,\n getAllowedOrgs,\n hasInvalidOrg,\n registerEventHandler,\n unregisterEventHandler,\n}\n\n/**\n * clear the currently selected org\n * @param passedParams - see comments below for values\n */\nexport function clearCurrentOrg(passedParams) {\n const params = {\n ...{\n // handleEvent: should we call the registered callbacks (default true)\n handleEvent: true,\n },\n ...passedParams,\n }\n document.cookie = `${COOKIE_NAME}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`\n if (params.handleEvent) {\n orgChangeChannel.postMessage(Events.CLEAR)\n handleEvent(Events.CLEAR)\n }\n}\n\n/**\n * determine whether a default org can be set.. i.e. user ony has one allowed\n * org so we can use it by default\n *\n * @param token {string} users access token, default window.aat\n * @returns {boolean} true if there is only one org allowed, false otherwise\n */\nexport function canSetDefaultOrg(token = window.aat) {\n validateToken(token)\n const allowedOrgs = getAllowedOrgsFromToken(token)\n return allowedOrgs.length === 1\n}\n\n/**\n * selects the default org if there is only one allowed. If there is not only\n * one allowed, this will throw\n *\n * @param token {string} users access token, default window.aat\n */\nexport function setDefaultOrg(params, token = window.aat) {\n if (!canSetDefaultOrg(token)) {\n throw new Error(`IllegalArgumentError: not allowed to set default org`)\n }\n const allowedOrgs = getAllowedOrgsFromToken(token)\n setCurrentOrg(allowedOrgs[0], params, token)\n}\n\n/**\n * returns true if the user is disabled - i.e. they have no orgs assigned\n *\n * @param token {string} the users access token\n */\nexport function userIsDisabled(token = window.aat) {\n validateToken(token)\n const allowedOrgs = getAllowedOrgsFromToken(token)\n return allowedOrgs.length === 0\n}\n\n/**\n * get the org the user has currently selected to use\n *\n * @returns {string} user's current org\n */\nexport function getCurrentOrg() {\n const cookies = cookie.parse(document.cookie)\n return cookies[COOKIE_NAME] || null\n}\n\n/**\n * select the current org for the user to use\n *\n * @param org {string} org to select\n * @param token {string} users' current access token. default window.aat\n */\nexport function setCurrentOrg(org, passedParams, token = window.aat) {\n const params = {\n ...{\n // handleEvent: should we call the registered callbacks (default true)\n handleEvent: true,\n // noValidate: set the org to whatver is passed but skip validatition\n noValidate: false,\n },\n ...passedParams,\n }\n if (!params.noValidate) {\n validateOrgIsAllowed(org, token) // throws if invalid\n }\n document.cookie = `${COOKIE_NAME}=${org}; path=/;`\n if (params.handleEvent) {\n orgChangeChannel.postMessage(Events.SET)\n handleEvent(Events.SET)\n }\n}\n\n/**\n * get all the orgs the user could assume based on their token claim\n */\nexport function getAllowedOrgs(token = window.aat) {\n validateToken(token)\n return getAllowedOrgsFromToken(token)\n}\n\n/**\n * somehow a users token was set but\n */\nexport function hasInvalidOrg(token = window.aat) {\n const currentOrg = getCurrentOrg()\n if (currentOrg == null) {\n return false\n }\n const allowedOrgs = getAllowedOrgs(token)\n if (!allowedOrgs) {\n // eslint-disable-next-line no-console\n console.debug('could not get allowed orgs from token ' + token)\n return false\n }\n return !allowedOrgs.includes(currentOrg)\n}\n\n/**\n * Register a function to run if the event happens.\n *\n * @param event {Event} one of the events that will run callback when. It will\n * throw if an invalid event is passed\n * @param callback {func} function to run when the event happens\n */\nexport function registerEventHandler(event, callback) {\n if (undefined === channelEventHandlers[event]) {\n throw new Error(`IllegalArgumentError: invalid event ${event}`)\n }\n channelEventHandlers[event].push(callback)\n}\n\n/**\n * Unreigster a function so it wont run when the event happens\n *\n * @param event {Event} event that the function will not run when it happens.\n * It will throw if an invalid event is passed\n * @param callback {func} callback that wont run when the event fires\n */\nexport function unregisterEventHandler(event, callback) {\n if (undefined === channelEventHandlers[event]) {\n throw new Error(`IllegalArgumentError: invalid event ${event}`)\n }\n channelEventHandlers[event] = channelEventHandlers[event].filter(\n handler => handler != callback\n )\n}\n\n/**\n * ~~~ BEGIN PRIVATE INTERFACE ~~~\n */\n\nfunction getAllowedOrgsFromToken(token) {\n const { [ORGS_CLAIM]: allowedOrgs } = jwt.decode(token)\n return allowedOrgs\n}\n\nfunction validateToken(token) {\n if (!token) {\n throw new Error('IllegalArgumentError: no token argument was supplied')\n }\n const allowedOrgs = getAllowedOrgsFromToken(token)\n if (!allowedOrgs) {\n throw new Error(\n `IllegalArgumentError: token did not contain claim '${ORGS_CLAIM}'`\n )\n }\n\n if (!_.isArray(allowedOrgs)) {\n throw new Error(\n `IllegalArgumentError: token claim '${ORGS_CLAIM}' had invalid value ${allowedOrgs}`\n )\n }\n}\n\nfunction validateOrgIsAllowed(org, token) {\n validateToken(token) // throws if invalid\n if (!org) {\n throw new Error('IllegalArgumentError: no org was supplied')\n }\n\n const allowedOrgs = getAllowedOrgsFromToken(token)\n if (!allowedOrgs.includes(org)) {\n throw new Error(\n `IllegalOrgError: cannot assign to org ${org}, allowed orgs are ${allowedOrgs}`\n )\n }\n}\n\nfunction handleEvent(event) {\n if (channelEventHandlers[event] != undefined) {\n // run all the event handlers for the event\n channelEventHandlers[event].forEach(handler => handler())\n } else {\n throw new Error(\n `IllegalArgumentError: invalid current-org event for handler ${event}`\n )\n }\n}\n\nfunction initBroadcastChannel() {\n var BroadcastChannel = window.BroadcastChannel\n if (undefined === BroadcastChannel) {\n /**\n * polyfill for Safari and IE - if users have mutliple tabs open in those\n * browsers then I hope the polyfill works right. Don't steal this code\n * and use it to send sensitive data cause it'll end hangin out in\n * localstorage and those pentesters will yell at us again\n */\n BroadcastChannel = class BroadcastChannelPolyfill {\n constructor(messageChannel) {\n this.messageChannel = messageChannel\n this.postMessage = this.postMessage.bind(this)\n this.close = this.close.bind(this)\n this.handleMessage = this.handleMessage.bind(this)\n this.currentMessage = localStorage.getItem(this.messageChannel)\n\n window.addEventListener('storage', this.handleMessage)\n }\n\n addMessageId(message) {\n // just prefix the message with some random number so we dont process same\n // message two times\n return Math.floor(Math.random() * 1000000) + '_' + message\n }\n\n getMessageContent(message) {\n // remove the message id\n var x = message.split('_')\n x.shift()\n return x.join('_')\n }\n\n handleMessage() {\n const message = localStorage.getItem(this.messageChannel)\n if (message && message != this.currentMessage && this.onmessage) {\n this.onmessage({ data: this.getMessageContent(message) })\n this.currentMessage = message\n }\n }\n\n postMessage(message) {\n localStorage.setItem(this.messageChannel, this.addMessageId(message))\n }\n\n close() {\n window.removeEventListener('storage', this.handleMessage)\n }\n }\n } // end polyfill\n\n orgChangeChannel = new BroadcastChannel(BC_CHANNEL_NAME)\n orgChangeChannel.onmessage = event => handleEvent(event.data)\n channelEventHandlers = Object.values(Events).reduce(\n (a, c) => ({ ...a, [c]: [] }),\n {}\n )\n}\n","/*\n *\n * EscalationData constants\n *\n */\n\nexport const GET_ESCALATIONS = 'app/EscalationData/GET_ESCALATIONS'\nexport const SET_ESCALATIONS = 'app/EscalationData/SET_ESCALATIONS'\nexport const SET_ESCALATIONS_ERROR = 'app/EscalationData/SET_ESCALATIONS_ERROR'\n\nexport const CREATE_ESCALATION = 'app/EscalationData/CREATE_ESCALATION'\nexport const CREATE_ESCALATION_SUCCESS =\n 'app/EscalationData/CREATE_ESCALATION_SUCCESS'\nexport const CREATE_ESCALATION_ERROR =\n 'app/EscalationData/CREATE_ESCALATION_ERROR'\n\nexport const DELETE_ESCALATION = 'app/EscalationData/DELETE_ESCALATION'\nexport const DELETE_ESCALATION_SUCCESS =\n 'app/EscalationData/DELETE_ESCALATION_SUCCESS'\nexport const DELETE_ESCALATION_ERROR =\n 'app/EscalationData/DELETE_ESCALATION_ERROR'\n\nexport const FETCH_ESCALATION_FILTER_OPTIONS =\n 'app/EscalationData/FETCH_ESCALATION_FILTER_OPTIONS'\nexport const FETCH_ESCALATION_FILTER_OPTIONS_SUCCESS =\n 'app/EscalationData/FETCH_ESCALATION_FILTER_OPTIONS_SUCCESS'\nexport const FETCH_ESCALATION_FILTER_OPTIONS_ERROR =\n 'app/EscalationData/FETCH_ESCALATION_FILTER_OPTIONS_ERROR'\n\nexport const UPDATE_ESCALATION = 'app/EscalationData/UPDATE_ESCALATION'\nexport const UPDATE_ESCALATION_SUCCESS =\n 'app/EscalationData/UPDATE_ESCALATION_SUCCESS'\nexport const UPDATE_ESCALATION_ERROR =\n 'app/EscalationData/UPDATE_ESCALATION_ERROR'\nexport const UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR =\n 'app/EscalationData/UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR'\nexport const CLEAR_UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR =\n 'app/EscalationData/CLEAR_UPDATE_ESCALATION_SWIMLANE_EDIT_CUSTOM_TICKET_ERROR'\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\nexport const selectDataClassifierDataDomain = state =>\n state.get('dataClassifierData', Map())\n\nexport const selectFetchingClassifiers = createSelector(\n selectDataClassifierDataDomain,\n state => state.get('fetchingClassifiers')\n)\n\nexport const selectCustomClassifiers = createSelector(\n selectDataClassifierDataDomain,\n state => state.get('customClassifiers') || List()\n)\n\nexport const selectDeletingCustomClassifiers = createSelector(\n selectDataClassifierDataDomain,\n state => state.get('deletingCustomClassifiers') || Map()\n)\n\nexport const selectDeletingCustomClassifiersError = createSelector(\n selectDataClassifierDataDomain,\n state => state.get('deletingCustomClassifiersError')\n)\n\nexport const selectUpdatingCustomClassifiers = createSelector(\n selectDataClassifierDataDomain,\n state => state.get('updatingCustomClassifiers')\n)\n\nexport const selectCreatingClassifier = createSelector(\n selectDataClassifierDataDomain,\n state => state.get('creatingClassifier')\n)\n\nexport const selectCreatingClassifierError = createSelector(\n selectDataClassifierDataDomain,\n state => state.get('creatingClassifierError')\n)\n","import React, { Component } from 'react'\nimport Icon from 'components/Icon'\nimport Popup from 'reactjs-popup'\nimport PropTypes from 'prop-types'\nimport { getCrmPropertySubtitle, getMappedBoolLabel } from 'utils/widgetUtils'\n\nclass ChangeDetectionPopup extends Component {\n styles = {\n button: {\n border: 'none',\n padding: '0rem 0.5rem',\n },\n contentStyle: {\n minWidth: '18rem',\n padding: '0.75rem',\n boxShadow: `rgba(0, 0, 0, 0.1) 0px 4px 3px -1px`,\n display: 'flex',\n },\n container: {\n width: '100%',\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: '0.4fr 1fr 1fr',\n },\n title: {\n fontWeight: '500',\n fontSize: '1rem',\n margin: '0px',\n padding: '0px',\n },\n subTitle: {\n fontSize: '14px',\n color: '#888',\n padding: '0px',\n margin: '0rem 0rem 0.15rem 0rem',\n },\n propertiesContainer: {\n display: 'flex',\n alignItems: 'center',\n padding: '5px 10px 5px 15px',\n backgroundColor: '#74B4DF',\n borderRadius: '20px',\n margin: '0rem 1rem 1rem 0rem',\n },\n }\n\n getContent = () => {\n const {\n data: { keyName, currentValue },\n } = this.props\n return (\n
    \n
    \n \n {this.props.title || getMappedBoolLabel(keyName, currentValue)}\n \n
    \n
    \n {getCrmPropertySubtitle(this.props.resourceSrn, keyName)}\n
    \n
    \n
    \n Current State:\n \n {this.props.isLocked ? 'Locked' : 'Unlocked'}\n \n
    \n
    \n
    \n )\n }\n\n render() {\n const {\n data: { content },\n } = this.props\n\n if (!content) {\n return (\n
    \n \n \n \n }\n position=\"right top\"\n closeOnDocumentClick\n contentStyle={this.styles.contentStyle}\n >\n {this.getContent()}\n \n
    \n )\n }\n\n return (\n
    \n \n {content}\n \n \n
    \n \n }\n position=\"right top\"\n closeOnDocumentClick\n contentStyle={this.styles.contentStyle}\n >\n {this.getContent()}\n \n \n )\n }\n}\n\nChangeDetectionPopup.propTypes = {\n isLocked: PropTypes.bool.isRequired,\n style: PropTypes.object,\n color: PropTypes.string,\n resourceSrn: PropTypes.string,\n data: PropTypes.shape({\n keyName: PropTypes.string,\n currentValue: PropTypes.any,\n content: PropTypes.node,\n }),\n title: PropTypes.string,\n}\n\nexport default ChangeDetectionPopup\n","import React, { Component, Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\n\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport ChangeDetectionPopup from './ChangeDetectionPopup'\n\nclass WidgetPopup extends Component {\n render() {\n const keyName = this.props.data.keyName\n const showLinkToTickets = !this.props.crmTickets\n .filter(ticket => ticket.get('ticketKey') === keyName)\n .isEmpty()\n\n return (\n \n \n {showLinkToTickets && (\n \n \n \n )}\n \n )\n }\n}\n\nWidgetPopup.propTypes = {\n crmTickets: ImmutablePropTypes.list.isRequired,\n data: PropTypes.shape({\n keyName: PropTypes.string,\n keyType: PropTypes.string,\n }),\n lockedOn: PropTypes.string,\n isLocked: PropTypes.bool,\n resourceSrn: PropTypes.string,\n color: PropTypes.string,\n theme: themeShape,\n title: PropTypes.string,\n content: PropTypes.object,\n}\n\nexport default themeable(WidgetPopup)\n","export const CRM_TABLE_MAX_SIZE = 500\n\nexport const SET_CRITICAL_RESOURCE_MONITOR_DATE =\n 'app/AccessActivity/SET_CRITICAL_RESOURCE_MONITOR_DATE'\n\nexport const GET_PROPERTY_WIDGET_DATA =\n 'app/AccessActivity/GET_PROPERTY_WIDGET_DATA'\n\nexport const SET_PROPERTY_WIDGET_DATA =\n 'app/AccessActivity/SET_PROPERTY_WIDGET_DATA'\n\nexport const GET_DID_ACCESS_DATA = 'app/AccessActivity/GET_DID_ACCESS_DATA'\n\nexport const SET_DID_ACCESS_DATA = 'app/AccessActivity/SET_DID_ACCESS_DATA'\n\nexport const GET_CAN_ACCESS_DATA = 'app/AccessActivity/GET_CAN_ACCESS_DATA'\n\nexport const SET_CAN_ACCESS_DATA = 'app/AccessActivity/SET_CAN_ACCESS_DATA'\n\nexport const GET_ACCESSED_USING_DATA =\n 'app/AccessActivity/GET_ACCESSED_USING_DATA'\n\nexport const SET_ACCESSED_USING_DATA =\n 'app/AccessActivity/SET_ACCESSED_USING_DATA'\n\nexport const GET_ACTIVITY_WIDGET_DATA =\n 'app/AccessActivity/GET_ACTIVITY_WIDGET_DATA'\n\nexport const SET_ACTIVITY_WIDGET_DATA =\n 'app/AccessActivity/SET_ACTIVITY_WIDGET_DATA'\n\nexport const GET_SELECTED_ROW_ACTIONS =\n 'app/AccessActivity/GET_SELECTED_ROW_ACTIONS'\nexport const SET_SELECTED_ROW_ACTIONS =\n 'app/AccessActivity/SET_SELECTED_ROW_ACTIONS'\nexport const TOGGLE_ACTIONS_MODAL = 'app/AccessActivity/TOGGLE_ACTIONS_MODAL'\n\nexport const GET_CAN_ACCESS_PATH = 'app/AccessActivity/GET_CAN_ACCESS_PATH'\nexport const SET_CAN_ACCESS_PATH = 'app/AccessActivity/SET_CAN_ACCESS_PATH'\n\nexport const GET_EP_PATHS = 'app/Access/GET_EP_PATHS'\nexport const SET_EP_PATHS = 'app/Access/SET_EP_PATHS'\nexport const ERR_EP_PATHS = 'app/Access/ERR_EP_PATHS'\nexport const SET_LAST_CAN_ACCESS_JOB_TIMESTAMP =\n 'app/Access/SET_LAST_CAN_ACCESS_JOB_TIMESTAMP'\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport DataTable from 'components/DataTable'\nimport { TopTitle, CardBody } from 'components/Card'\nimport Card from 'components/Card'\nimport { getAccountFromSrn, getNodeViewPushParams } from 'utils/sonraiUtils'\nimport WidgetPopup from 'components/WidgetPopup'\nimport moment from 'moment'\nimport { exists } from 'utils/sonraiUtils'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport TextLink from 'components/TextLink'\nimport { CRM_TABLE_MAX_SIZE } from 'containers/AccessActivity/constants'\n\nclass DidAccessWidget extends Component {\n styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n marginRight: '0px',\n },\n card: {\n minHeight: 0,\n },\n }\n\n getData = didAccessData => {\n if (\n exists(didAccessData) &&\n exists(didAccessData.data) &&\n !_.isEmpty(didAccessData.data)\n ) {\n if (this.props.actionableByMode) {\n const rows = didAccessData.data.map(x => {\n const row = {\n who:\n x.resourceSetFull &&\n x.resourceSetFull\n .map(\n resource =>\n resource.friendlyName ||\n resource.name ||\n _.last(resource.srn.split('/'))\n )\n .join(', '),\n how: x.actionClassification,\n highestAlertSeverity: x.highestAlertSeverity,\n importance: x.importance,\n when: moment.utc(x.timestamp).format('LLL'),\n where: x.resourceSetFull\n ? x.resourceSetFull.map(y => y.account).join(', ')\n : x.resourceSet &&\n x.resourceSet.map(y => getAccountFromSrn(y)).join(', '),\n service:\n x.resourceSet &&\n x.resourceSet.map(y => y.split(':')[2]).join(', '),\n __typename: x.__typename,\n resourceSet: x.resourceSet,\n showActions: '',\n }\n return row\n })\n return rows || []\n } else {\n const rows = didAccessData.data.map(x => {\n const row = {\n what: x.resourceSetFull\n .map(\n resource =>\n resource.friendlyName ||\n resource.name ||\n _.last(resource.srn.split('/'))\n )\n .join(', '),\n how: x.actionClassification,\n highestAlertSeverity: x.highestAlertSeverity,\n importance: x.importance,\n when: moment.utc(x.timestamp).format('LLL'),\n where: x.resourceSetFull\n ? x.resourceSetFull.map(y => y.account).join(', ')\n : x.resourceSet &&\n x.resourceSet.map(y => getAccountFromSrn(y)).join(', '),\n service: x.resource.srn.split('/')[2],\n __typename: x.__typename,\n resourceSet: x.resourceSet,\n showActions: '',\n }\n return row\n })\n return rows || []\n }\n }\n return []\n }\n\n getHeader = count => {\n const { isLocked, title } = this.props\n const keyName = this.props.actionableByMode ? 'accessedBy' : 'accessed'\n\n return (\n
    \n
    \n \n {title}\n {count !== 0 && (\n \n (\n {count >= CRM_TABLE_MAX_SIZE ? `${CRM_TABLE_MAX_SIZE}+` : count}\n )\n \n )}\n \n \n
    \n
    \n )\n }\n\n handleRowDoubleClick = (srn, type) => {\n let nav = getNodeViewPushParams(srn, type)\n this.props.push(nav)\n }\n\n handleActionsModal = ({ resourceSet, how }) => {\n const { srn, path, date } = this.props\n this.props.getSelectedRowActions({\n data: {\n actionClassification: how,\n resourceSet,\n criticalResourceSRN: srn,\n },\n path,\n date,\n })\n }\n\n render() {\n const { title, isLoading } = this.props\n const didAccessData = this.getData(this.props.didAccessData)\n return (\n \n {this.getHeader(didAccessData.length)}\n \n 0 ? '300px' : '60px',\n }}\n sortColumnByType={\n this.props.actionableByMode ? 'DidAccessData' : 'DidAccessUser'\n }\n crm\n data={didAccessData}\n customColumnConfig={{\n showActions: {\n width: 120,\n minWidth: 120,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!params.data) {\n return null\n }\n\n return (\n this.handleActionsModal(params.data)}\n >\n Show Actions\n \n )\n },\n },\n }}\n />\n \n \n )\n }\n}\n\nDidAccessWidget.propTypes = {\n theme: themeShape,\n actionableByMode: PropTypes.bool,\n crmTickets: ImmutablePropTypes.list.isRequired,\n title: PropTypes.string,\n isLocked: PropTypes.bool,\n recalculateGrid: PropTypes.func,\n srn: PropTypes.string,\n date: PropTypes.string,\n didAccessData: PropTypes.object,\n isLoading: PropTypes.bool,\n push: PropTypes.func,\n getSelectedRowActions: PropTypes.func,\n path: PropTypes.string,\n}\n\nexport default themeable(DidAccessWidget)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport DataTable from 'components/DataTable'\nimport { TopTitle, CardBody } from 'components/Card'\nimport Card from 'components/Card'\nimport WidgetPopup from 'components/WidgetPopup'\nimport moment from 'moment'\nimport { exists } from 'utils/sonraiUtils'\nimport TextLink from 'components/TextLink'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nexport class AccessedUsingWidget extends Component {\n styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n marginRight: '0px',\n },\n card: {\n minHeight: 0,\n },\n }\n\n getData = accessedUsingData => {\n if (\n exists(accessedUsingData) &&\n exists(accessedUsingData.data) &&\n !_.isEmpty(accessedUsingData.data)\n ) {\n const rows = accessedUsingData.data.map(x => {\n const row = {\n timestamp: x.timestamp,\n userAgentSet: x.userAgentSet,\n showActions: '',\n }\n return row\n })\n\n return rows || []\n }\n return []\n }\n\n getHeader = () => {\n const { isLocked, title } = this.props\n const keyName = 'accessedUsing'\n\n return (\n
    \n
    \n \n {title}\n \n {this.props.isMonitored && (\n \n )}\n
    \n
    \n )\n }\n\n handleActionsModal = ({ userAgentSet, timestamp }) => {\n const { srn } = this.props\n this.props.getSelectedRowActions({\n data: {\n userAgentSet,\n criticalResourceSRN: srn,\n },\n path: this.props.path,\n date: {\n fromDate: moment.utc(timestamp).utc().startOf('day'),\n toDate: moment.utc(timestamp).utc().endOf('day'),\n },\n })\n }\n\n getContent = () => {\n const accessedUsingData = this.getData(this.props.accessedUsingData)\n const { isLoading } = this.props\n if (isLoading) {\n return (\n \n \n \n )\n }\n\n if (!this.props.isMonitored) {\n return this.props.renderCRMOverlay()\n } else {\n return (\n 0 ? '100%' : '60px' }}\n data={accessedUsingData}\n autosize={false}\n sortColumnByType=\"AccessedUsing\"\n customColumnConfig={{\n timestamp: {\n headerName: 'Day',\n valueFormatter: ({ value }) => moment.utc(value).format('ll'),\n },\n userAgentSet: {\n flex: 1,\n minWidth: 200,\n },\n showActions: {\n cellStyle: { padding: '0 7px' },\n width: 120,\n minWidth: 120,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!params.data) {\n return null\n }\n return (\n this.handleActionsModal(params.data)}\n >\n Show Actions\n \n )\n },\n },\n }}\n />\n )\n }\n }\n\n render() {\n return (\n \n {this.getHeader()}\n \n {this.getContent()}\n \n \n )\n }\n}\n\nAccessedUsingWidget.defaultProps = {\n // eslint-disable-next-line react/display-name\n renderCRMOverlay: () => {\n return (\n
    \n \n Results from this widget are only available if the resource is\n monitored.\n
    \n \n )\n },\n}\n\nAccessedUsingWidget.propTypes = {\n theme: themeShape,\n title: PropTypes.string,\n isLocked: PropTypes.bool,\n recalculateGrid: PropTypes.func,\n srn: PropTypes.string,\n crmTickets: ImmutablePropTypes.list.isRequired,\n accessedUsingData: PropTypes.object,\n isLoading: PropTypes.bool,\n getSelectedRowActions: PropTypes.func,\n path: PropTypes.string,\n isMonitored: PropTypes.bool,\n renderCRMOverlay: PropTypes.func,\n}\n\nexport default themeable(AccessedUsingWidget)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport TextLink from 'components/TextLink'\nimport DataTable from 'components/DataTable'\nimport { TopTitle, CardBody } from 'components/Card'\nimport Card from 'components/Card'\nimport WidgetPopup from 'components/WidgetPopup'\nimport { getAccountFromSrn, getNodeViewPushParams } from 'utils/sonraiUtils'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { exists } from 'utils/sonraiUtils'\nimport { CRM_TABLE_MAX_SIZE } from 'containers/AccessActivity/constants'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\n\nclass CanAccessWidget extends Component {\n styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n marginRight: '0px',\n },\n card: {\n minHeight: 0,\n display: 'grid',\n gridTemplateRows: '1fr',\n height: 'auto',\n overflow: 'hidden',\n justifyContent: 'inherit',\n alignItems: 'inherit',\n },\n }\n\n state = {\n showPathId: null,\n showPathClassification: null,\n }\n\n resourceOfResource = alertLog => {\n const { resourceSetFull } = alertLog\n if (!resourceSetFull) {\n // eslint-disable-next-line no-console\n console.warn(\n `alertLog ${JSON.stringify(alertLog)} has no resourceSetFull}`\n )\n return undefined\n }\n\n if (resourceSetFull.length == 0) {\n // eslint-disable-next-line no-console\n console.warn(\n `alertLog ${JSON.stringify(alertLog)} has empty resourceSetFull}`\n )\n return undefined\n }\n\n const resource = resourceSetFull[0]\n return resource\n }\n\n importanceOfResource = alertLog => {\n const resource = this.resourceOfResource(alertLog)\n if (!resource) {\n return ''\n }\n\n if (resource.importance) {\n return resource.importance\n }\n\n const swimlanes = _.get(resource, ['swimlane', 'items'])\n if (!swimlanes) {\n return ''\n }\n\n const maxImportance = swimlanes.reduce((max, current) => {\n return Math.max(current.defaultImportance, max)\n }, -1)\n return maxImportance > 0 ? maxImportance : ''\n }\n\n tagsOfResource = alertLog => {\n const resource = this.resourceOfResource(alertLog)\n if (!resource) {\n return ''\n }\n\n if (resource.tagSet) {\n return resource.tagSet.join(', ')\n } else {\n return ''\n }\n }\n\n swimlanesOfResource = alertLog => {\n const resource = this.resourceOfResource(alertLog)\n const swimlanes = _.get(resource, ['swimlane', 'items'])\n if (!swimlanes) {\n return ''\n }\n\n return swimlanes.map(swimlane => swimlane.title).join(', ')\n }\n\n getData = canAccessData => {\n if (\n exists(canAccessData) &&\n exists(canAccessData.data) &&\n !_.isEmpty(canAccessData.data)\n ) {\n if (true === _.get(canAccessData, ['data', 0, 'isSpecialAzureData'])) {\n return canAccessData.data.map(row => {\n return _.pick(row, [\n 'isSpecialAzureData',\n 'who',\n 'How',\n 'account',\n 'Service',\n 'Conditions',\n 'Swimlanes',\n 'Importance',\n 'Tags',\n 'action',\n 'srn',\n ])\n })\n }\n const resources = canAccessData.data.map(resource => ({\n ...resource,\n ...resource.resource,\n }))\n let rows = resources.map(resource => {\n if (resource) {\n const row = {\n [this.props.actionableByMode\n ? 'who'\n : 'what']: resource.resourceSetFull\n ? resource.resourceSetFull\n .map(\n resource =>\n resource.friendlyName ||\n resource.name ||\n _.last(resource.srn.split('/'))\n )\n .join(', ')\n : resource.resourceSet &&\n resource.resourceSet\n .map(resource => _.last(resource.split('/')))\n .join(', '),\n srn: resource.resourceSetFull\n ? resource.resourceSetFull\n .map(resource => resource.srn)\n .join(', ')\n : resource.resourceSet &&\n resource.resourceSet.map(resource => resource.srn).join(', '),\n how: resource.actionClassification,\n action: resource.resourceSet,\n highestAlertSeverity: resource.highestAlertSeverity,\n account: resource.resourceSetFull\n ? resource.resourceSetFull.map(y => y.account).join(', ')\n : resource.resourceSet &&\n resource.resourceSet.map(y => getAccountFromSrn(y)).join(', '),\n service:\n resource.resourceSet &&\n resource.resourceSet.map(x => x.split(':')[2]).join(', '),\n conditions: resource.conditions,\n swimlanes: this.swimlanesOfResource(resource),\n importance: this.importanceOfResource(resource),\n tags: this.tagsOfResource(resource),\n }\n return row\n }\n })\n\n rows = _.uniqBy(rows, row => {\n return `${this.props.actionableByMode ? row.who : row.what}${row.how}${\n row.account\n }${row.service}${row.conditions}`\n })\n\n rows = _.sortBy(rows, row =>\n this.props.actionableByMode ? row.who : row.what\n )\n\n return rows\n }\n\n return []\n }\n\n showPath = (resourceIds, actionClassification, conditions) => {\n //For now, assume only one resourceID per line\n this.props.onShowPath(resourceIds[0], actionClassification, conditions)\n }\n\n onShowPathFromList = (...args) => {\n this.props.onShowPathFromList(...args)\n }\n\n getHeader = count => {\n const { isLocked, title } = this.props\n\n const keyName = this.props.actionableByMode\n ? 'actionableBy'\n : 'hasPermissionTo'\n\n return (\n
    \n
    \n \n {title}{' '}\n {count !== 0 && (\n \n (\n {count >= CRM_TABLE_MAX_SIZE ? `${CRM_TABLE_MAX_SIZE}+` : count}\n )\n \n )}\n \n \n
    \n
    \n )\n }\n\n getContent = () => {\n const canAccessData = this.getData(this.props.canAccessData)\n\n const { isLoading, isMonitored } = this.props\n if (isLoading) {\n return (\n \n \n \n )\n }\n\n if (!isMonitored && !this.props.usesEP) {\n return this.props.renderCRMOverlay()\n } else {\n return (\n 0 ? '100%' : '60px',\n }}\n onDoubleClickRow={this.handleRowDoubleClick}\n sortColumns={true}\n sortColumnByType=\"CanAccess\"\n crm\n data={canAccessData}\n customColumnConfig={{\n isSpecialAzureData: {\n hide: true,\n },\n srn: {\n hide: true,\n },\n resourceSet: {\n valueFormatter: params => {\n return params.value.join(', ')\n },\n comparator: (valueA, valueB) => {\n //Assume only one result in resourceSet\n const first = _.get(valueA, 0) || ''\n const second = _.get(valueB, 0) || ''\n return first.localeCompare(second)\n },\n },\n action: {\n width: 120,\n minWidth: 120,\n pinned: 'right',\n headerName: '',\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!params.data) {\n return '' //It's a grouped row\n }\n\n return (\n {\n if (params.data.isSpecialAzureData) {\n this.onShowPathFromList({\n item: {\n srn: params.data.srn,\n path: JSON.stringify(params.value),\n conditions: params.data.conditions,\n },\n showPathClassification: params.data.how,\n })\n } else {\n this.showPath(\n params.value,\n params.data.how,\n params.data.conditions\n )\n }\n }}\n >\n Show Path\n \n )\n },\n },\n }}\n />\n )\n }\n }\n\n handleRowDoubleClick = params => {\n let nav = getNodeViewPushParams(params.srn, getTypeFromSrn(params.srn))\n this.props.push(nav)\n }\n\n render() {\n const canAccessData = this.getData(this.props.canAccessData)\n\n return (\n \n {this.getHeader(canAccessData.length)}\n {this.getContent()}\n \n )\n }\n}\n\nCanAccessWidget.defaultProps = {\n // eslint-disable-next-line react/display-name\n renderCRMOverlay: () => {\n return (\n
    \n \n Results from this widget are only available if the resource is\n monitored.\n
    \n \n )\n },\n}\n\nCanAccessWidget.propTypes = {\n actionableByMode: PropTypes.bool,\n canAccessData: PropTypes.object,\n crmTickets: ImmutablePropTypes.list.isRequired,\n isLoading: PropTypes.bool,\n isLocked: PropTypes.bool,\n isMonitored: PropTypes.bool,\n onShowPath: PropTypes.func.isRequired,\n onShowPathFromList: PropTypes.func,\n push: PropTypes.func,\n recalculateGrid: PropTypes.func,\n renderCRMOverlay: PropTypes.func,\n srn: PropTypes.string,\n theme: themeShape,\n title: PropTypes.string,\n usesEP: PropTypes.bool,\n}\n\nexport default themeable(CanAccessWidget)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { TopTitle, CardBody } from 'components/Card'\nimport Card from 'components/Card'\nimport WidgetPopup from 'components/WidgetPopup'\nimport moment from 'moment'\nimport DataTable from 'components/DataTable'\nimport { exists } from 'utils/sonraiUtils'\nimport TextLink from 'components/TextLink'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nclass ActivityFromRegions extends Component {\n styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n },\n }\n\n getData = activityData => {\n if (\n exists(activityData) &&\n exists(activityData.data) &&\n !_.isEmpty(activityData.data)\n ) {\n const rows = activityData.data.map(resource => {\n const row = {\n timestamp: resource.timestamp,\n from: resource.regionSet,\n showActions: '',\n }\n return row\n })\n return rows\n }\n return []\n }\n\n handleActionsModal = ({ from, timestamp }) => {\n const { srn, path } = this.props\n this.props.getSelectedRowActions({\n data: {\n regionSet: from,\n criticalResourceSRN: srn,\n },\n path,\n date: {\n fromDate: moment(timestamp).utc().startOf('day'),\n toDate: moment(timestamp).utc().endOf('day'),\n },\n })\n }\n\n getHeader = () => {\n const { isLocked, title } = this.props\n const keyName = this.props.actionableByMode ? 'accessedFrom' : 'activeFrom'\n\n //TODO: support resourceSrn as a filter in tickets page\n return (\n
    \n
    \n {title}\n {this.props.isMonitored && (\n \n )}\n
    \n
    \n )\n }\n\n getContent = () => {\n const activityData = this.getData(this.props.activityWidget)\n const { isLoading } = this.props\n if (isLoading) {\n return (\n \n \n \n )\n }\n\n if (!this.props.isMonitored) {\n return this.props.renderCRMOverlay()\n } else {\n return (\n 0 ? '100%' : '60px',\n width: '100%',\n }}\n sortColumns\n sortColumnByType=\"ActivityFromRegions\"\n autosize={false}\n customColumnConfig={{\n resource: {\n hide: true,\n },\n timestamp: {\n headerName: 'Day',\n valueFormatter: ({ value }) => moment(value).format('ll'),\n },\n from: {\n flex: 1,\n minWidth: 200,\n },\n showActions: {\n cellStyle: { padding: '0 7px' },\n width: 110,\n minWidth: 110,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!params.data) {\n return null\n }\n return (\n this.handleActionsModal(params.data)}\n >\n Show Actions\n \n )\n },\n },\n }}\n />\n )\n }\n }\n\n render() {\n return (\n \n {this.getHeader()}\n \n {this.getContent()}\n \n \n )\n }\n}\n\nActivityFromRegions.defaultProps = {\n // eslint-disable-next-line react/display-name\n renderCRMOverlay: () => {\n return (\n
    \n \n Results from this widget are only available if the resource is\n monitored.\n
    \n \n )\n },\n}\n\nActivityFromRegions.propTypes = {\n crmTickets: ImmutablePropTypes.list.isRequired,\n theme: themeShape,\n actionableByMode: PropTypes.bool,\n title: PropTypes.string,\n srn: PropTypes.string,\n isLocked: PropTypes.bool,\n recalculateGrid: PropTypes.func,\n activityWidget: PropTypes.object,\n isLoading: PropTypes.bool,\n getSelectedRowActions: PropTypes.func,\n path: PropTypes.string,\n isMonitored: PropTypes.bool,\n renderCRMOverlay: PropTypes.func,\n}\n\nexport default themeable(ActivityFromRegions)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport BorderedCard from 'components/BorderedCard'\nimport WidgetPopup from 'components/WidgetPopup'\nimport { getMappedBoolLabel } from 'utils/widgetUtils'\nimport { exists } from 'utils/sonraiUtils'\nclass PropertiesWidget extends Component {\n styles = {\n header: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n },\n title: {\n fontSize: '22px',\n marginRight: '0.5rem',\n display: 'inline-flex',\n },\n loading: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n propertiesContainer: {\n display: 'flex',\n flexWrap: 'wrap',\n padding: '0.5rem 0.25rem',\n position: 'relative',\n alignItems: 'flex-start',\n height: 'calc(100% - 55px)',\n },\n key: {\n fontSize: '0.95rem',\n fontWeight: '400',\n color: '#FFF',\n },\n code: {\n fontFamily: 'monospace',\n fontSize: '1.1rem',\n },\n }\n\n componentDidUpdate() {\n if (this.props.recalculateGrid) {\n setTimeout(this.props.recalculateGrid, 100)\n }\n }\n\n getProperties = () => {\n if (!this.props.propertyWidget.isEmpty()) {\n if (\n exists(this.props.propertyWidget.get('data')) &&\n !this.props.propertyWidget.isEmpty()\n ) {\n return this.props.propertyWidget\n .get('data')\n .sort((a, b) => a.get('keyName').localeCompare(b.get('keyName')))\n .map((property, i) => {\n const label = getMappedBoolLabel(\n property.get('keyName'),\n property.get('currentValue')\n )\n if (exists(label)) {\n return (\n
    \n {label}
    ,\n keyName: property.get('keyName'),\n currentValue: property.get('currentValue'),\n }}\n color=\"#FFF\"\n isLocked={this.props.changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes(property.get('keyName'))}\n />\n \n )\n }\n })\n }\n }\n }\n\n render() {\n const properties = this.getProperties()\n return (\n \n
    \n
    Attributes
    \n
    \n
    {properties}
    \n \n )\n }\n}\n\nPropertiesWidget.propTypes = {\n changeDetectionProperties: PropTypes.object,\n crmTickets: ImmutablePropTypes.list.isRequired,\n srn: PropTypes.string,\n recalculateGrid: PropTypes.func,\n propertyWidget: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default PropertiesWidget\n","/*\n *\n * Access Activity reducer\n *\n */\n\nimport { fromJS } from 'immutable'\nimport moment from 'moment'\nimport _ from 'lodash'\nimport {\n SET_CRITICAL_RESOURCE_MONITOR_DATE,\n SET_PROPERTY_WIDGET_DATA,\n GET_PROPERTY_WIDGET_DATA,\n GET_DID_ACCESS_DATA,\n SET_DID_ACCESS_DATA,\n GET_CAN_ACCESS_DATA,\n SET_CAN_ACCESS_DATA,\n GET_ACCESSED_USING_DATA,\n SET_ACCESSED_USING_DATA,\n GET_ACTIVITY_WIDGET_DATA,\n SET_ACTIVITY_WIDGET_DATA,\n GET_SELECTED_ROW_ACTIONS,\n SET_SELECTED_ROW_ACTIONS,\n TOGGLE_ACTIONS_MODAL,\n GET_CAN_ACCESS_PATH,\n SET_CAN_ACCESS_PATH,\n GET_EP_PATHS,\n ERR_EP_PATHS,\n SET_LAST_CAN_ACCESS_JOB_TIMESTAMP,\n} from './constants'\nimport { handleActions } from 'redux-actions'\nimport { exists } from 'utils/sonraiUtils'\n\nexport const initialState = fromJS({\n activityWidget: {\n data: null,\n isLoading: false,\n },\n accessedUsing: {\n data: null,\n isLoading: false,\n },\n canAccess: {\n data: null,\n isLoading: false,\n },\n didAccess: {\n data: null,\n isLoading: false,\n },\n propertyWidget: {\n data: null,\n isLoading: false,\n },\n lastCanAccessJobTimestamp: null,\n selectedRowActions: null,\n selectedRowActionsLoading: false,\n actionsModal: false,\n canAccessPaths: {},\n canAccessPathLoading: true,\n canAccessPathsError: false,\n}).set('date', {\n fromDate: moment().subtract(1, 'days').startOf('day'),\n toDate: moment().endOf('day'),\n})\n\nconst accessActivityReducer = handleActions(\n {\n [SET_CRITICAL_RESOURCE_MONITOR_DATE]: (state, { payload }) => {\n return state.set('date', payload)\n },\n [GET_PROPERTY_WIDGET_DATA]: state =>\n state.setIn(['propertyWidget', 'isLoading'], true),\n [SET_PROPERTY_WIDGET_DATA]: (state, { payload }) => {\n return state\n .setIn(['propertyWidget', 'data'], fromJS(payload))\n .setIn(['propertyWidget', 'isLoading'], false)\n },\n [GET_DID_ACCESS_DATA]: state =>\n state.setIn(['didAccess', 'isLoading'], true),\n [SET_DID_ACCESS_DATA]: (state, { payload }) => {\n return state\n .setIn(['didAccess', 'data'], fromJS(payload))\n .setIn(['didAccess', 'isLoading'], false)\n },\n [GET_CAN_ACCESS_DATA]: state =>\n state.setIn(['canAccess', 'isLoading'], true),\n [SET_CAN_ACCESS_DATA]: (state, { payload }) => {\n return state\n .setIn(['canAccess', 'data'], fromJS(payload))\n .setIn(['canAccess', 'isLoading'], false)\n },\n [GET_ACCESSED_USING_DATA]: state =>\n state.setIn(['accessedUsing', 'isLoading'], true),\n [SET_ACCESSED_USING_DATA]: (state, { payload }) => {\n return state\n .setIn(['accessedUsing', 'data'], fromJS(payload))\n .setIn(['accessedUsing', 'isLoading'], false)\n },\n [GET_ACTIVITY_WIDGET_DATA]: state =>\n state.setIn(['activityWidget', 'isLoading'], true),\n [SET_ACTIVITY_WIDGET_DATA]: (state, { payload }) => {\n return state\n .setIn(['activityWidget', 'data'], fromJS(payload))\n .setIn(['activityWidget', 'isLoading'], false)\n },\n [TOGGLE_ACTIONS_MODAL]: state =>\n state.set('actionsModal', !state.get('actionsModal')),\n [GET_SELECTED_ROW_ACTIONS]: state =>\n state.set('actionsModal', true).set('selectedRowActionsLoading', true),\n [SET_SELECTED_ROW_ACTIONS]: (state, { payload }) => {\n return state\n .set('selectedRowActions', fromJS(payload))\n .set('selectedRowActionsLoading', false)\n },\n [GET_CAN_ACCESS_PATH]: state =>\n state.set('canAccessPathLoading', true).set('canAccessPathError', false),\n [GET_EP_PATHS]: state =>\n state.set('canAccessPathLoading', true).set('canAccessPathError', false),\n [ERR_EP_PATHS]: state =>\n state.set('canAccessPathLoading', false).set('canAccessPathError', true),\n [SET_CAN_ACCESS_PATH]: (state, { payload }) => {\n return state\n .set('canAccessPathLoading', false)\n .set('canAccessPathError', false)\n .setIn(\n [\n 'canAccessPaths',\n payload.srn,\n payload.actionClassification,\n payload.fromDate,\n payload.conditions,\n ],\n fromJS(payload.paths)\n )\n },\n [SET_LAST_CAN_ACCESS_JOB_TIMESTAMP]: (state, { payload }) => {\n return state.set('lastCanAccessJobTimestamp', payload)\n },\n },\n initialState\n)\n\nexport default accessActivityReducer\n","import {\n SET_CRITICAL_RESOURCE_MONITOR_DATE,\n GET_PROPERTY_WIDGET_DATA,\n SET_PROPERTY_WIDGET_DATA,\n GET_DID_ACCESS_DATA,\n SET_DID_ACCESS_DATA,\n GET_CAN_ACCESS_DATA,\n SET_CAN_ACCESS_DATA,\n GET_ACCESSED_USING_DATA,\n SET_ACCESSED_USING_DATA,\n GET_ACTIVITY_WIDGET_DATA,\n SET_ACTIVITY_WIDGET_DATA,\n GET_SELECTED_ROW_ACTIONS,\n SET_SELECTED_ROW_ACTIONS,\n TOGGLE_ACTIONS_MODAL,\n GET_CAN_ACCESS_PATH,\n SET_CAN_ACCESS_PATH,\n GET_EP_PATHS,\n ERR_EP_PATHS,\n SET_LAST_CAN_ACCESS_JOB_TIMESTAMP,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const setCriticalResourceMonitorDate = createAction(\n SET_CRITICAL_RESOURCE_MONITOR_DATE\n)\n\nexport const getPropertyWidgetData = createAction(GET_PROPERTY_WIDGET_DATA)\n\nexport const setPropertyWidgetData = createAction(SET_PROPERTY_WIDGET_DATA)\n\nexport const getDidAccessData = createAction(GET_DID_ACCESS_DATA)\nexport const setDidAccessData = createAction(SET_DID_ACCESS_DATA)\n\nexport const getCanAccessData = createAction(GET_CAN_ACCESS_DATA)\nexport const setCanAccessData = createAction(SET_CAN_ACCESS_DATA)\n\nexport const getAccessedUsingData = createAction(GET_ACCESSED_USING_DATA)\nexport const setAccessedUsingData = createAction(SET_ACCESSED_USING_DATA)\n\nexport const getActivityWidgetData = createAction(GET_ACTIVITY_WIDGET_DATA)\nexport const setActivityWidgetData = createAction(SET_ACTIVITY_WIDGET_DATA)\n\nexport const getSelectedRowActions = createAction(GET_SELECTED_ROW_ACTIONS)\nexport const setSelectedRowActions = createAction(SET_SELECTED_ROW_ACTIONS)\nexport const toggleActionsModal = createAction(TOGGLE_ACTIONS_MODAL)\n\nexport const getCanAccessPath = createAction(GET_CAN_ACCESS_PATH)\nexport const setCanAccessPath = createAction(SET_CAN_ACCESS_PATH)\n\nexport const getEPPaths = createAction(GET_EP_PATHS)\nexport const errEPPaths = createAction(ERR_EP_PATHS)\n\nexport const setLastCanAccessJobTimestamp = createAction(\n SET_LAST_CAN_ACCESS_JOB_TIMESTAMP\n)\n","import { all, takeLatest, put, call, select } from 'redux-saga/effects'\nimport _ from 'lodash'\nimport {\n setPropertyWidgetData,\n setDidAccessData,\n setCanAccessData,\n setAccessedUsingData,\n setActivityWidgetData,\n setSelectedRowActions,\n setCanAccessPath,\n errEPPaths,\n setLastCanAccessJobTimestamp,\n} from './actions'\n\nimport { selectLastCanAccessJobTimestamp } from './selectors'\nimport {\n GET_PROPERTY_WIDGET_DATA,\n GET_DID_ACCESS_DATA,\n GET_CAN_ACCESS_DATA,\n GET_ACCESSED_USING_DATA,\n GET_ACTIVITY_WIDGET_DATA,\n GET_SELECTED_ROW_ACTIONS,\n GET_CAN_ACCESS_PATH,\n GET_EP_PATHS,\n} from './constants'\nimport {\n GET_PROPERTIES_WIDGET,\n GET_DID_ACCESS_WIDGET,\n GET_CAN_ACCESS_WIDGET,\n GET_CAN_ACCESS_PATHS,\n GET_ACCESSED_USING_WIDGET_RESOURCE_SET,\n GET_ACCESSED_USING_WIDGET_CRITICAL_RESOURCE_SRN,\n GET_ACTIVITY_WIDGET,\n GET_ACCESSED_ACTIONS,\n GET_ACCESSED_BY_ACTIONS,\n GET_ACTIVE_FROM_ACTIONS,\n GET_ACCESSED_FROM_ACTIONS,\n GET_ACCESSED_USING_ACTIONS,\n GET_WAS_ACCESSED_USING_ACTIONS,\n} from 'static-queries'\nimport gql from 'graphql-tag'\nimport { getClient } from 'apolloClient'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { srnIsCRMActionable } from 'utils/widgetUtils'\nimport {\n selectQueryTypes,\n selectSwimlanes,\n} from 'containers/SonraiData/selectors'\n\nimport moment from 'moment'\nfunction* getPropertyWidget(action) {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n ${GET_PROPERTIES_WIDGET}\n `,\n variables: {\n srn: action.payload,\n },\n })\n const properties = response.data.getMonitoredProperties\n yield put(setPropertyWidgetData(properties))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting property data', e)\n }\n}\n\nfunction* getDidAccess(action) {\n const { srn, fromDate, toDate, keyName } = action.payload\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n ${GET_DID_ACCESS_WIDGET}\n `,\n variables: {\n srn,\n toDate: parseInt(toDate),\n fromDate: parseInt(fromDate),\n keyName,\n },\n })\n yield put(setDidAccessData(response.data.AlertLogs.items))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting did access data', e)\n }\n}\n\nconst CAN_ACCESS_FROM_EP_GCP = gql`\n query getCanAccessFromEPGCP($resourceId: String) {\n Actors(\n where: {\n and: [{ and: [{ active: { op: EQ, value: true } }] }, {}, {}]\n hasEffectivePermissions: {\n includes: [\n {\n gcpResource: { op: EQ, value: $resourceId, caseSensitive: false }\n }\n ]\n }\n }\n ) {\n items {\n hasEffectivePermissions(\n distinct: [\n permission\n policySrn\n permissionActionClassifications\n policyEntryConditions\n identityChain\n ]\n where: {\n includes: [\n {\n gcpResource: {\n op: EQ\n value: $resourceId\n caseSensitive: false\n }\n }\n ]\n }\n ) {\n items {\n permission\n policySrn\n permissionActionClassifications\n policyEntryConditions\n identityChain\n }\n }\n Who: name\n Where: account\n Service: serviceType\n highestAlertSeverity\n srn\n ... on Resource {\n swimlane {\n items {\n title\n defaultImportance\n }\n }\n }\n importance\n tagSet\n }\n }\n }\n`\n\nconst CAN_ACCESS_FROM_EP = gql`\n query getCanAccessFromEP($srn: String) {\n Actors(\n where: {\n and: [{ and: [{ active: { op: EQ, value: true } }] }, {}, {}]\n hasEffectivePermissions: {\n includes: [\n { azureResource: { op: EQ, value: $srn, caseSensitive: false } }\n ]\n }\n }\n ) {\n items {\n hasEffectivePermissions(\n distinct: [\n permission\n policySrn\n permissionActionClassifications\n policyEntryConditions\n identityChain\n ]\n where: {\n includes: [\n { azureResource: { op: EQ, value: $srn, caseSensitive: false } }\n ]\n }\n ) {\n items {\n permission\n policySrn\n permissionActionClassifications\n policyEntryConditions\n identityChain\n }\n }\n Who: name\n Where: account\n Service: serviceType\n highestAlertSeverity\n srn\n ... on Resource {\n swimlane {\n items {\n title\n defaultImportance\n }\n }\n }\n importance\n tagSet\n }\n }\n }\n`\n\nfunction* getTypesForAzureData(action) {\n const { srn, resourceId } = action.payload\n const type = getTypeFromSrn(srn)\n if (!type) {\n // eslint-disable-next-line no-console\n console.warn('could not get the type from the srn: ' + srn)\n return\n }\n const queryTypes = yield select(selectQueryTypes)\n const possibleDataTypes = queryTypes.getIn(['Data', 'possibleTypes'], null)\n if (possibleDataTypes === null) {\n // eslint-disable-next-line no-console\n console.warn('could not get Data.possibleTypes from queryTypes')\n return\n }\n\n const lowercaseType = type.toLowerCase()\n const dataType = possibleDataTypes.find(\n pt => lowercaseType === pt.get('name').toLowerCase()\n )\n\n if (!dataType) {\n // this is an OK scenario, it just means the thing is Azure but not data\n return\n }\n\n const client = yield getClient()\n\n let response\n const isGCPNode = srn && srn.includes('gcp')\n if (isGCPNode && resourceId) {\n response = yield client.query({\n query: CAN_ACCESS_FROM_EP_GCP,\n variables: { resourceId },\n })\n } else {\n response = yield client.query({\n query: CAN_ACCESS_FROM_EP,\n variables: { srn: resourceId }, // <-- not a typo\n })\n }\n\n const results = []\n\n const path = ['data', 'Actors', 'items']\n const actors = _.get(response, path, null)\n if (path === null) {\n throw 'The response did not have ' + path.join('/')\n }\n\n const allSwimlanes = yield select(selectSwimlanes)\n const swimlanesSrnToName = {}\n if (!allSwimlanes) {\n // eslint-disable-next-line no-console\n console.warn('no swimlanes')\n } else {\n for (let swimlane of allSwimlanes) {\n swimlanesSrnToName[swimlane.srn] = swimlane.name\n }\n }\n\n for (let actor of actors) {\n const {\n Who: who,\n Where: where,\n Service,\n tagSet: Tags,\n swimlane,\n importance,\n srn,\n } = actor\n const eps = _.get(actor, ['hasEffectivePermissions', 'items'], null)\n if (eps === null) {\n // eslint-disable-next-line no-console\n console.warn('actor has null eps ', actor)\n }\n\n const alreadyfoundHows = []\n for (let ep of eps) {\n const {\n policyEntryConditions: Conditions,\n permissionActionClassifications: How,\n identityChain,\n policySrn,\n } = ep\n\n const path = identityChain.split(',')\n path.push(policySrn)\n\n if (!alreadyfoundHows.includes(How)) {\n results.push({\n srn,\n isSpecialAzureData: true,\n who,\n How,\n where,\n Service,\n action: path,\n Conditions: Conditions != '' ? Conditions : '[]',\n Swimlanes: _.get(swimlane, ['items'], []).map(sw => sw.title),\n Importance: importance\n ? importance\n : _.get(swimlane, ['items'], []).reduce(\n (acc, curr) => Math.max(acc, curr.defaultImportance),\n 0\n ),\n Tags,\n })\n alreadyfoundHows.push(How)\n }\n }\n }\n\n return results\n}\n\nfunction* getCanAccess(action) {\n const { srn, cloudType, fromDate, toDate, keyName } = action.payload\n try {\n if ('azure' === cloudType || 'gcp' === cloudType) {\n const azureDataCanAccess = yield getTypesForAzureData(action)\n if (azureDataCanAccess) {\n yield put(setCanAccessData(azureDataCanAccess))\n return\n }\n }\n\n const fromDateSeven = moment.unix(toDate).subtract(7, 'days')\n let momentFromDate = moment.unix(fromDate)\n\n if (fromDateSeven.isBefore(momentFromDate)) {\n momentFromDate = fromDateSeven\n }\n\n const client = getClient()\n\n const lastRunTimestampResponse = yield client.query({\n query: gql`\n query getMostRecentCanAccessAlertLog(\n $srn: String\n $fromDate: DateTime\n $toDate: DateTime\n $keyName: String\n ) {\n AlertLogs(\n where: {\n timestamp: { op: BETWEEN, values: [$fromDate, $toDate] }\n criticalResourceSRN: { value: $srn }\n keyName: { value: $keyName }\n }\n ) {\n items(limit: 1, orderBy: [{ timestamp: { order: DESC } }]) {\n timestamp\n }\n }\n }\n `,\n variables: {\n srn,\n toDate: moment.unix(toDate).toISOString(),\n fromDate: momentFromDate.toISOString(),\n keyName,\n },\n })\n\n if (!lastRunTimestampResponse.data) {\n throw new Error(\n `Error fetching last Can Access data: ${lastRunTimestampResponse.errors}`\n )\n }\n\n if (lastRunTimestampResponse.data.AlertLogs.items.length === 0) {\n yield put(setCanAccessData([]))\n return\n }\n\n const timestamp = lastRunTimestampResponse.data.AlertLogs.items[0].timestamp\n const lastTimestamp = moment(timestamp).toISOString()\n\n yield put(setLastCanAccessJobTimestamp(lastTimestamp))\n\n const response = yield client.query({\n query: gql`\n ${GET_CAN_ACCESS_WIDGET}\n `,\n variables: {\n srn,\n toDate: lastTimestamp,\n fromDate: lastTimestamp,\n keyName,\n },\n })\n\n const parsedData = response.data.AlertLogs.items.map(crmData => {\n if (typeof crmData.path === 'string') {\n crmData.path = JSON.parse(crmData.path)\n }\n\n return crmData\n })\n\n yield put(setCanAccessData(parsedData))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting can access data', e)\n }\n}\n\nfunction* getCanAccessPaths(action) {\n let {\n srn,\n fromDate,\n toDate,\n keyName,\n resourceId,\n actionClassification,\n conditions,\n } = action.payload\n\n const lastRunTimestamp = yield select(selectLastCanAccessJobTimestamp)\n if (lastRunTimestamp) {\n fromDate = lastRunTimestamp\n toDate = lastRunTimestamp\n }\n\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n ${GET_CAN_ACCESS_PATHS}\n `,\n variables: {\n srn,\n conditions,\n fromDate,\n toDate,\n keyName,\n resourceId,\n actionClassification,\n },\n })\n\n const parsedData = response.data.AlertLogs.items.map(crmData => {\n let path = crmData.path\n if (typeof crmData.path === 'string') {\n path = JSON.parse(crmData.path)\n }\n\n return path\n })\n\n yield put(\n setCanAccessPath({\n srn: resourceId,\n actionClassification: actionClassification,\n paths: parsedData,\n fromDate: action.payload.fromDate,\n conditions,\n })\n )\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting can access paths', e)\n }\n}\n\nfunction* getAccessedUsing(action) {\n const { srn, fromDate, toDate } = action.payload\n if (srnIsCRMActionable(srn)) {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n ${GET_ACCESSED_USING_WIDGET_RESOURCE_SET}\n `,\n variables: {\n srn,\n fromDate: parseInt(fromDate),\n toDate: parseInt(toDate),\n },\n })\n yield put(setAccessedUsingData(response.data.AlertLogs.items))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting accessed using data', e)\n }\n } else {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n ${GET_ACCESSED_USING_WIDGET_CRITICAL_RESOURCE_SRN}\n `,\n variables: {\n srn,\n fromDate: parseInt(fromDate),\n toDate: parseInt(toDate),\n },\n })\n yield put(setAccessedUsingData(response.data.AlertLogs.items))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting accessed using data', e)\n }\n }\n}\n\nfunction* getActivityWidget(action) {\n const { srn, fromDate, toDate, keyName } = action.payload\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n ${GET_ACTIVITY_WIDGET}\n `,\n variables: {\n srn,\n toDate: parseInt(toDate),\n fromDate: parseInt(fromDate),\n keyName,\n },\n })\n yield put(setActivityWidgetData(response.data.AlertLogs.items))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting activity regions data', e)\n }\n}\n\nfunction* getActions(action) {\n const { data, date, path } = action.payload\n const dates = {\n fromDate: date.fromDate\n ? moment.utc(moment(date.fromDate).format('MMM D YYYY')).format('X')\n : moment.utc(moment().format('MMM D YYYY')).format('X'),\n toDate:\n moment\n .utc(date || moment().format('MMM D YYYY'))\n .add(1, 'days')\n .format('X') - 1,\n }\n\n switch (path) {\n case 'accessed':\n yield call(getAccessedActions, data, dates)\n break\n case 'accessedBy':\n yield call(getAccessedByActions, data, dates)\n break\n case 'activeFrom':\n yield call(getActiveFromActions, data, dates)\n break\n case 'accessedFrom':\n yield call(getAccessedFromActions, data, dates)\n break\n case 'accessedUsing':\n yield call(getAccessedUsingActions, data, dates)\n break\n case 'wasAccessedUsing':\n yield call(getWasAccessedUsingActions, data, dates)\n break\n default:\n return\n }\n}\n\nfunction* getAccessedActions(data, dates) {\n const { fromDate, toDate } = dates\n const { criticalResourceSRN, actionClassification, resourceSet } = data\n const performedOnValue = resourceSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_ACCESSED_ACTIONS}\n `,\n variables: {\n fromDate: parseInt(fromDate),\n toDate: parseInt(toDate),\n criticalResourceSRN,\n actionClassification,\n performedOnValue,\n },\n })\n yield put(setSelectedRowActions(response.data.Actions.items))\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getAccessedByActions(data, dates) {\n const { fromDate, toDate } = dates\n const { criticalResourceSRN, actionClassification, resourceSet } = data\n const performedByValue = resourceSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_ACCESSED_BY_ACTIONS}\n `,\n variables: {\n fromDate: parseInt(fromDate),\n toDate: parseInt(toDate),\n criticalResourceSRN,\n actionClassification,\n performedByValue,\n },\n })\n yield put(setSelectedRowActions(response.data.Actions.items))\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getActiveFromActions(data, dates) {\n const { fromDate, toDate } = dates\n const { criticalResourceSRN, regionSet } = data\n const countryValue = regionSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_ACTIVE_FROM_ACTIONS}\n `,\n variables: {\n fromDate: parseInt(fromDate),\n toDate: parseInt(toDate),\n criticalResourceSRN,\n countryValue,\n },\n })\n yield put(setSelectedRowActions(response.data.Actions.items))\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getAccessedFromActions(data, dates) {\n const { fromDate, toDate } = dates\n const { criticalResourceSRN, regionSet } = data\n const countryValue = regionSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_ACCESSED_FROM_ACTIONS}\n `,\n variables: {\n fromDate: parseInt(fromDate),\n toDate: parseInt(toDate),\n criticalResourceSRN,\n countryValue,\n },\n })\n yield put(setSelectedRowActions(response.data.Actions.items))\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getAccessedUsingActions(data, dates) {\n const { fromDate, toDate } = dates\n const { criticalResourceSRN, userAgentSet } = data\n const userValue = userAgentSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_ACCESSED_USING_ACTIONS}\n `,\n variables: {\n fromDate: parseInt(fromDate),\n toDate: parseInt(toDate),\n criticalResourceSRN,\n userValue,\n },\n })\n yield put(setSelectedRowActions(response.data.Actions.items))\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getWasAccessedUsingActions(data, dates) {\n const { fromDate, toDate } = dates\n const { criticalResourceSRN, userAgentSet } = data\n const userValue = userAgentSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_WAS_ACCESSED_USING_ACTIONS}\n `,\n variables: {\n fromDate: parseInt(fromDate),\n toDate: parseInt(toDate),\n criticalResourceSRN,\n userValue,\n },\n })\n yield put(setSelectedRowActions(response.data.Actions.items))\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getEffectivePermissionIdentityChains(action) {\n const client = yield getClient()\n const { epFilter: epFilterArg, srn } = action.payload\n const epFilter = _.mapValues(epFilterArg, arg => ({ value: arg }))\n try {\n const result = yield client.query({\n variables: {\n epFilter,\n srn,\n permissionSrn: epFilterArg.permissionSrn,\n },\n query: gql`\n query effectivePermChains(\n $srn: String\n $permissionSrn: String\n $epFilter: EffectivePermissionFilterType\n ) {\n Permissions(where: { srn: { value: $permissionSrn } }) {\n items {\n cloudType\n label\n name\n srn\n metadata\n }\n }\n Users(where: { srn: { value: $srn } }) {\n items {\n hasEffectivePermissions(where: { includes: [$epFilter] }) {\n items {\n identityChain\n permission\n permissionSrn\n permissionCloudType\n permissionActionClassifications\n permissionListLoadId\n permissionServiceType\n policySrn\n policyType\n policyVersionId\n policyEntryCloudType\n policyEntryLoadId\n policyEntryPrincipals\n policyEntryResourceFilter\n policyEntryConditions\n resourceAccount\n resourceFriendlyName\n resourceId\n resourceLabel\n resourceLoadId\n resourceSrn\n resourceCloud\n restriction\n activityCount\n identityChainDepth\n lastUsedDate\n }\n }\n }\n }\n }\n `,\n })\n\n const permission = _.get(result, ['data', 'Permissions', 'items', 0])\n const permissionSRN = (permission || {}).srn\n\n if (undefined === permissionSRN) {\n throw 'The result did not return permission SRN'\n }\n\n const eps = _.get(result, [\n 'data',\n 'Users',\n 'items',\n 0,\n 'hasEffectivePermissions',\n 'items',\n ])\n if (undefined === eps) {\n throw 'Rhe result did not return effective permissions'\n }\n\n const paths = _.uniq(\n eps.map(({ identityChain, policySrn }) => `${identityChain},${policySrn}`)\n ).map(it => it.split(','))\n\n const { actionClassification, fromDate, conditions } = action.payload\n\n action.payload.pathDataCallback({\n srn: permissionSRN,\n permission,\n })\n yield put(\n setCanAccessPath({\n srn: permissionSRN,\n fromDate,\n actionClassification,\n conditions,\n paths,\n })\n )\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\n `There was error fetching effective permission identity chain: ${e}`\n )\n yield put(errEPPaths())\n }\n}\n\nfunction* accessActivitySaga() {\n yield all([\n takeLatest(GET_PROPERTY_WIDGET_DATA, getPropertyWidget),\n takeLatest(GET_DID_ACCESS_DATA, getDidAccess),\n takeLatest(GET_CAN_ACCESS_DATA, getCanAccess),\n takeLatest(GET_ACCESSED_USING_DATA, getAccessedUsing),\n takeLatest(GET_ACTIVITY_WIDGET_DATA, getActivityWidget),\n takeLatest(GET_SELECTED_ROW_ACTIONS, getActions),\n takeLatest(GET_CAN_ACCESS_PATH, getCanAccessPaths),\n takeLatest(GET_EP_PATHS, getEffectivePermissionIdentityChains),\n ])\n}\n\nexport default accessActivitySaga\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\n/**\n * Direct selector to the Change Detection Manager state domain\n */\nconst selectChangeDetectionManagerDomain = state =>\n state.get('changeDetectionManager')\n\n/**\n * Other specific selectors\n */\n\n/**\n * Default selector used by Change Detection Manager\n */\n\nexport const selectChangeDetectionManager = createSelector(\n selectChangeDetectionManagerDomain,\n state => state || Map()\n)\n\nexport const selectIsLoading = createSelector(\n selectChangeDetectionManagerDomain,\n changeDetectionManager => {\n return changeDetectionManager.get('isLoading')\n }\n)\n\nexport const selectChangeDetectionOptions = createSelector(\n selectChangeDetectionManagerDomain,\n changeDetectionManager => {\n return changeDetectionManager.get('changeDetectionOptions') || List()\n }\n)\n\nexport const selectChangeDetectionProperties = createSelector(\n selectChangeDetectionManagerDomain,\n changeDetectionManager => {\n return changeDetectionManager.get('changeDetectionProperties') || List()\n }\n)\n\nexport default selectChangeDetectionManager\nexport { selectChangeDetectionManagerDomain }\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport DataTable from 'components/DataTable'\nimport TextLink from 'components/TextLink'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nclass UnderlyingActionsModal extends Component {\n render() {\n const {\n isOpen,\n toggle,\n selectedRowActions,\n selectedRowActionsLoading,\n } = this.props\n return (\n \n {this.props.title}\n \n {!selectedRowActionsLoading ? (\n 0 ? '300px' : '60px',\n }}\n onClickNodeView={this.props.onClickNodeView}\n data={selectedRowActions}\n />\n ) : (\n \n )}\n \n \n \n Close\n \n \n \n )\n }\n}\n\nUnderlyingActionsModal.propTypes = {\n toggle: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n selectedRowActions: ImmutablePropTypes.iterable,\n selectedRowActionsLoading: PropTypes.bool,\n onClickNodeView: PropTypes.func,\n title: PropTypes.string,\n}\n\nexport default UnderlyingActionsModal\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\nimport moment from 'moment'\nimport { List } from 'immutable'\nimport { DateRangePicker } from 'react-dates'\nimport { Responsive } from 'react-grid-layout'\nimport SizeMe from 'components/SizeMe'\nconst ResponsiveGridLayout = SizeMe(Responsive)\n\nimport DidAccessWidget from 'components/DidAccessWidget'\nimport AccessedUsingWidget from 'components/AccessedUsingWidget'\nimport CanAccessWidget from 'components/CanAccessWidget'\nimport ActivityFromRegions from 'components/ActivityFromRegions'\nimport PropertiesWidget from 'components/PropertiesWidget'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport injectSaga from 'utils/injectSaga'\nimport injectReducer from 'utils/injectReducer'\nimport { srnIsCRMActionable } from 'utils/widgetUtils'\nimport reducer from './reducers'\nimport saga from './sagas'\nimport {\n getNodeViewPushParams,\n exists,\n getNameFromSrn,\n} from 'utils/sonraiUtils'\nimport {\n setCriticalResourceMonitorDate,\n getPropertyWidgetData,\n getDidAccessData,\n getCanAccessData,\n getAccessedUsingData,\n getActivityWidgetData,\n getSelectedRowActions,\n toggleActionsModal,\n getCanAccessPath,\n setCanAccessPath,\n} from './actions'\nimport _ from 'lodash'\nimport {\n selectCriticalResourceMonitorDate,\n selectPropertyWidget,\n selectDidAccessData,\n selectCanAccessData,\n selectAccessedUsingData,\n selectActivityWidget,\n selectSelectedRowActions,\n selectActionsModal,\n selectSelectedRowActionsLoading,\n selectAccessPaths,\n selectCanAccessPaths,\n} from './selectors'\n\nimport { selectChangeDetectionProperties } from 'containers/ChangeDetectionManager/selectors'\n\nimport { initialState } from './reducers'\nimport ShowPathModal from './ShowPathModal'\nimport UnderlyingActionsModal from './UnderlyingActionsModal'\n\nimport 'react-dates/lib/css/_datepicker.css'\nimport './styles.css'\n\nconst style = {}\n\nconst getAllData = props => {\n const date = exists(props.date)\n ? props.date\n : exists(props.alertTime)\n ? {\n fromDate: moment.utc(parseInt(props.alertTime)).subtract(1, 'days'),\n toDate: moment.utc(parseInt(props.alertTime)),\n }\n : {\n fromDate: moment().subtract(1, 'days'),\n toDate: moment(),\n }\n\n const fromDate = date.fromDate.format('X')\n const toDate = date.toDate.format('X')\n\n const srn = props.nodeId\n\n props.getPropertyWidgetData(srn)\n props.getDidAccessData({\n srn,\n fromDate,\n toDate,\n keyName: srnIsCRMActionable(srn) ? 'accessedBy' : 'accessed',\n })\n props.getCanAccessData({\n srn,\n fromDate,\n toDate,\n keyName: srnIsCRMActionable(srn) ? 'actionableBy' : 'hasPermissionTo',\n })\n props.getAccessedUsingData({\n srn,\n fromDate,\n toDate,\n })\n props.getActivityWidgetData({\n srn,\n fromDate,\n toDate,\n keyName: srnIsCRMActionable(srn) ? 'accessedFrom' : 'activeFrom',\n })\n}\n\nclass AccessActivity extends React.Component {\n constructor(props) {\n super(props)\n\n getAllData(props)\n\n this.state = {\n showPathId: null,\n showPathClassification: null,\n }\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.date !== this.props.date) {\n getAllData(this.props)\n }\n }\n\n componentWillUnmount() {\n this.props.setCriticalResourceMonitorDate(initialState.get('date'))\n }\n\n navigateToNodeView = srn => {\n const nodeType = getTypeFromSrn(srn)\n this.props.push(getNodeViewPushParams(srn, nodeType))\n }\n\n onShowPath = (resourceId, classification, conditions) => {\n let fromDate\n let toDate\n\n if (exists(this.props.date)) {\n fromDate = this.props.date.fromDate.format('YYYY-MM-DD')\n toDate = this.props.date.toDate.format('YYYY-MM-DD')\n } else if (exists(this.props.alertTime)) {\n fromDate = moment\n .utc(parseInt(this.props.alertTime))\n .subtract(1, 'days')\n .format('YYYY-MM-DD')\n toDate = moment.utc(parseInt(this.props.alertTime)).format('YYYY-MM-DD')\n } else {\n fromDate = moment().subtract(1, 'days').format('YYYY-MM-DD')\n toDate = moment().format('YYYY-MM-DD')\n }\n\n if (\n !this.props.canAccessPaths.getIn([\n resourceId,\n classification,\n fromDate,\n conditions,\n ])\n ) {\n const actionableByMode = srnIsCRMActionable(this.props.nodeId)\n\n this.props.getCanAccessPath({\n resourceId: resourceId,\n actionClassification: classification,\n srn: this.props.nodeId,\n conditions: conditions,\n fromDate: fromDate,\n toDate: toDate,\n keyName: actionableByMode ? 'actionableBy' : 'hasPermissionTo',\n })\n }\n\n this.setState({\n showPathId: resourceId,\n showPathClassification: classification,\n showPathConditions: conditions,\n })\n }\n\n closeShowPath = () => {\n this.setState({\n showPathId: null,\n showPathClassification: null,\n showPathConditions: null,\n })\n }\n\n onDoubleClickPathNode = ({ nodes }) => {\n if (!_.isEmpty(nodes)) {\n const srn = _.first(nodes)\n if (srn && srn.startsWith('srn:')) {\n const { origin } = window.location\n const { pathname, search } = getNodeViewPushParams(\n srn,\n getTypeFromSrn(srn)\n )\n if (pathname && search) {\n const url = `${origin}${pathname}?${search}`\n window.open(url, '_blank')\n }\n }\n }\n }\n\n getModalTitle = () => {\n return 'Actions'\n }\n\n handleDatesChange = ({ startDate, endDate }) => {\n if (startDate && endDate) {\n this.props.setCriticalResourceMonitorDate({\n fromDate: startDate,\n toDate: endDate,\n })\n }\n }\n\n render() {\n const type = getTypeFromSrn(this.props.nodeId)\n const date = exists(this.props.date)\n ? this.props.date\n : exists(this.props.alertTime)\n ? {\n fromDate: moment\n .utc(parseInt(this.props.alertTime))\n .subtract(1, 'days'),\n toDate: moment.utc(parseInt(this.props.alertTime)),\n }\n : {\n fromDate: moment().subtract(1, 'days'),\n toDate: moment(),\n }\n\n const { fromDate, toDate } = date\n\n const actionableByMode = srnIsCRMActionable(this.props.nodeId)\n\n const changeDetectionProperties = this.props.changeDetectionProperties\n const hasDidAccess =\n this.props.didAccessData &&\n exists(this.props.didAccessData.get('data')) &&\n this.props.didAccessData.get('data').size > 0\n const hasActivityFromRegions =\n this.props.activityWidget &&\n exists(this.props.activityWidget.get('data')) &&\n this.props.activityWidget.get('data').size > 0\n const hasCanAccess =\n this.props.canAccessData &&\n exists(this.props.canAccessData.get('data')) &&\n this.props.canAccessData.get('data').size > 0\n const accessedUsing =\n this.props.accessedUsingData &&\n exists(this.props.accessedUsingData.get('data')) &&\n this.props.accessedUsingData.get('data').size > 0\n\n const rowHeight = 64\n const smallRowHeight = 2\n const propertiesHeight = type === 'User' ? 2 : 3\n const largeRowHeight = 5\n\n const layout2Col = [\n { x: 0, y: 0, w: 1, h: propertiesHeight, i: 'properties' },\n {\n x: 0,\n y: 1,\n w: 1,\n h: hasDidAccess ? largeRowHeight : smallRowHeight,\n i: 'didAccess',\n },\n {\n x: 0,\n y: 4,\n w: 1,\n h: hasActivityFromRegions ? largeRowHeight : smallRowHeight,\n i: 'activityFromRegions',\n },\n {\n x: 0,\n y: 7,\n w: 1,\n h: hasCanAccess ? largeRowHeight : smallRowHeight,\n i: 'canAccess',\n },\n {\n x: 0,\n y: 10,\n w: 1,\n h: accessedUsing ? largeRowHeight : smallRowHeight,\n i: 'accessedUsing',\n },\n ]\n\n const layout1Col = [\n { x: 0, y: 0, w: 1, h: propertiesHeight, i: 'properties' },\n {\n x: 0,\n y: 1,\n w: 1,\n h: hasDidAccess ? largeRowHeight : smallRowHeight,\n i: 'didAccess',\n },\n {\n x: 0,\n y: 3,\n w: 1,\n h: hasActivityFromRegions ? largeRowHeight : smallRowHeight,\n i: 'activityFromRegions',\n },\n {\n x: 0,\n y: 5,\n w: 1,\n h: hasCanAccess ? largeRowHeight : smallRowHeight,\n i: 'canAccess',\n },\n {\n x: 0,\n y: 7,\n w: 1,\n h: accessedUsing ? largeRowHeight : smallRowHeight,\n i: 'accessedUsing',\n },\n ]\n\n return (\n
    \n \n this.setState({ focusedInput })}\n onDatesChange={this.handleDatesChange}\n isOutsideRange={date => moment(date).isAfter(moment())}\n displayFormat={'MMMM D YYYY'}\n />\n
    \n \n \n \n
    \n \n
    \n
    \n x.get('keyName'))\n .includes('accessed') ||\n changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes('accessedBy')\n }\n date={date}\n type={type}\n didAccessData={this.props.didAccessData.toJS()}\n isLoading={this.props.didAccessData.get('isLoading')}\n title={actionableByMode ? 'Who & What Did Access' : 'Did Access'}\n actionableByMode={actionableByMode}\n path={actionableByMode ? 'accessedBy' : 'accessed'}\n />\n
    \n
    \n x.get('keyName'))\n .includes('activeFrom') ||\n changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes('accessedFrom')\n }\n title={\n actionableByMode ? 'Accessed From Region' : 'Active From Region'\n }\n srn={this.props.nodeId}\n activityWidget={this.props.activityWidget.toJS()}\n isLoading={this.props.activityWidget.get('isLoading')}\n actionableByMode={actionableByMode}\n path={actionableByMode ? 'accessedFrom' : 'activeFrom'}\n />\n
    \n
    \n x.get('keyName'))\n .includes('hasPermissionTo') ||\n changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes('actionableBy')\n }\n title={actionableByMode ? 'Who & What Can Access' : 'Can Access'}\n canAccessData={this.props.canAccessData.toJS()}\n isLoading={this.props.canAccessData.get('isLoading')}\n onShowPath={this.onShowPath}\n actionableByMode={actionableByMode}\n />\n
    \n
    \n x.get('keyName'))\n .includes('accessedUsing')}\n type={type}\n accessedUsingData={this.props.accessedUsingData.toJS()}\n isLoading={this.props.accessedUsingData.get('isLoading')}\n title={actionableByMode ? 'Was Accessed Using' : 'Accessed Using'}\n getSelectedRowActions={this.props.getSelectedRowActions}\n path={actionableByMode ? 'wasAccessedUsing' : 'accessedUsing'}\n />\n
    \n \n \n )\n }\n}\n\nAccessActivity.propTypes = {\n accessedUsingData: ImmutablePropTypes.iterable.isRequired,\n actionsModal: PropTypes.bool,\n activityWidget: ImmutablePropTypes.iterable.isRequired,\n alertTime: PropTypes.number,\n canAccessData: ImmutablePropTypes.iterable.isRequired,\n canAccessPaths: ImmutablePropTypes.map.isRequired,\n changeDetectionProperties: ImmutablePropTypes.iterable,\n crmTickets: ImmutablePropTypes.list.isRequired,\n date: PropTypes.string,\n didAccessData: ImmutablePropTypes.iterable.isRequired,\n getCanAccessPath: PropTypes.func.isRequired,\n getSelectedRowActions: PropTypes.func,\n intl: PropTypes.shape({ formatMessage: PropTypes.func.isRequired }),\n nodeId: PropTypes.string.isRequired,\n propertyWidget: ImmutablePropTypes.iterable.isRequired,\n push: PropTypes.func.isRequired,\n selectedRowActions: PropTypes.array,\n selectedRowActionsLoading: PropTypes.bool,\n setCriticalResourceMonitorDate: PropTypes.func.isRequired,\n toggleActionsModal: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n date: selectCriticalResourceMonitorDate,\n canAccessPaths: selectCanAccessPaths,\n changeDetectionProperties: selectChangeDetectionProperties,\n accessPaths: selectAccessPaths,\n propertyWidget: selectPropertyWidget,\n didAccessData: selectDidAccessData,\n canAccessData: selectCanAccessData,\n accessedUsingData: selectAccessedUsingData,\n activityWidget: selectActivityWidget,\n selectedRowActions: selectSelectedRowActions,\n actionsModal: selectActionsModal,\n selectedRowActionsLoading: selectSelectedRowActionsLoading,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n setCriticalResourceMonitorDate,\n getPropertyWidgetData,\n getDidAccessData,\n getCanAccessData,\n getAccessedUsingData,\n getActivityWidgetData,\n getSelectedRowActions,\n toggleActionsModal,\n getCanAccessPath,\n setCanAccessPath,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\nconst withReducer = injectReducer({ key: 'accessActivity', reducer })\nconst withSaga = injectSaga({ key: 'accessActivity', saga: saga })\n\nexport default compose(withReducer, withSaga, withConnect)(AccessActivity)\n","export const GET_PERFORMED_ACTIONS = 'app/Activity/GET_PERFORMED_ACTIONS'\nexport const SET_PERFORMED_ACTIONS = 'app/Activity/SET_PERFORMED_ACTIONS'\nexport const SET_ACTIVITY_DATE = 'app/Activity/SET_ACTIVITY_DATE'\nexport const TOGGLE_PERFORMED_ACTION_FIELDS =\n 'app/Activity/TOGGLE_PERFORMED_ACTION_FIELDS'\nexport const SET_PERFORMED_ACTION_FIELDS =\n 'app/Activity/SET_PERFORMED_ACTION_FIELDS'\nexport const CLEAR_ACTIVITY = 'app/Activity/CLEAR_ACTIVITY'\nexport const GET_ROLES_ASSUMED = 'app/Activity/GET_ROLES_ASSUMED'\nexport const SET_ROLES_ASSUMED = 'app/Activity/SET_ROLES_ASSUMED'\nexport const GET_ROLES_ASSUMED_BY = 'app/Activity/GET_ROLES_ASSUMED_BY'\nexport const SET_ROLES_ASSUMED_BY = 'app/Activity/SET_ROLES_ASSUMED_BY'\nexport const GET_ACTIVE_FROM = 'app/Activity/GET_ACTIVE_FROM'\nexport const SET_ACTIVE_FROM = 'app/Activity/SET_ACTIVE_FROM'\nexport const GET_ACCESSED_USING = 'app/Activity/GET_ACCESSED_USING'\nexport const SET_ACCESSED_USING = 'app/Activity/SET_ACCESSED_USING'\n\nexport const GET_SELECTED_ROW_ACTIONS = 'app/Activity/GET_SELECTED_ROW_ACTIONS'\nexport const SET_SELECTED_ROW_ACTIONS = 'app/Activity/SET_SELECTED_ROW_ACTIONS'\nexport const TOGGLE_ACTIONS_MODAL = 'app/Activity /TOGGLE_ACTIONS_MODAL'\n","/*\n *\n * Activity reducer\n *\n */\n\nimport { fromJS } from 'immutable'\nimport moment from 'moment'\nimport {\n GET_PERFORMED_ACTIONS,\n SET_PERFORMED_ACTIONS,\n SET_ACTIVITY_DATE,\n TOGGLE_PERFORMED_ACTION_FIELDS,\n CLEAR_ACTIVITY,\n GET_ROLES_ASSUMED,\n SET_ROLES_ASSUMED,\n GET_ROLES_ASSUMED_BY,\n SET_ROLES_ASSUMED_BY,\n GET_ACTIVE_FROM,\n SET_ACTIVE_FROM,\n GET_ACCESSED_USING,\n SET_ACCESSED_USING,\n GET_SELECTED_ROW_ACTIONS,\n SET_SELECTED_ROW_ACTIONS,\n TOGGLE_ACTIONS_MODAL,\n SET_PERFORMED_ACTION_FIELDS,\n} from './constants'\nimport { handleActions } from 'redux-actions'\n\nconst initialState = fromJS({\n performedActions: {\n data: null,\n isLoading: false,\n },\n rolesAssumed: {\n data: null,\n isLoading: false,\n },\n rolesAssumedBy: {\n data: null,\n isLoading: false,\n },\n activeFrom: {\n data: null,\n isLoading: false,\n },\n accessedUsing: {\n data: null,\n isLoading: false,\n },\n selectedRowActions: null,\n selectedRowActionsLoading: false,\n actionsModal: false,\n})\n .set('date', {\n fromDate: moment().subtract(1, 'days'),\n toDate: moment(),\n })\n .set('performedActionFields', fromJS(['performedByValue']))\n\nconst activityReducer = handleActions(\n {\n [GET_PERFORMED_ACTIONS]: state =>\n state\n .setIn(['performedActions', 'isLoading'], true)\n .setIn(['performedActions', 'data'], null),\n [SET_PERFORMED_ACTIONS]: (state, { payload }) =>\n state\n .setIn(['performedActions', 'data'], fromJS(payload))\n .setIn(['performedActions', 'isLoading'], false),\n [GET_ROLES_ASSUMED]: state =>\n state\n .setIn(['rolesAssumed', 'isLoading'], true)\n .setIn(['rolesAssumed', 'data'], null),\n [SET_ROLES_ASSUMED]: (state, { payload }) =>\n state\n .setIn(['rolesAssumed', 'data'], fromJS(payload))\n .setIn(['rolesAssumed', 'isLoading'], false),\n [GET_ROLES_ASSUMED_BY]: state =>\n state\n .setIn(['rolesAssumedBy', 'isLoading'], true)\n .setIn(['rolesAssumedBy', 'data'], null),\n [SET_ROLES_ASSUMED_BY]: (state, { payload }) =>\n state\n .setIn(['rolesAssumedBy', 'data'], fromJS(payload))\n .setIn(['rolesAssumedBy', 'isLoading'], false),\n [SET_ACTIVITY_DATE]: (state, { payload }) => state.set('date', payload),\n [SET_PERFORMED_ACTION_FIELDS]: (state, { payload }) =>\n state.set('performedActionFields', fromJS(payload)),\n [TOGGLE_PERFORMED_ACTION_FIELDS]: (state, { payload }) => {\n const index = state.get('performedActionFields').indexOf(payload)\n if (index === -1) {\n return state.set(\n 'performedActionFields',\n state.get('performedActionFields').push(payload)\n )\n } else {\n return state.set(\n 'performedActionFields',\n state.get('performedActionFields').splice(index, 1)\n )\n }\n },\n [GET_ACTIVE_FROM]: state =>\n state\n .setIn(['activeFrom', 'isLoading'], true)\n .setIn(['activeFrom', 'data'], null),\n [SET_ACTIVE_FROM]: (state, { payload }) =>\n state\n .setIn(['activeFrom', 'data'], fromJS(payload))\n .setIn(['activeFrom', 'isLoading'], false),\n [GET_ACCESSED_USING]: state =>\n state\n .setIn(['accessedUsing', 'isLoading'], true)\n .setIn(['accessedUsing', 'data'], null),\n [SET_ACCESSED_USING]: (state, { payload }) =>\n state\n .setIn(['accessedUsing', 'data'], fromJS(payload))\n .setIn(['accessedUsing', 'isLoading'], false),\n [TOGGLE_ACTIONS_MODAL]: state =>\n state.set('actionsModal', !state.get('actionsModal')),\n [GET_SELECTED_ROW_ACTIONS]: state =>\n state.set('actionsModal', true).set('selectedRowActionsLoading', true),\n [SET_SELECTED_ROW_ACTIONS]: (state, { payload }) => {\n return state\n .set('selectedRowActions', fromJS(payload))\n .set('selectedRowActionsLoading', false)\n },\n [CLEAR_ACTIVITY]: () => {\n return initialState\n },\n },\n initialState\n)\n\nexport default activityReducer\n","import {\n GET_PERFORMED_ACTIONS,\n SET_PERFORMED_ACTIONS,\n SET_ACTIVITY_DATE,\n SET_PERFORMED_ACTION_FIELDS,\n TOGGLE_PERFORMED_ACTION_FIELDS,\n CLEAR_ACTIVITY,\n GET_ROLES_ASSUMED,\n SET_ROLES_ASSUMED,\n GET_ROLES_ASSUMED_BY,\n SET_ROLES_ASSUMED_BY,\n GET_ACTIVE_FROM,\n SET_ACTIVE_FROM,\n GET_ACCESSED_USING,\n SET_ACCESSED_USING,\n GET_SELECTED_ROW_ACTIONS,\n SET_SELECTED_ROW_ACTIONS,\n TOGGLE_ACTIONS_MODAL,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const getPerformedActions = createAction(GET_PERFORMED_ACTIONS)\nexport const setPerformedActions = createAction(SET_PERFORMED_ACTIONS)\nexport const setActivityDate = createAction(SET_ACTIVITY_DATE)\nexport const togglePerformedActionFields = createAction(\n TOGGLE_PERFORMED_ACTION_FIELDS\n)\nexport const setPerformedActionFields = createAction(\n SET_PERFORMED_ACTION_FIELDS\n)\nexport const clearActivity = createAction(CLEAR_ACTIVITY)\nexport const getRolesAssumed = createAction(GET_ROLES_ASSUMED)\nexport const setRolesAssumed = createAction(SET_ROLES_ASSUMED)\nexport const getRolesAssumedBy = createAction(GET_ROLES_ASSUMED_BY)\nexport const setRolesAssumedBy = createAction(SET_ROLES_ASSUMED_BY)\nexport const getActiveFrom = createAction(GET_ACTIVE_FROM)\nexport const setActiveFrom = createAction(SET_ACTIVE_FROM)\nexport const getAccessedUsing = createAction(GET_ACCESSED_USING)\nexport const setAccessedUsing = createAction(SET_ACCESSED_USING)\nexport const getSelectedRowActions = createAction(GET_SELECTED_ROW_ACTIONS)\nexport const setSelectedRowActions = createAction(SET_SELECTED_ROW_ACTIONS)\nexport const toggleActionsModal = createAction(TOGGLE_ACTIONS_MODAL)\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\nconst selectActivityDomain = state => state.get('activity')\n\nexport const selectActivity = createSelector(\n selectActivityDomain,\n state => state || Map()\n)\n\nexport const selectPerformedActions = createSelector(\n selectActivity,\n state => state.get('performedActions')\n)\n\nexport const selectActivityDate = createSelector(\n selectActivity,\n state => state.get('date')\n)\n\nexport const selectPerformedActionFields = createSelector(\n selectActivity,\n state => state.get('performedActionFields')\n)\n\nexport const selectRolesAssumed = createSelector(\n selectActivity,\n state => state.get('rolesAssumed')\n)\n\nexport const selectRolesAssumedBy = createSelector(\n selectActivity,\n state => state.get('rolesAssumedBy')\n)\n\nexport const selectActiveFrom = createSelector(\n selectActivity,\n state => state.get('activeFrom')\n)\n\nexport const selectAccessedUsing = createSelector(\n selectActivity,\n state => state.get('accessedUsing')\n)\n\nexport const selectSelectedRowActions = createSelector(\n selectActivity,\n state => {\n return state.get('selectedRowActions') || List()\n }\n)\n\nexport const selectSelectedRowActionsLoading = createSelector(\n selectActivity,\n state => {\n return state.get('selectedRowActionsLoading')\n }\n)\n\nexport const selectActionsModal = createSelector(\n selectActivity,\n state => {\n return state.get('actionsModal')\n }\n)\n\nexport default selectActivity\nexport { selectActivityDomain }\n","export const GET_ACCESSED_FROM_ACTIONS = ` \nquery getActiveFromActions($criticalResourceSRN: String, $countryValue: String, $fromDate: DateTime, $toDate: DateTime) {\n Actions(\n where: {\n performedOnValue: { value: $criticalResourceSRN }\n performedAtCountryValues: { value: $countryValue }\n createdDate: {\n and: [\n { op: GT, value: $fromDate}\n { op: LTE, value: $toDate}\n ]\n }\n }\n ) {\n count\n items {\n srn\n eventName\n service\n createdDate\n performedByValue\n }\n }\n }`\n\nexport const GET_ACTIVITY_WIDGET = `\n query getActivityFromRegions($srn: String, $fromDate: DateTime, $toDate: DateTime, $keyName: String) {\n AlertLogs(\n where: { \n and: { \n criticalResourceSRN: { value: $srn }\n timestamp: { op: BETWEEN values: [$fromDate, $toDate] }\n keyName: { value: $keyName }\n }\n }\n )\n {\n items {\n count\n regionSet\n timestamp\n }\n }\n}`\n\nexport const GET_ACCESSED_USING_WIDGET_CRITICAL_RESOURCE_SRN = `\n query getAccessedUsing($srn: String, $fromDate: DateTime, $toDate: DateTime, $keyName: String) {\n AlertLogs(\n where: { \n and: { \n criticalResourceSRN: { value: $srn }\n timestamp: { op: BETWEEN values: [$fromDate, $toDate] }\n keyName: { value: $keyName }\n }\n }\n ) {\n items { \n criticalResourceSRN\n userAgentSet\n timestamp\n }\n }\n }`\n","import { all, takeLatest, put, select, call } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport { getClient } from 'apolloClient'\nimport {\n setPerformedActions,\n setRolesAssumed,\n setRolesAssumedBy,\n setActiveFrom,\n setAccessedUsing,\n setSelectedRowActions,\n} from './actions'\nimport {\n GET_PERFORMED_ACTIONS,\n GET_ROLES_ASSUMED,\n GET_ROLES_ASSUMED_BY,\n GET_ACTIVE_FROM,\n GET_ACCESSED_USING,\n GET_SELECTED_ROW_ACTIONS,\n} from './constants'\nimport { selectPerformedActionFields } from './selectors'\nimport {\n GET_ACTIVE_FROM_ACTIONS,\n GET_ACCESSED_USING_ACTIONS,\n GET_WAS_ACCESSED_USING_ACTIONS,\n} from 'static-queries'\nimport { DEFAULT_DISPLAY_COLUMNS } from 'query-builder'\nimport _ from 'lodash'\n\nimport {\n GET_ACCESSED_FROM_ACTIONS,\n GET_ACTIVITY_WIDGET,\n GET_ACCESSED_USING_WIDGET_CRITICAL_RESOURCE_SRN,\n} from './queries'\n\nfunction* getPerformedActions(action) {\n const performedActionFields = yield select(selectPerformedActionFields)\n\n const {\n payload: { srn, fromDate, toDate },\n } = action\n\n let fields = ''\n if (performedActionFields.includes('performedByValue')) {\n fields = `performedByValue: { value: \"${srn}\" }`\n }\n\n if (performedActionFields.includes('performedOnValue')) {\n fields = `performedOnValue: { value: \"${srn}\" }`\n }\n\n if (\n performedActionFields.includes('performedOnValue') &&\n performedActionFields.includes('performedByValue')\n ) {\n fields = ` or: [ { performedOnValue: { value: \"${srn}\" } } { performedByValue: { value: \"${srn}\" } } ]`\n }\n\n const formattedFromDate = fromDate.format('YYYY-MM-DD')\n const formattedToDate = toDate.format('YYYY-MM-DD')\n\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n query getPerformedActionsBetweenDates(\n $fromDate: DateTime\n $toDate: DateTime\n ) {\n Actions(\n where: {\n createdDate: {\n and: [\n { op: GTE, value: $fromDate }\n { op: LTE, value: $toDate }\n ]\n }\n ${fields}\n }\n ) {\n count\n items(limit: 500) {\n ${DEFAULT_DISPLAY_COLUMNS.action.join(`\\n\n `)}\n }\n }\n }\n `,\n variables: { toDate: formattedToDate, fromDate: formattedFromDate },\n })\n yield put(setPerformedActions(response.data.Actions.items))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting performed actions', e)\n }\n}\n\nfunction* getRolesAssumed(action) {\n const {\n payload: { srn, fromDate, toDate },\n } = action\n\n const formattedFromDate = fromDate.utc().format()\n const formattedToDate = toDate.utc().format()\n\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n query getRolesAssumed(\n $srn: String!\n $fromDate: DateTime\n $toDate: DateTime\n ) {\n Actions(\n where: {\n performedByValue: { value: $srn }\n eventName: { value: \"AssumeRole\" }\n createdDate: {\n and: [\n { op: GTE, value: $fromDate }\n { op: LTE, value: $toDate }\n ]\n }\n succeeded: { value: true }\n }\n ) {\n items {\n srn\n performedOnValue\n createdDate\n performedOn {\n items {\n srn\n ... on Role {\n name\n friendlyName\n }\n }\n }\n }\n }\n }\n `,\n variables: { srn, toDate: formattedToDate, fromDate: formattedFromDate },\n })\n\n yield put(\n setRolesAssumed(_.get(response, ['data', 'Actions', 'items'], []))\n )\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting roles assumed', e)\n }\n}\n\nfunction* getRolesAssumedBy(action) {\n const {\n payload: { srn, fromDate, toDate },\n } = action\n\n const formattedFromDate = fromDate.utc().format()\n const formattedToDate = toDate.utc().format()\n\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n query getRolesAssumedBy(\n $srn: String!\n $fromDate: DateTime\n $toDate: DateTime\n ) {\n Actions(\n where: {\n performedOnValue: { value: $srn }\n createdDate: {\n and: [\n { op: GTE, value: $fromDate }\n { op: LTE, value: $toDate }\n ]\n }\n eventName: { value: \"AssumeRole\" }\n succeeded: { value: true }\n }\n ) {\n items(limit: 1000) {\n srn\n performedOnValue\n performedByValue\n createdDate\n performedBy {\n items {\n srn\n name\n }\n }\n }\n }\n }\n `,\n variables: { srn, toDate: formattedToDate, fromDate: formattedFromDate },\n })\n\n yield put(\n setRolesAssumedBy(_.get(response, ['data', 'Actions', 'items'], []))\n )\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting roles assumed', e)\n }\n}\n\nfunction* getActiveFrom(action) {\n const { srn, fromDate, toDate, actionableByMode } = action.payload\n\n const formattedFromDate = fromDate.utc().format()\n const formattedToDate = toDate.utc().format()\n\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n ${GET_ACTIVITY_WIDGET}\n `,\n variables: {\n srn,\n toDate: formattedToDate,\n fromDate: formattedFromDate,\n keyName: actionableByMode ? 'accessedFrom' : 'activeFrom',\n },\n })\n yield put(setActiveFrom(response.data.AlertLogs.items))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting activity regions data', e)\n }\n}\n\nfunction* getAccessedUsing(action) {\n const {\n payload: { srn, fromDate, toDate, actionableByMode },\n } = action\n const formattedFromDate = fromDate.utc().format()\n const formattedToDate = toDate.utc().format()\n\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n ${GET_ACCESSED_USING_WIDGET_CRITICAL_RESOURCE_SRN}\n `,\n variables: {\n srn,\n toDate: formattedToDate,\n fromDate: formattedFromDate,\n keyName: actionableByMode ? 'accessedFrom' : 'activeFrom',\n },\n })\n const items = !_.isEmpty(response.data.AlertLogs.items)\n ? response.data.AlertLogs.items\n : []\n yield put(setAccessedUsing(items))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error getting user agents', e)\n }\n}\n\nfunction* getActiveFromActions(data, fromDate, toDate) {\n const { criticalResourceSRN, regionSet } = data\n const countryValue = regionSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_ACTIVE_FROM_ACTIONS}\n `,\n variables: {\n fromDate,\n toDate,\n criticalResourceSRN,\n countryValue,\n },\n })\n\n const actions = _.get(response, ['data', 'Actions', 'items'], [])\n yield put(\n setSelectedRowActions(_.sortBy(actions, ['createdDate']).reverse())\n )\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getAccessedFromActions(data, fromDate, toDate) {\n const { criticalResourceSRN, regionSet } = data\n const countryValue = regionSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_ACCESSED_FROM_ACTIONS}\n `,\n variables: {\n fromDate,\n toDate,\n criticalResourceSRN,\n countryValue,\n },\n })\n const actions = _.get(response, ['data', 'Actions', 'items'], [])\n yield put(\n setSelectedRowActions(_.sortBy(actions, ['createdDate']).reverse())\n )\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getAccessedUsingActions(data, fromDate, toDate) {\n const { criticalResourceSRN, userAgentSet } = data\n const userValue = userAgentSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_WAS_ACCESSED_USING_ACTIONS}\n `,\n variables: {\n fromDate,\n toDate,\n criticalResourceSRN,\n userValue,\n },\n })\n const actions = _.get(response, ['data', 'Actions', 'items'], [])\n yield put(\n setSelectedRowActions(_.sortBy(actions, ['createdDate']).reverse())\n )\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getActiveUsingActions(data, fromDate, toDate) {\n const { criticalResourceSRN, userAgentSet } = data\n const userValue = userAgentSet[0]\n try {\n const client = getClient()\n let response = yield client.query({\n query: gql`\n ${GET_ACCESSED_USING_ACTIONS}\n `,\n variables: {\n fromDate,\n toDate,\n criticalResourceSRN,\n userValue,\n },\n })\n const actions = _.get(response, ['data', 'Actions', 'items'], [])\n yield put(\n setSelectedRowActions(_.sortBy(actions, ['createdDate']).reverse())\n )\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting actions for selected node ', err)\n }\n}\n\nfunction* getActions(action) {\n const {\n data,\n date: { fromDate, toDate },\n path,\n } = action.payload\n\n const formattedFromDate = fromDate.format()\n const formattedToDate = toDate.format()\n\n switch (path) {\n case 'activeFrom':\n yield call(getActiveFromActions, data, formattedFromDate, formattedToDate)\n break\n case 'accessedFrom':\n yield call(\n getAccessedFromActions,\n data,\n formattedFromDate,\n formattedToDate\n )\n break\n case 'accessedUsing':\n yield call(\n getAccessedUsingActions,\n data,\n formattedFromDate,\n formattedToDate\n )\n break\n case 'activeUsing':\n yield call(\n getActiveUsingActions,\n data,\n formattedFromDate,\n formattedToDate\n )\n break\n default:\n return\n }\n}\n\nfunction* activitySaga() {\n yield all([\n takeLatest(GET_PERFORMED_ACTIONS, getPerformedActions),\n takeLatest(GET_ROLES_ASSUMED, getRolesAssumed),\n takeLatest(GET_ROLES_ASSUMED_BY, getRolesAssumedBy),\n takeLatest(GET_ACTIVE_FROM, getActiveFrom),\n takeLatest(GET_ACCESSED_USING, getAccessedUsing),\n takeLatest(GET_SELECTED_ROW_ACTIONS, getActions),\n ])\n}\n\nexport default activitySaga\n","/**\n *\n * CustomDateRange\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport TextLink from 'components/TextLink'\nimport { DateRangePicker } from 'react-dates'\nimport moment from 'moment'\nimport SelectBar from 'components/SelectBar'\n\nconst defaultValue = { label: 'Within the past 24 hours', value: 1 }\n\nclass CustomDateRange extends React.Component {\n state = {\n isAdvanced: false,\n }\n\n styles = {\n container: {\n display: 'grid',\n gridTemplateColumns: '375px 150px',\n padding: '0.75rem 0.75rem 0.25rem 0.75rem',\n },\n textContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n },\n }\n\n toggleDateRange = () => {\n const { isAdvanced } = this.state\n if (isAdvanced) {\n this.props.onDatesChange(defaultValue)\n }\n this.setState(oldState => ({ isAdvanced: !oldState.isAdvanced }))\n }\n\n render() {\n const options = [\n { label: 'Within the past 24 hours', value: 1 },\n { label: 'Within the past 7 days', value: 7 },\n { label: 'Within the past 30 days', value: 30 },\n { label: 'Within the past 60 days', value: 60 },\n { label: 'Within the past 90 days', value: 90 },\n ]\n return (\n
    \n
    \n {this.state.isAdvanced ? (\n this.setState({ focusedInput })}\n isOutsideRange={date => moment(date).isAfter(moment())}\n {...this.props}\n />\n ) : (\n \n )}\n
    \n
    \n \n {this.state.isAdvanced ? 'Relative Date' : 'Custom Date Range'}\n \n
    \n
    \n )\n }\n}\n\nCustomDateRange.defaultProps = {\n displayFormat: 'MMMM D YYYY',\n}\n\nCustomDateRange.propTypes = {\n startDate: PropTypes.object.isRequired,\n endDate: PropTypes.object.isRequired,\n displayFormat: PropTypes.string,\n onDatesChange: PropTypes.func.isRequired,\n}\n\nexport default CustomDateRange\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport BorderlessButton from 'components/BorderlessButton'\nimport { TopTitle } from 'components/Card'\nimport Card from 'components/Card'\nimport DataTable from 'components/DataTable'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport TextLink from 'components/TextLink'\nimport NodeViewMiniPopout from '../NodeViewMiniPopout'\nimport { getNameFromSrn } from 'utils/sonraiUtils'\n\nclass PerformedActions extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n miniNodeViewNodeId: '',\n miniNodeViewOpen: false,\n }\n\n this.styles = {\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n title: {\n fontSize: '22px',\n fontWeight: '300',\n marginRight: '0px',\n },\n buttonContainer: {\n display: 'flex',\n alignItem: 'center',\n position: 'absolute',\n top: '10px',\n right: '10px',\n },\n button: {\n borderRadius: '25px',\n margin: '0.5rem',\n padding: '0.5rem',\n },\n buttonText: {\n fontSize: '0.85rem',\n },\n content: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginTop: '15px',\n },\n }\n }\n\n openMiniNodeView = nodeId => {\n this.setState({\n miniNodeViewNodeId: nodeId,\n miniNodeViewOpen: true,\n })\n }\n\n closeMiniNodeView = () => {\n this.setState({\n miniNodeViewNodeId: '',\n miniNodeViewOpen: false,\n })\n }\n\n getData = data => {\n if (data) {\n return data.map(item => ({\n srn: item.srn,\n eventName: item.eventName || '-',\n actionClassification: item.hasActionClassificationValue || '-',\n createdDate: item.createdDate || '-',\n ..._.omit(item, [\n 'srn',\n 'eventName',\n 'hasActionClassificationValue',\n 'createdDate',\n ]),\n }))\n }\n\n return []\n }\n\n renderPerformedLink = params => {\n if (typeof params.value === 'string') {\n if (params.value.startsWith('srn:')) {\n return (\n {\n this.openMiniNodeView(params.value)\n }}\n >\n {getNameFromSrn(params.value)}\n \n )\n } else {\n return params.value\n }\n }\n\n if (Array.isArray(params.value)) {\n if (params.value.length > 1) {\n return (Multiple)\n } else if (params.value.length === 0) {\n return '-'\n } else {\n const srn = params.value[0]\n return (\n {\n this.openMiniNodeView(srn)\n }}\n >\n {getNameFromSrn(srn)}\n \n )\n }\n }\n\n return params.value || '-'\n }\n\n render() {\n const {\n performedActionFields,\n togglePerformedActionFields,\n isLoading,\n } = this.props\n return (\n \n
    \n Actions \n
    \n togglePerformedActionFields('performedByValue')}\n style={{\n ...this.styles.button,\n ...{\n background: performedActionFields.includes('performedByValue')\n ? this.props.theme.secondary\n : this.props.theme.neutralLight,\n },\n }}\n >\n \n Actions this resource performed\n \n \n togglePerformedActionFields('performedOnValue')}\n style={{\n ...this.styles.button,\n ...{\n background: performedActionFields.includes('performedOnValue')\n ? this.props.theme.secondary\n : this.props.theme.neutralLight,\n },\n }}\n >\n \n Actions performed on this resource\n \n \n
    \n
    \n
    \n {isLoading ? (\n \n ) : (\n \n )}\n \n
    \n
    \n )\n }\n}\n\nPerformedActions.propTypes = {\n isLoading: PropTypes.bool,\n data: PropTypes.array,\n performedActionFields: ImmutablePropTypes.iterable,\n togglePerformedActionFields: PropTypes.func,\n onClickNodeView: PropTypes.func,\n theme: themeShape,\n}\n\nexport default themeable(PerformedActions)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport DataTable from 'components/DataTable'\nimport TextLink from 'components/TextLink'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nclass UnderlyingActionsModal extends Component {\n getData = data => {\n if (data) {\n return data\n }\n return []\n }\n render() {\n const {\n isOpen,\n toggle,\n selectedRowActions,\n selectedRowActionsLoading,\n } = this.props\n\n return (\n \n {this.props.title}\n \n {!selectedRowActionsLoading ? (\n 0 ? '60vh' : '60px',\n }}\n onClickNodeView={this.props.onClickNodeView}\n data={selectedRowActions}\n />\n ) : (\n \n )}\n \n \n \n Close\n \n \n \n )\n }\n}\n\nUnderlyingActionsModal.propTypes = {\n toggle: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n selectedRowActions: ImmutablePropTypes.iterable,\n selectedRowActionsLoading: PropTypes.bool,\n onClickNodeView: PropTypes.func,\n title: PropTypes.string,\n}\n\nexport default UnderlyingActionsModal\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\nimport TextLink from 'components/TextLink'\nimport injectSaga from 'utils/injectSaga'\nimport moment from 'moment'\nimport injectReducer from 'utils/injectReducer'\nimport reducer from './reducers'\nimport saga from './sagas'\nimport {\n getPerformedActions,\n setActivityDate,\n setPerformedActionFields,\n togglePerformedActionFields,\n clearActivity,\n getRolesAssumed,\n getRolesAssumedBy,\n getActiveFrom,\n getAccessedUsing,\n getSelectedRowActions,\n toggleActionsModal,\n} from './actions'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport {\n selectPerformedActions,\n selectActivityDate,\n selectPerformedActionFields,\n selectRolesAssumed,\n selectRolesAssumedBy,\n selectActiveFrom,\n selectAccessedUsing,\n selectSelectedRowActions,\n selectSelectedRowActionsLoading,\n selectActionsModal,\n} from './selectors'\nimport { selectQueryTypes } from 'containers/SonraiData/selectors'\nimport { Responsive } from 'react-grid-layout'\nimport SizeMe from 'components/SizeMe'\nimport CustomDateRange from 'components/CustomDateRange'\nimport { TopTitle, CardBody } from 'components/Card'\nimport BorderedCard from 'components/BorderedCard'\nimport PerformedActions from './PerformedActions'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport { selectIsMonitored } from 'containers/NodeSolutionCenter/selectors'\nimport { toggleResourceMonitoring } from 'containers/NodeSolutionCenter/actions'\nimport { srnIsCRMActionable } from 'utils/widgetUtils'\nimport _ from 'lodash'\n\nimport { selectChangeDetectionProperties } from 'containers/ChangeDetectionManager/selectors'\nimport ActivityFromRegions from 'components/ActivityFromRegions'\nimport UnderlyingActionsModal from 'components/UnderlyingActionsModal'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport AccessedUsingWidget from 'components/AccessedUsingWidget'\nimport DataTable from 'components/DataTable'\n\nconst ResponsiveGridLayout = SizeMe(Responsive)\n\nconst getData = props => {\n const date = props.date\n const fromDate = date.fromDate\n const toDate = date.toDate\n const srn = props.nodeId\n const type = getTypeFromSrn(srn)\n const actionableByMode = srnIsCRMActionable(props.nodeId)\n\n props.getPerformedActions({\n srn,\n fromDate,\n toDate,\n })\n\n if (type === 'User') {\n props.getRolesAssumed({\n srn,\n fromDate,\n toDate,\n })\n } else if (type === 'Role') {\n props.getRolesAssumedBy({\n srn,\n fromDate,\n toDate,\n })\n }\n\n props.getActiveFrom({\n srn,\n fromDate,\n toDate,\n actionableByMode,\n })\n\n props.getAccessedUsing({\n srn,\n fromDate,\n toDate,\n actionableByMode,\n })\n}\n\nexport class Activity extends React.Component {\n constructor(props) {\n super(props)\n\n // choose which types of actions to fetch by default based on the type of\n // the resource being displayed on screen: is it an Identity?\n try {\n const lowercaseNodeType = getTypeFromSrn(props.nodeId).toLowerCase()\n const identity = props.queryTypes.get('Identity')\n const identityType = identity\n .get('possibleTypes')\n .find(type => type.get('name').toLowerCase() === lowercaseNodeType)\n if (identityType) {\n props.setPerformedActionFields(['performedByValue'])\n } else {\n props.setPerformedActionFields(['performedOnValue'])\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\n 'Activity continaer coudlnt determine if nodeId was Identity: ' +\n props.nodeId,\n e\n )\n }\n\n getData(props)\n\n this.styles = {\n title: {\n fontSize: '18px',\n fontWeight: '300',\n borderBottom: '1px solid #eee',\n marginRight: '0px',\n },\n card: {\n height: '100%',\n },\n body: {\n alignItems: 'start',\n paddingTop: '5px',\n height: 'calc(100% - 5px)',\n background: 'none',\n },\n list: {\n fontSize: '12px',\n width: '100%',\n },\n listItem: {\n cursor: 'pointer',\n paddingBottom: '1px',\n },\n empty: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '100%',\n },\n crmOverlay: {\n position: 'absolute',\n background: 'rgba(200,200,200,0.48)',\n opacity: '0.7',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n padding: '0.25rem',\n height: '100%',\n },\n }\n }\n\n componentWillUnmount() {\n this.props.clearActivity()\n }\n\n componentDidUpdate(oldProps) {\n const date = this.props.date\n const fromDate = date.fromDate\n const toDate = date.toDate\n const srn = this.props.nodeId\n if (\n oldProps.date !== this.props.date ||\n oldProps.isMonitored !== this.props.isMonitored\n ) {\n getData(this.props)\n }\n if (oldProps.performedActionFields !== this.props.performedActionFields) {\n this.props.getPerformedActions({\n srn,\n fromDate,\n toDate,\n })\n }\n }\n\n handleDatesChange = params => {\n const { startDate, endDate, value } = params\n if (startDate && endDate) {\n this.props.setActivityDate({\n fromDate: startDate,\n toDate: endDate,\n })\n }\n if (!startDate && !endDate && value) {\n this.props.setActivityDate({\n fromDate: moment().subtract(value, 'days'),\n toDate: moment(),\n })\n }\n }\n\n getRolesAssumed = () => {\n if (this.props.rolesAssumed.get('isLoading')) {\n return \n }\n if (\n this.props.rolesAssumed.get('data') &&\n !this.props.rolesAssumed.get('data').isEmpty()\n ) {\n const data = this.props.rolesAssumed.toJS().data.map(action => {\n const role = _.get(action, ['peformedOn', 'items', 0, 'name'])\n ? _.get(action, ['peformedOn', 'items', 0, 'name'])\n : _.get(action, ['performedOnValue', 0], null)\n\n return {\n role: role,\n assumedOn: action.createdDate,\n }\n })\n return \n }\n return (\n
    \n No Roles Assumed\n
    \n )\n }\n\n getRolesAssumedBy = () => {\n if (this.props.rolesAssumedBy.get('isLoading')) {\n return \n }\n if (\n this.props.rolesAssumedBy.get('data') &&\n !this.props.rolesAssumedBy.get('data').isEmpty()\n ) {\n const data = this.props.rolesAssumedBy.toJS().data.map(action => {\n const actor = _.get(action, ['performedBy', 'items', 0, 'name'])\n ? _.get(action, ['performedBy', 'items', 0, 'name'])\n : _.get(action, ['performedByValue', 0], null)\n\n return {\n assumedBy: actor,\n assumedOn: action.createdDate,\n }\n })\n return \n }\n return (\n
    \n Role Not Assumed\n
    \n )\n }\n\n getCRMOverlay = () => {\n return (\n
    \n \n Results from this widget are only available if the resource is\n monitored.\n
    \n \n this.props.toggleResourceMonitoring({\n srn: this.props.nodeId,\n isMonitored: this.props.isMonitored,\n })\n }\n >\n Enable Monitoring\n \n \n )\n }\n\n navigateToNodeView = srn => {\n const nodeType = getTypeFromSrn(srn)\n this.props.push(getNodeViewPushParams(srn, nodeType))\n }\n\n render() {\n const {\n date: { fromDate, toDate },\n } = this.props\n const actionableByMode = srnIsCRMActionable(this.props.nodeId)\n const type = getTypeFromSrn(this.props.nodeId)\n\n const rowHeight = 64\n const layout2Col = [\n { x: 0, y: 0, w: 4, h: 6, i: 'activityExplorer' },\n { x: 0, y: 5, w: 4, h: 6, i: 'rolesAssumed' },\n { x: 0, y: 10, w: 2, h: 5, i: 'countries' },\n { x: 2, y: 10, w: 2, h: 5, i: 'userAgentStrings' },\n ]\n const layout1Col = [\n { x: 0, y: 0, w: 2, h: 5, i: 'activityExplorer' },\n { x: 0, y: 5, w: 2, h: 5, i: 'rolesAssumed' },\n { x: 0, y: 10, w: 2, h: 5, i: 'countries' },\n { x: 0, y: 15, w: 2, h: 5, i: 'userAgentStrings' },\n ]\n return (\n
    \n \n \n \n
    \n \n
    \n
    \n {type === 'Role' ? (\n \n Role Assumed By\n \n {this.getRolesAssumedBy()}\n \n \n ) : (\n \n Roles Assumed\n \n {this.getRolesAssumed()}\n \n \n )}\n
    \n
    \n this.getCRMOverlay()}\n isMonitored={this.props.isMonitored}\n getSelectedRowActions={this.props.getSelectedRowActions}\n isLocked={\n this.props.changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes('activeFrom') ||\n this.props.changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes('accessedFrom')\n }\n title={actionableByMode ? 'Accessed From' : 'Active From'}\n srn={this.props.nodeId}\n activityWidget={this.props.activeFrom.toJS()}\n isLoading={this.props.activeFrom.get('isLoading')}\n actionableByMode={actionableByMode}\n path={actionableByMode ? 'accessedFrom' : 'activeFrom'}\n />\n
    \n
    \n this.getCRMOverlay()}\n isMonitored={this.props.isMonitored}\n srn={this.props.nodeId}\n isLocked={this.props.changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes('accessedUsing')}\n accessedUsingData={this.props.accessedUsing.toJS()}\n isLoading={this.props.accessedUsing.get('isLoading')}\n title={actionableByMode ? 'Was Accessed Using' : 'Accessed Using'}\n getSelectedRowActions={this.props.getSelectedRowActions}\n path={actionableByMode ? 'accessedUsing' : 'activeUsing'}\n />\n
    \n \n
    \n )\n }\n}\n\nActivity.propTypes = {\n crmTickets: ImmutablePropTypes.list.isRequired,\n push: PropTypes.func,\n performedActions: ImmutablePropTypes.iterable,\n getPerformedActions: PropTypes.func,\n setActivityDate: PropTypes.func,\n date: PropTypes.string,\n performedActionFields: ImmutablePropTypes.iterable,\n setPerformedActionFields: PropTypes.func,\n togglePerformedActionFields: PropTypes.func,\n nodeId: PropTypes.string,\n clearActivity: PropTypes.func,\n rolesAssumed: ImmutablePropTypes.iterable,\n rolesAssumedBy: ImmutablePropTypes.iterable,\n isMonitored: PropTypes.bool,\n toggleResourceMonitoring: PropTypes.func,\n activeFrom: ImmutablePropTypes.iterable,\n accessedUsing: ImmutablePropTypes.iterable,\n changeDetectionProperties: ImmutablePropTypes.iterable,\n getSelectedRowActions: PropTypes.func,\n selectedRowActionsLoading: PropTypes.bool,\n selectedRowActions: ImmutablePropTypes.iterable,\n toggleActionsModal: PropTypes.func,\n actionsModal: PropTypes.bool,\n queryTypes: ImmutablePropTypes.map,\n}\n\nconst mapStateToProps = createStructuredSelector({\n performedActions: selectPerformedActions,\n date: selectActivityDate,\n performedActionFields: selectPerformedActionFields,\n rolesAssumed: selectRolesAssumed,\n rolesAssumedBy: selectRolesAssumedBy,\n activeFrom: selectActiveFrom,\n accessedUsing: selectAccessedUsing,\n isMonitored: selectIsMonitored,\n changeDetectionProperties: selectChangeDetectionProperties,\n selectedRowActionsLoading: selectSelectedRowActionsLoading,\n selectedRowActions: selectSelectedRowActions,\n actionsModal: selectActionsModal,\n queryTypes: selectQueryTypes,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n clearActivity,\n getPerformedActions,\n setActivityDate,\n setPerformedActionFields,\n togglePerformedActionFields,\n getRolesAssumed,\n getRolesAssumedBy,\n toggleResourceMonitoring,\n getActiveFrom,\n getAccessedUsing,\n getSelectedRowActions,\n toggleActionsModal,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\nconst withReducer = injectReducer({ key: 'activity', reducer })\nconst withSaga = injectSaga({ key: 'activity', saga: saga })\n\nexport default compose(withReducer, withSaga, withConnect)(Activity)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport { List } from 'immutable'\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap'\n\nimport JSONDisplay from 'components/JSONDisplay'\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport Button from 'components/Button'\nimport {\n fetchEffectivePermissionsForActor,\n fetchUberPolicy,\n} from 'containers/NodeSolutionCenter/actions'\nimport {\n getNodeViewPushParams,\n getNameFromSrn,\n getCloudFromSrn,\n} from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport CenterContent from 'components/CenterContent'\nimport TimeoutLoader from 'components/TimeoutLoader'\nimport {\n selectEffectivePermissions,\n selectUsedEffectivePermissions,\n selectEffectivePermissionsLoading,\n selectUsedEffectivePermissionsLoading,\n selectUberPolicy,\n} from 'containers/NodeSolutionCenter/selectors'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Card from 'components/Card'\nimport { TopTitle, CardBody } from 'components/Card'\nimport DataTable from 'components/DataTable'\nimport TextLink from 'components/TextLink'\n\nclass EffectivePermissionWidget extends React.Component {\n styles = {\n card: {\n minHeight: 0,\n },\n }\n\n state = {\n showUberPolicy: false,\n }\n\n componentDidMount() {\n this.props.fetchEffectivePermissionsForActor({\n srn: this.props.srn,\n usedPermissions: this.props.usedPermissions,\n })\n\n if (this.hasUberPolicy()) {\n this.props.fetchUberPolicy(this.props.srn)\n }\n }\n\n getEPData = () => {\n if (this.props.usedPermissions) {\n return (this.props.usedEffectivePermissions || List()).toJS().map(row => {\n const newCols = {\n permission: row.permission,\n policy: row.policySrn,\n resourceFilter: row.policyEntryResourceFilter,\n conditions: row.policyEntryConditions,\n identityChain: row.identityChain,\n }\n\n if (this.props.onShowPath) {\n newCols.showPath = row\n }\n\n return newCols\n })\n } else {\n return (this.props.effectivePermissions || List()).toJS().map(row => {\n const newCols = {\n permission: row.permission,\n policy: row.policySrn,\n resourceFilter: row.policyEntryResourceFilter,\n conditions: row.policyEntryConditions,\n identityChain: row.identityChain,\n }\n\n if (this.props.onShowPath) {\n newCols.showPath = row\n }\n\n return newCols\n })\n }\n }\n\n onShowPath = perm => {\n if (this.props.onShowPath) {\n this.props.onShowPath(perm)\n }\n }\n\n getRowRows = () => {\n return '
    No IAM or RBAC Permissions
    '\n }\n\n openUberPolicy = () => {\n this.setState({\n showUberPolicy: true,\n })\n }\n\n closeUberPolicy = () => {\n this.setState({\n showUberPolicy: false,\n })\n }\n\n hasUberPolicy = () => {\n if (this.props.usedPermissions) {\n return false\n }\n\n if (!getCloudFromSrn(this.props.srn) === 'aws') {\n return false\n }\n\n const type = getTypeFromSrn(this.props.srn).toLowerCase()\n if (type !== 'user' && type !== 'group' && type !== 'role') {\n return false\n }\n\n return true\n }\n\n render() {\n const permissionData = this.getEPData()\n const isLoading = this.props.usedPermissions\n ? this.props.loadingUsed\n : this.props.loading\n\n return (\n \n {`${\n this.props.usedPermissions ? 'Used' : 'Unused'\n } Permissions`}\n \n {isLoading ? (\n \n \n \n ) : (\n \n \n
    \n 0 ? '100%' : '60px',\n }}\n sortColumns={true}\n data={permissionData}\n overlayNoRowsTemplate={this.getRowRows()}\n customColumnConfig={{\n showPath: {\n width: 120,\n minWidth: 120,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n return (\n this.onShowPath(params.value)}\n >\n Show Path\n \n )\n },\n },\n policy: {\n cellRendererFramework: params => {\n return (\n \n {getNameFromSrn(params.value)}\n \n )\n },\n },\n }}\n />\n
    \n
    \n {this.hasUberPolicy() && (\n \n )}\n
    \n \n
    \n )}\n \n \n Optimal Least Privilege Policy\n \n \n {this.props.uberPolicy.get('loading') ? (\n \n ) : (\n \n )}\n \n \n
    \n
    \n )\n }\n}\n\nEffectivePermissionWidget.defaultProps = {\n usedPermissions: false,\n}\n\nEffectivePermissionWidget.propTypes = {\n effectivePermissions: ImmutablePropTypes.list,\n fetchEffectivePermissionsForActor: PropTypes.func.isRequired,\n fetchUberPolicy: PropTypes.func.isRequired,\n loading: PropTypes.bool,\n loadingUsed: PropTypes.bool,\n onShowPath: PropTypes.func,\n srn: PropTypes.string.isRequired,\n theme: themeShape,\n uberPolicy: ImmutablePropTypes.contains({\n data: PropTypes.object,\n loading: PropTypes.bool,\n error: PropTypes.string,\n }),\n usedEffectivePermissions: ImmutablePropTypes.list,\n usedPermissions: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n loading: selectEffectivePermissionsLoading,\n loadingUsed: selectUsedEffectivePermissionsLoading,\n effectivePermissions: selectEffectivePermissions,\n usedEffectivePermissions: selectUsedEffectivePermissions,\n uberPolicy: selectUberPolicy,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n fetchEffectivePermissionsForActor,\n fetchUberPolicy,\n },\n dispatch\n )\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(themeable(EffectivePermissionWidget))\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n canAssumeRoles: {\n id: 'app.containers.AccessActivity.canAssumeRoles',\n defaultMessage: 'Can Assume Roles',\n },\n canBeAssumedBy: {\n id: 'app.containers.AccessActivity.canBeAssumedBy',\n defaultMessage: 'Resources that can Access/Assume this Role',\n },\n groupMemberships: {\n id: 'app.containers.AccessActivity.groupMemberships',\n defaultMessage: 'Group Memberships',\n },\n directAttachedPolicies: {\n id: 'app.containers.AccessActivity.directAttachedPolicies',\n defaultMessage: 'RBAC or Direct Attached',\n },\n scps: {\n id: 'app.containers.AccessActivity.scps',\n defaultMessage: 'Global Policies',\n },\n instanceProfiles: {\n id: 'app.containers.Access.instanceProfiles',\n defaultMessage: 'Instance Profiles',\n },\n servicePrincipals: {\n id: 'app.containers.Access.servicePrincipals',\n defaultMessage: 'Service Principals',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport BorderedCard from 'components/BorderedCard'\nimport DataTable from 'components/DataTable'\nimport IHelp from 'containers/IHelp'\nimport messages from 'containers/Access/messages'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport TextLink from 'components/TextLink'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport _ from 'lodash'\n\nclass DirectPolicyWidget extends React.Component {\n styles = {\n title: {\n fontSize: '14px',\n fontWeight: '300',\n borderBottom: '1px solid #eee',\n marginRight: '0px',\n },\n body: {\n alignItems: 'start',\n paddingTop: '5px',\n height: 'calc(100% - 10px)',\n background: 'none',\n },\n }\n\n formatData = () => {\n const transitionNullVals = vals => {\n if (vals) {\n vals.forEach(val => {\n if (val && !_.isEmpty(val)) {\n _.keys(val).forEach(key => {\n if (!val[key]) {\n val[key] = '-'\n }\n })\n }\n })\n }\n return vals || []\n }\n const data = this.props.policies.get('data').map(policy => {\n let guy = {\n name: policy.name,\n data: policy,\n }\n if (policy.rbac) {\n guy.resourcePath = policy.rbac.resourcePath\n guy.srn = policy.srn\n if (policy.rbac.resourcePathEnd === this.props.account) {\n guy.data.isRoot = true\n guy.resourcePathDisplay = `(Root) ${guy.resourcePath}`\n } else {\n guy.resourcePathDisplay = `${guy.resourcePath}`\n }\n guy.resourceType = _.startCase(policy.rbac.resourceType)\n } else {\n guy.resourcePathDisplay = ''\n guy.resourcePath = null\n guy.resourceType = null\n guy.srn = policy.srn\n }\n guy.showPolicy = true\n guy.policyType = policy.type\n return guy\n })\n\n return transitionNullVals(data)\n }\n\n getConfig = () => {\n return {\n data: {\n hide: true,\n },\n srn: {\n hide: true,\n },\n isRoot: {\n hide: true,\n },\n showPolicy: {\n width: 120,\n minWidth: 120,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n return (\n {\n this.props.onClick(params.data.data)\n }}\n >\n Show Policy\n \n )\n },\n },\n resourcePath: {\n hide: true,\n },\n resourcePathDisplay: {\n headerName: 'Resource Path',\n },\n }\n }\n\n handleDoubleClick = row => {\n if (row.srn) {\n this.props.push(getNodeViewPushParams(row.srn, getTypeFromSrn(row.srn)))\n }\n }\n\n render() {\n return (\n \n
    \n \n   \n \n
    \n
    \n {this.props.policies.get('isLoading') ? (\n \n \n
    \n ) : (\n \n )}\n \n
    \n )\n }\n}\n\nDirectPolicyWidget.propTypes = {\n policies: ImmutablePropTypes.map,\n onClick: PropTypes.func,\n push: PropTypes.func,\n theme: themeShape,\n account: PropTypes.string,\n}\n\nexport default themeable(DirectPolicyWidget)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport hoistNonReactStatics from 'hoist-non-react-statics'\n\nimport getInjectors from './sagaInjectors'\n\n/**\n * Dynamically injects more than one saga\n *\n * @param {array} sagas array of objects that have same form as injectSagas hoc\n *\n */\nexport default ({ sagas }) => WrappedComponent => {\n class InjectMultipleSagas extends React.Component {\n static WrappedComponent = WrappedComponent\n static contextTypes = {\n store: PropTypes.object.isRequired,\n }\n static displayName = `withMultipleSagas(${WrappedComponent.displayName ||\n WrappedComponent.name ||\n 'Component'})`\n\n constructor(props, context) {\n super(props, context)\n this.injectors = getInjectors(this.context.store)\n const { injectSaga } = this.injectors\n sagas.forEach(({ key, saga, mode }) => {\n injectSaga(key, { saga, mode }, this.props)\n })\n }\n componentWillUnmount() {\n const { ejectSaga } = this.injectors\n sagas.forEach(({ key }) => {\n ejectSaga(key)\n })\n }\n\n render() {\n return \n }\n }\n\n return hoistNonReactStatics(InjectMultipleSagas, WrappedComponent)\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport hoistNonReactStatics from 'hoist-non-react-statics'\n\nimport getInjectors from './reducerInjectors'\n\n/**\n * Dynamically can inject more than one reducer\n * @param {array} reducers a list of reducers having same arguments as for injectReducer hoc\n */\nexport default ({ reducers }) => WrappedComponent => {\n class MultiReducerInjector extends React.Component {\n static WrappedComponent = WrappedComponent\n static contextTypes = {\n store: PropTypes.object.isRequired,\n }\n static displayName = `withMultipleReducers(${WrappedComponent.displayName ||\n WrappedComponent.name ||\n 'Component'})`\n\n constructor(props, context) {\n super(props, context)\n const injectors = getInjectors(this.context.store)\n const { injectReducer } = injectors\n reducers.forEach(({ key, reducer }) => injectReducer(key, reducer))\n }\n\n render() {\n return \n }\n }\n\n return hoistNonReactStatics(MultiReducerInjector, WrappedComponent)\n}\n","export const GET_CAN_ASSUME_ROLES = 'app/Access/GET_CAN_ASSUME_ROLES'\nexport const ERR_CAN_ASSUME_ROLES = 'app/Access/ERR_CAN_ASSUME_ROLES'\nexport const SET_CAN_ASSUME_ROLES = 'app/Access/SET_CAN_ASSUME_ROLES'\n\nexport const GET_CAN_BE_ASSUMED_BY = 'app/Access/GET_CAN_BE_ASSUMED_BY'\nexport const ERR_CAN_BE_ASSUMED_BY = 'app/Access/ERR_CAN_BE_ASSUMED_BY'\nexport const SET_CAN_BE_ASSUMED_BY = 'app/Access/SET_CAN_BE_ASSUMED_BY'\n\nexport const GET_GROUP_MEMBERSHIPS = 'app/Access/GET_GROUP_MEMBERSHIPS'\nexport const ERR_GROUP_MEMBERSHIPS = 'app/Access/ERR_GROUP_MEMBERSHIPS'\nexport const SET_GROUP_MEMBERSHIPS = 'app/Access/SET_GROUP_MEMBERSHIPS'\n\nexport const GET_DIRECT_ATTACHED_POLICIES =\n 'app/Access/GET_DIRECT_ATTACHED_POLICIES'\nexport const ERR_DIRECT_ATTACHED_POLICIES =\n 'app/Access/ERR_DIRECT_ATTACHED_POLICIES'\nexport const SET_DIRECT_ATTACHED_POLICIES =\n 'app/Access/SET_DIRECT_ATTACHED_POLICIES'\n\nexport const GET_SCPS = 'app/Access/GET_SCPS'\nexport const ERR_SCPS = 'app/Access/ERR_SCPS'\nexport const SET_SCPS = 'app/Access/SET_SCPS'\n\nexport const GET_INSTANCE_PROFILES = 'app/Access/GET_INSTANCE_PROFILES'\nexport const SET_INSTANCE_PROFILES = 'app/Access/SET_INSTANCE_PROFILES'\nexport const ERR_INSTANCE_PROFILES = 'app/Access/ERR_INSTANCE_PROFILES'\n\nexport const GET_PERMISSION_INFO = 'app/Access/GET_PERMISSION_INFO'\nexport const SET_PERMISSION_INFO = 'app/Access/SET_PERMISSION_INFO'\n","/*\n *\n * Access Activity reducer\n *\n */\n\nimport { fromJS } from 'immutable'\nimport {\n GET_CAN_ASSUME_ROLES,\n SET_CAN_ASSUME_ROLES,\n ERR_CAN_ASSUME_ROLES,\n GET_CAN_BE_ASSUMED_BY,\n ERR_CAN_BE_ASSUMED_BY,\n SET_CAN_BE_ASSUMED_BY,\n GET_GROUP_MEMBERSHIPS,\n SET_GROUP_MEMBERSHIPS,\n ERR_GROUP_MEMBERSHIPS,\n GET_DIRECT_ATTACHED_POLICIES,\n SET_DIRECT_ATTACHED_POLICIES,\n ERR_DIRECT_ATTACHED_POLICIES,\n GET_SCPS,\n SET_SCPS,\n ERR_SCPS,\n GET_INSTANCE_PROFILES,\n SET_INSTANCE_PROFILES,\n ERR_INSTANCE_PROFILES,\n GET_PERMISSION_INFO,\n SET_PERMISSION_INFO,\n} from './constants'\nimport { handleActions } from 'redux-actions'\n\nexport const initialState = fromJS({\n canAssumeRoles: {\n data: null,\n error: false,\n isLoading: false,\n },\n canBeAssumedBy: {\n data: null,\n error: false,\n isLoading: false,\n },\n groupMemberships: {\n data: null,\n error: false,\n isLoading: false,\n },\n directAttachedPolicies: {\n data: null,\n error: false,\n isLoading: false,\n },\n scps: {\n data: null,\n error: false,\n isLoading: false,\n },\n instanceProfiles: {\n data: null,\n error: false,\n isLoading: false,\n },\n permissions: {\n data: {},\n error: false,\n isLoading: false,\n },\n})\n\nconst accessReducer = handleActions(\n {\n [GET_CAN_ASSUME_ROLES]: state =>\n state\n .setIn(['canAssumeRoles', 'error'], false)\n .setIn(['canAssumeRoles', 'isLoading'], true),\n [ERR_CAN_ASSUME_ROLES]: state =>\n state\n .setIn(['canAssumeRoles', 'isLoading'], false)\n .setIn(['canAssumeRoles', 'error'], true),\n [SET_CAN_ASSUME_ROLES]: (state, { payload }) =>\n state\n .setIn(['canAssumeRoles', 'isLoading'], false)\n .setIn(['canAssumeRoles', 'data'], payload.roles),\n\n [GET_CAN_BE_ASSUMED_BY]: state =>\n state\n .setIn(['canBeAssumedBy', 'error'], false)\n .setIn(['canBeAssumedBy', 'isLoading'], true),\n [ERR_CAN_BE_ASSUMED_BY]: state =>\n state\n .setIn(['canBeAssumedBy', 'isLoading'], false)\n .setIn(['canBeAssumedBy', 'error'], true),\n [SET_CAN_BE_ASSUMED_BY]: (state, { payload }) =>\n state\n .setIn(['canBeAssumedBy', 'isLoading'], false)\n .setIn(['canBeAssumedBy', 'data'], payload.actors),\n\n [GET_GROUP_MEMBERSHIPS]: state =>\n state\n .setIn(['groupMemberships', 'error'], false)\n .setIn(['groupMemberships', 'isLoading'], true),\n [ERR_GROUP_MEMBERSHIPS]: state =>\n state\n .setIn(['groupMemberships', 'isLoading'], false)\n .setIn(['groupMemberships', 'error'], true),\n [SET_GROUP_MEMBERSHIPS]: (state, { payload }) =>\n state\n .setIn(['groupMemberships', 'isLoading'], false)\n .setIn(['groupMemberships', 'data'], payload.groups),\n\n [GET_DIRECT_ATTACHED_POLICIES]: state =>\n state\n .setIn(['directAttachedPolicies', 'error'], false)\n .setIn(['directAttachedPolicies', 'isLoading'], true),\n [ERR_DIRECT_ATTACHED_POLICIES]: state =>\n state\n .setIn(['directAttachedPolicies', 'isLoading'], false)\n .setIn(['directAttachedPolicies', 'error'], true),\n [SET_DIRECT_ATTACHED_POLICIES]: (state, { payload }) =>\n state\n .setIn(['directAttachedPolicies', 'isLoading'], false)\n .setIn(['directAttachedPolicies', 'data'], payload.policies),\n\n [GET_SCPS]: state =>\n state.setIn(['scps', 'error'], false).setIn(['scps', 'isLoading'], true),\n [ERR_SCPS]: state =>\n state.setIn(['scps', 'isLoading'], false).setIn(['scps', 'error'], true),\n [SET_SCPS]: (state, { payload }) =>\n state\n .setIn(['scps', 'isLoading'], false)\n .setIn(['scps', 'data'], payload.scps),\n\n [GET_INSTANCE_PROFILES]: state =>\n state\n .setIn(['instanceProfiles', 'error'], false)\n .setIn(['instanceProfiles', 'isLoading'], true),\n [SET_INSTANCE_PROFILES]: (state, { payload }) =>\n state\n .setIn(['instanceProfiles', 'isLoading'], false)\n .setIn(['instanceProfiles', 'data'], payload.profiles),\n [ERR_INSTANCE_PROFILES]: state =>\n state\n .setIn(['instanceProfiles', 'isLoading'], false)\n .setIn(['instanceProfiles', 'error'], true),\n [GET_PERMISSION_INFO]: state =>\n state\n .setIn(['permissions', 'error'], false)\n .setIn(['permissions', 'isLoading'], true),\n\n [SET_PERMISSION_INFO]: (state, { payload }) =>\n state\n .setIn(['permissions', 'isLoading'], false)\n .setIn(['permissions', 'data', payload.srn], fromJS(payload)),\n },\n initialState\n)\n\nexport default accessReducer\n","import { createAction } from 'redux-actions'\nimport {\n GET_CAN_ASSUME_ROLES,\n ERR_CAN_ASSUME_ROLES,\n SET_CAN_ASSUME_ROLES,\n GET_GROUP_MEMBERSHIPS,\n ERR_GROUP_MEMBERSHIPS,\n SET_GROUP_MEMBERSHIPS,\n GET_CAN_BE_ASSUMED_BY,\n ERR_CAN_BE_ASSUMED_BY,\n SET_CAN_BE_ASSUMED_BY,\n GET_DIRECT_ATTACHED_POLICIES,\n ERR_DIRECT_ATTACHED_POLICIES,\n SET_DIRECT_ATTACHED_POLICIES,\n GET_SCPS,\n ERR_SCPS,\n SET_SCPS,\n GET_INSTANCE_PROFILES,\n SET_INSTANCE_PROFILES,\n ERR_INSTANCE_PROFILES,\n GET_PERMISSION_INFO,\n SET_PERMISSION_INFO,\n} from './constants'\n\nexport const getCanAssumeRoles = createAction(GET_CAN_ASSUME_ROLES)\nexport const setCanAssumeRoles = createAction(SET_CAN_ASSUME_ROLES)\nexport const errorCanAssumeRoles = createAction(ERR_CAN_ASSUME_ROLES)\n\nexport const getCanBeAssumedBy = createAction(GET_CAN_BE_ASSUMED_BY)\nexport const setCanBeAssumedBy = createAction(SET_CAN_BE_ASSUMED_BY)\nexport const errorCanBeAssumedBy = createAction(ERR_CAN_BE_ASSUMED_BY)\n\nexport const getGroupMemberships = createAction(GET_GROUP_MEMBERSHIPS)\nexport const setGroupMemberships = createAction(SET_GROUP_MEMBERSHIPS)\nexport const errorGroupMemberships = createAction(ERR_GROUP_MEMBERSHIPS)\n\nexport const getDirectAttachedPolicies = createAction(\n GET_DIRECT_ATTACHED_POLICIES\n)\nexport const setDirectAttachedPolicies = createAction(\n SET_DIRECT_ATTACHED_POLICIES\n)\nexport const errorDirectAttachedPolicies = createAction(\n ERR_DIRECT_ATTACHED_POLICIES\n)\n\nexport const getSCPs = createAction(GET_SCPS)\nexport const setSCPs = createAction(SET_SCPS)\nexport const errorSCPs = createAction(ERR_SCPS)\n\nexport const getInstanceProfiles = createAction(GET_INSTANCE_PROFILES)\nexport const setInstanceProfiles = createAction(SET_INSTANCE_PROFILES)\nexport const errorInstanceProfiles = createAction(ERR_INSTANCE_PROFILES)\n\nexport const getPermissionInfo = createAction(GET_PERMISSION_INFO)\nexport const setPermissionInfo = createAction(SET_PERMISSION_INFO)\n","import _ from 'lodash'\nimport { all, takeLatest, put, call } from 'redux-saga/effects'\nimport gql from 'graphql-tag'\nimport { getClient } from 'apolloClient'\nimport {\n GET_RESOURCE_CAN_ASSUME_ROLES,\n GET_IDENTITY_GROUP_MEMBERSHIPS,\n GET_IDENTITY_DIRECT_ATTACHED_POLICIES,\n GET_ROLE_CAN_BE_ASSUMED_BY,\n} from 'static-queries'\nimport {\n metadataToObj,\n getCloudFromSrn,\n getWhateverFromSrn,\n} from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport {\n setCanAssumeRoles,\n errorCanAssumeRoles,\n setCanBeAssumedBy,\n errorCanBeAssumedBy,\n setGroupMemberships,\n errorGroupMemberships,\n setDirectAttachedPolicies,\n errorDirectAttachedPolicies,\n setSCPs,\n errorSCPs,\n setInstanceProfiles,\n errorInstanceProfiles,\n setPermissionInfo,\n} from './actions'\nimport {\n GET_CAN_ASSUME_ROLES,\n GET_CAN_BE_ASSUMED_BY,\n GET_GROUP_MEMBERSHIPS,\n GET_DIRECT_ATTACHED_POLICIES,\n GET_SCPS,\n GET_INSTANCE_PROFILES,\n GET_PERMISSION_INFO,\n} from './constants'\n\nfunction* getAssumeRoles({ action, query, success, error }) {\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n ${query}\n `,\n variables: { criticalResourceSrn: action.payload.srn },\n })\n\n const alertLogs = _.get(response, ['data', 'AlertLogs', 'items'])\n if (alertLogs === undefined) {\n throw 'Error: response did not return any alertLogs'\n }\n\n const roles = alertLogs\n .flatMap(alertLog => {\n // set path on each resource, and then return so we'll be filtering\n // resources\n const { path, conditions, resourceSetFull } = alertLog\n resourceSetFull.forEach(resource => {\n resource.path = path\n resource.conditions = conditions\n })\n return resourceSetFull\n })\n .filter(resource => 'Role' === resource.label)\n yield put(success({ roles }))\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error('Error getting can assume roles for selected node ', err)\n yield put(error())\n }\n}\n\n/**\n * Get all the roles a user can assume\n */\nfunction* getCanAssumeRoles(action) {\n const GET_CAN_ASSUME_ROLES_QUERY = `\n query getCanAssumeRoles($srn: String!) {\n Actors(where: {\n srn: {value: $srn}\n }) {\n items {\n srn\n canAssumeRole {\n items {\n name: roleName\n srn: roleSrn\n how\n }\n }\n }\n }\n }\n `\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n ${GET_CAN_ASSUME_ROLES_QUERY}\n `,\n variables: { srn: action.payload.srn },\n })\n\n const roles = _.get(response, [\n 'data',\n 'Actors',\n 'items',\n 0,\n 'canAssumeRole',\n 'items',\n ])\n\n if (!roles) {\n yield put(errorCanAssumeRoles())\n } else {\n yield put(setCanAssumeRoles({ roles: roles }))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error getting canBeAssumedBy ', e)\n yield put(errorCanAssumeRoles())\n }\n}\n\n/**\n * Get all the things that can assume some resource (probably resource is\n * a role)\n */\nfunction* getCanBeAssumedBy(action) {\n const GET_CAN_BE_ASSUMED_BY_QUERY = `\n query getCanGetAssumedBy($srn: String!) {\n Roles(where: {\n srn: {value: $srn}\n }) {\n items {\n roleAssumableBy {\n items {\n srn: actorSrn\n name: actorName\n how\n }\n }\n }\n }\n }\n `\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n ${GET_CAN_BE_ASSUMED_BY_QUERY}\n `,\n variables: { srn: action.payload.srn },\n })\n\n const actors = _.get(response, [\n 'data',\n 'Roles',\n 'items',\n 0,\n 'roleAssumableBy',\n 'items',\n ])\n\n if (!actors) {\n yield put(errorCanBeAssumedBy())\n } else {\n yield put(setCanBeAssumedBy({ actors: actors }))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error getting canAssumedBeBy ', e)\n yield put(errorCanBeAssumedBy())\n }\n}\n\nfunction* getGroupMemberships(action) {\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n ${GET_IDENTITY_GROUP_MEMBERSHIPS}\n `,\n variables: { srn: action.payload.srn },\n })\n\n const identity = _.get(response, ['data', 'Identities', 'items', [0]])\n if (identity === undefined) {\n throw 'Error: response did not return an identity item'\n }\n\n const groups = _.get(identity, ['isMemberOf', 'items'])\n if (groups === undefined) {\n throw 'Error: response did not return a list of groups'\n }\n\n groups.forEach(group => {\n group.path = JSON.stringify([action.payload.srn])\n group.conditions = '[]'\n })\n yield put(setGroupMemberships({ groups }))\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Error getting group memberships for selected node ', err)\n yield put(errorGroupMemberships())\n }\n}\n\nconst GET_GCP_IDENTITY_DIRECT_ATTACHED_POLICIES = `\nquery GET_GCP_IDENTITY_DIRECT_ATTACHED_POLICIES($srn: String!){ \n Users (where: {\n srn: {value: $srn}\n }) {\n items {\n isPartOfPolicyEntry {\n items {\n hasPermissionList {\n items {\n Name: name\n }\n }\n isPartOfPolicyVersion {\n items {\n isPartOfPolicy {\n items {\n srn\n account\n cloudType\n type\n label\n metadata\n __typename\n isAttachedTo {\n items {\n ResourcePath: name\n ResourceSRN: srn\n ...on Account {\n ResourceType: type\n }\n ...on Organizationalunit {\n ResourceType: type\n }\n ...on Datacontainer {\n ResourceType: type\n }\n ...on Datastore {\n ResourceType: type\n }\n \n }\n }\n }\n }\n }\n }\n }\n }\n isMemberOf {\n items {\n Group: name\n GroupSRN: srn\n isPartOfPolicyEntry {\n items {\n hasPermissionList {\n items {\n Name: name\n }\n }\n isPartOfPolicyVersion {\n items {\n isPartOfPolicy {\n items {\n srn\n account\n cloudType\n label\n metadata\n __typename\n isAttachedTo {\n items {\n ResourcePath: name\n ResourceSRN: srn\n ...on Account {\n ResourceType: type\n }\n ...on Organizationalunit {\n ResourceType: type\n }\n ...on Datacontainer {\n ResourceType: type\n }\n ...on Datastore {\n ResourceType: type\n }\n \n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n`\n\nfunction* getPolicyVersionJSON(policy) {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n query getPolicyVersionsData {\n Policies(\n where: { srn: { value: \"${policy.srn}\"}}\n ) {\n items {\n srn\n hasPolicyVersion(where:{active: {op: EQ value:true}}){\n count\n items{\n type\n policyJSON\n }\n }\n }\n }\n }\n `,\n })\n\n const json = _.get(response, [\n 'data',\n 'Policies',\n 'items',\n '0',\n 'hasPolicyVersion',\n 'items',\n '0',\n 'policyJSON',\n ])\n policy.json = json\n return policy\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error(`Unable to get policy version json ${err}`)\n }\n}\n\nfunction* getDirectAttachedPolicies(action) {\n const { srn } = action.payload\n const isGCPNode = srn && srn.includes('gcp')\n const isUser = getTypeFromSrn(srn) === 'User'\n if (isGCPNode && isUser) {\n try {\n const client = yield getClient()\n let response = yield client.query({\n query: gql`\n ${GET_GCP_IDENTITY_DIRECT_ATTACHED_POLICIES}\n `,\n variables: { srn: action.payload.srn },\n })\n\n const isPartOfPolicyEntry =\n _.get(response, [\n 'data',\n 'Users',\n 'items',\n '0',\n 'isPartOfPolicyEntry',\n 'items',\n ]) || []\n\n const isMemberOf =\n _.get(response, [\n 'data',\n 'Users',\n 'items',\n '0',\n 'isMemberOf',\n 'items',\n ]) || []\n\n const gcpUserPolicies = isPartOfPolicyEntry\n .map(entry => {\n let policy = _.get(entry, [\n 'isPartOfPolicyVersion',\n 'items',\n '0',\n 'isPartOfPolicy',\n 'items',\n '0',\n ])\n\n const attached = _.get(entry, [\n 'isPartOfPolicyVersion',\n 'items',\n '0',\n 'isPartOfPolicy',\n 'items',\n '0',\n 'isAttachedTo',\n 'items',\n '0',\n ])\n\n if (!policy || !attached) {\n return null\n }\n\n return {\n name: _.get(entry, ['hasPermissionList', 'items', '0', 'Name']),\n srn: policy.srn,\n account: policy.account,\n cloudType: policy.cloudType,\n label: policy.label,\n type: policy.type,\n metadata: policy.metadata,\n __typename: policy.__typename,\n path: JSON.stringify([policy.srn]),\n conditions: '[]',\n rbac: {\n name: _.get(attached, ['ResourcePath']),\n resourcePath: _.get(attached, ['ResourcePath']),\n resourcePathEnd: _.get(attached, ['ResourcePath']),\n resourceType: _.get(attached, ['ResourceType']),\n srn: _.get(attached, ['ResourceSRN']),\n },\n }\n })\n .filter(entry => !!entry)\n\n let gcpMemberPolicies = []\n isMemberOf.forEach(entry => {\n const group = entry.Group\n entry.isPartOfPolicyEntry.items.forEach(entri => {\n const policy = _.get(entri, [\n 'isPartOfPolicyVersion',\n 'items',\n '0',\n 'isPartOfPolicy',\n 'items',\n '0',\n ])\n const attached = _.get(entri, [\n 'isPartOfPolicyVersion',\n 'items',\n '0',\n 'isPartOfPolicy',\n 'items',\n '0',\n 'isAttachedTo',\n 'items',\n '0',\n ])\n\n if (!policy || !attached) {\n return\n }\n\n gcpMemberPolicies.push({\n name: _.get(entri, ['hasPermissionList', 'items', '0', 'Name']),\n srn: policy.srn,\n account: policy.account,\n cloudType: policy.cloudType,\n label: policy.label,\n metadata: policy.metadata,\n __typename: policy.__typename,\n path: JSON.stringify([policy.srn]),\n conditions: '[]',\n group,\n rbac: {\n name: _.get(attached, ['ResourcePath']),\n resourcePath: _.get(attached, ['ResourcePath']),\n resourcePathEnd: _.get(attached, ['ResourcePath']),\n resourceType: _.get(attached, ['ResourceType']),\n srn: _.get(attached, ['ResourceSRN']),\n },\n })\n })\n })\n\n let allPolicies = [...gcpUserPolicies, ...gcpMemberPolicies]\n\n yield put(setDirectAttachedPolicies({ policies: allPolicies }))\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n 'Error getting direct attached policies for selected GCP node ',\n error\n )\n yield put(errorDirectAttachedPolicies())\n }\n } else {\n try {\n const client = yield getClient()\n const response = yield client.query({\n query: gql`\n ${GET_IDENTITY_DIRECT_ATTACHED_POLICIES}\n `,\n variables: { srn: action.payload.srn },\n })\n\n const identity = _.get(response, ['data', 'Resources', 'items', [0]])\n if (identity === undefined) {\n throw 'Error: response did not return an resource item'\n }\n\n const policies = _.get(identity, ['hasAttached', 'items'])\n if (policies === undefined) {\n throw 'Error: response did not return a list of policies'\n }\n\n for (let policy of policies) {\n policy.path = JSON.stringify([policy.srn])\n policy.conditions = '[]'\n // if meta data value scope is here and is for azure, try and find some additional info\n if (\n policy.metadata &&\n getCloudFromSrn(action.payload.srn) === 'azure'\n ) {\n // if not one of these types, the type should be named \"direct\"\n const chainTypes = [\n 'managementGroups',\n 'subscriptions',\n 'resourceGroups',\n 'storageAccounts',\n ]\n\n const scope = policy.metadata.find(meta =>\n meta.includes('roleAssignment.properties.scope:')\n )\n\n if (scope) {\n const scopeVal = scope.substring(scope.indexOf(':') + 1)\n const splits = scopeVal.split('/').splice(1)\n let pathChain = []\n if (splits.length > 2) {\n let index = 0\n for (const split of splits) {\n if (\n chainTypes.includes(split) &&\n splits[index + 1] &&\n index < splits.length - 2\n ) {\n const pathResource = yield client.query({\n query: gql`\n query getResource($val: String!) {\n Resources(\n where: { resourceId: { op: ENDS_WITH, value: $val } }\n ) {\n items {\n name\n srn\n }\n }\n }\n `,\n variables: { val: splits[index + 1] },\n })\n const pathResourceVal = _.get(\n pathResource,\n ['data', 'Resources', 'items', 0],\n false\n )\n if (pathResourceVal && pathResourceVal.name) {\n pathChain.push(pathResourceVal.name)\n } else {\n pathChain.push(splits[index + 1])\n }\n }\n index++\n }\n }\n\n const type = chainTypes.includes(splits[splits.length - 2])\n ? splits[splits.length - 2]\n : 'directResource'\n let path = splits[splits.length - 1]\n const response = yield client.query({\n query: gql`\n query getResource($val: String!) {\n Resources(\n where: { resourceId: { op: ENDS_WITH, value: $val } }\n ) {\n items {\n name\n resourceId\n srn\n }\n }\n }\n `,\n variables: { val: path },\n })\n\n const resource = _.get(\n response,\n ['data', 'Resources', 'items', 0],\n false\n )\n const pathEnd = path\n if (resource.name) {\n path = resource.name\n }\n\n if (pathChain.length > 0) {\n path = `${pathChain.reduce((totalPath, thisPath) => {\n if (!totalPath) {\n return `${thisPath}`\n } else {\n return `${totalPath} / ${thisPath}`\n }\n })} / ${path}`\n }\n\n policy.rbac = {\n name: resource.name,\n resourcePath: path,\n resourcePathEnd: pathEnd,\n resourceType: type,\n srn: resource.srn,\n }\n }\n }\n }\n\n yield all(policies.map(policy => call(getPolicyVersionJSON, policy))) // adds the new policyJSON field\n\n yield put(setDirectAttachedPolicies({ policies }))\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(\n 'Error getting direct attached policies for selected node ',\n err\n )\n yield put(errorDirectAttachedPolicies())\n }\n }\n}\n\nconst DIRECT_ATTACHED_POLICIES_FRAGMENT = `\nfragment directAttachedPoliciesFields on Resource {\n srn\n name\n label\n hasAttached {\n items {\n srn\n cloudType\n account\n name\n metadata\n }\n }\n}\n`\n\nexport function* getSCPs(action) {\n const client = yield getClient()\n try {\n const lookupUserResponse = yield client.query({\n query: gql`\n query get_user($srn: String) {\n Resources(where: { srn: { value: $srn } }) {\n items @skip(if: false) {\n srn\n name\n account\n cloudType\n }\n }\n }\n `,\n variables: {\n srn: action.payload.srn,\n },\n })\n const resource = _.get(lookupUserResponse, [\n 'data',\n 'Resources',\n 'items',\n 0,\n ])\n\n if (resource === undefined) {\n throw 'Resource was not returned when queried for'\n }\n\n const { cloudType, account: accountNumber } = resource\n const accountSrn = `srn:${cloudType}:account::${accountNumber}/Account/${accountNumber}`\n\n const scpLookupResponse = yield client.query({\n variables: { account: accountNumber, accountSrn },\n query: gql`\n ${DIRECT_ATTACHED_POLICIES_FRAGMENT}\n query get_account_scps($account: String, $accountSrn: String) {\n Accounts(where: { srn: { value: $accountSrn } }) {\n items {\n ...directAttachedPoliciesFields\n organizedBy {\n items {\n ...directAttachedPoliciesFields\n organizedBy {\n items {\n ...directAttachedPoliciesFields\n organizedBy {\n items {\n ...directAttachedPoliciesFields\n organizedBy {\n items {\n ...directAttachedPoliciesFields\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n Users(\n where: {\n srn: {\n and: [\n { op: CONTAINS, value: \"Root\" }\n { op: CONTAINS, value: $account }\n ]\n }\n }\n ) {\n items {\n ...directAttachedPoliciesFields\n }\n }\n }\n `,\n })\n\n const account = _.get(\n scpLookupResponse,\n ['data', 'Accounts', 'items', 0],\n {}\n )\n const accountSCPs = _.get(account, ['hasAttached', 'items'], [])\n accountSCPs.forEach(scp => {\n scp.path = JSON.stringify([account.srn])\n scp.conditions = '[]'\n })\n\n const rootUser = _.get(scpLookupResponse, ['data', 'Users', 'items', 0])\n const rootUserSCPs = _.get(rootUser, ['hasAttached', 'items'], [])\n rootUserSCPs.forEach(scp => {\n scp.path = JSON.stringify([action.payload.srn, rootUser.srn])\n scp.conditions = '[]'\n })\n\n const visitedOUs = []\n const parentOUScpPolicies = getSCPsfromParentOrgUnit({\n resource: account,\n visitedOUs,\n path: [action.payload.srn, account.srn],\n })\n\n // parent OUs can be in a big tree! but we can't fetch all the way up the tree at once, so\n // we need to figure out if there are more, and them keep fetching until we get them all\n const ous = _.get(account, ['organizedBy', 'items'])\n\n // find if there's any OUs in the current result we didnt fetch the parents for\n let ousWithoutParents = []\n findOUsWithoutFetchedParents({\n orgUnits: ous,\n currentList: ousWithoutParents, // it'll populate this list,\n path: [action.payload.srn, account.srn],\n })\n\n while (ousWithoutParents.length > 0) {\n // if there were some OUs without parents, fetch the parents\n const parentOUs = yield fetchMoreParentOUs({\n fromChildren: ousWithoutParents.map(ou => ou.srn),\n excludeList: visitedOUs,\n })\n\n // for each newly fetched OU, find the SCP policies\n for (let parentOU of parentOUs) {\n const path = ousWithoutParents\n .filter(ou => ou.srn === parentOU.srn)\n .map(ou => ou.path)[0]\n\n parentOU.path = path\n\n const moreParentOUScpPolicies = getSCPsfromParentOrgUnit({\n resource: parentOU,\n visitedOUs,\n path,\n })\n\n // add them to our list of SCP policies\n moreParentOUScpPolicies.forEach(scp => parentOUScpPolicies.push(scp))\n }\n\n // now see if there are even MORE ous we didn't fetch the parents for\n ousWithoutParents.length = 0\n findOUsWithoutFetchedParents({\n orgUnits: parentOUs,\n currentList: ousWithoutParents,\n path: ['?'],\n })\n }\n\n const allSCPPolicies = _.uniqBy(\n [...accountSCPs, ...rootUserSCPs, ...parentOUScpPolicies],\n policy => policy.srn\n )\n\n yield put(setSCPs({ scps: allSCPPolicies }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error getting SCPs for selected node', e)\n yield put(errorSCPs())\n }\n}\n\n/**\n * Each account can be part of an OrganizationalUnit (OU), and those organizational\n * units can in turn be owned by other OUs, creating a tree of OUs with accounts at\n * the botttom.\n *\n * This method traverses up the tree and pulls the direct attached policies off the\n * OUs and returns them.\n */\nconst getSCPsfromParentOrgUnit = ({ resource, visitedOUs, path }) => {\n const allScpPolicies = []\n const orgUnits = _.get(resource, ['organizedBy', 'items'])\n\n // if we can't tell what the OU is orgnaized by, just return, perhaps the data\n // not available\n if (orgUnits === undefined) {\n return allScpPolicies\n }\n\n // check each OU the thing is orgnaized by\n for (let orgUnit of orgUnits) {\n path.push(orgUnit.srn)\n\n // if we've seen the OU before, don't re-add the OU's policies\n if (!_.includes(visitedOUs, orgUnit.srn)) {\n // keep track of the OUs we've seen\n visitedOUs.push(orgUnit.srn)\n\n // find the direct attached SCP policies, and then add them to our result\n const scpPolicies = _.get(orgUnit, ['hasAttached', 'items'])\n if (scpPolicies === undefined) {\n throw (\n 'Could not get scp Policies from resource: ' + JSON.stringify(orgUnit)\n )\n }\n\n for (let scpPolicy of scpPolicies) {\n allScpPolicies.push({\n ...scpPolicy,\n conditions: '[]',\n path: JSON.stringify(path),\n })\n }\n\n // now get the SCP policies from the parent OU and also add those to the result\n const parentScpPolicies = getSCPsfromParentOrgUnit({\n resource: orgUnit,\n visitedOUs,\n path,\n })\n for (let parentScpPolicy of Object.values(parentScpPolicies)) {\n allScpPolicies.push({\n ...parentScpPolicy,\n })\n }\n }\n\n path.pop()\n }\n\n // now we found all the SCP policies up the tree!\n return allScpPolicies\n}\n\n/**\n * traverse the object containig OUs, find ones that don't have an organizedBy key,\n * it means we didn't fetch the parent OUs\n */\nconst findOUsWithoutFetchedParents = ({ orgUnits, currentList, path }) => {\n const parents = []\n for (let orgUnit of orgUnits) {\n if (!orgUnit.path) {\n orgUnit.path = [...path]\n }\n if (!orgUnit.path.includes(orgUnit.srn)) {\n orgUnit.path.push(orgUnit.srn)\n }\n\n if (orgUnit.organizedBy === undefined) {\n currentList.push(orgUnit)\n } else {\n orgUnit.organizedBy.items.forEach(item => {\n item.path = orgUnit.path\n parents.push(item)\n })\n }\n }\n if (parents.length > 0) {\n findOUsWithoutFetchedParents({ orgUnits: parents, currentList, path })\n }\n}\n\n/**\n * There's no limit to how deeply you can nest OUs, and we don't have a way in graphql\n * to say, \"Just keep going up the tree until there's no more\", so we can just keep\n * querying for more and more until we get to the top.\n *\n * This starts at the children, gets all the parents, but excluding parents we maybe\n * have seen before\n *\n * @param fromChildren list of children SRNs to fetch from\n * @param excludeList list of parentSRNs not to fetch\n */\nconst fetchMoreParentOUs = async ({ fromChildren, excludeList }) => {\n const client = await getClient()\n const response = await client.query({\n variables: { fromChildren, excludeList },\n query: gql`\n ${DIRECT_ATTACHED_POLICIES_FRAGMENT}\n query getParentOUs($fromChildren: [String], $excludeList: [String]) {\n OrganizationalUnits(\n where: {\n srn: {\n and: [\n { op: IN_LIST, values: $fromChildren }\n { op: NOT_IN_LIST, values: $excludeList }\n ]\n }\n }\n ) {\n items {\n ...directAttachedPoliciesFields\n organizedBy(\n where: { srn: { op: NOT_IN_LIST, values: $excludeList } }\n ) {\n items {\n ...directAttachedPoliciesFields\n organizedBy(\n where: { srn: { op: NOT_IN_LIST, values: $excludeList } }\n ) {\n items {\n ...directAttachedPoliciesFields\n organizedBy(\n where: { srn: { op: NOT_IN_LIST, values: $excludeList } }\n ) {\n items {\n ...directAttachedPoliciesFields\n organizedBy(\n where: {\n srn: { op: NOT_IN_LIST, values: $excludeList }\n }\n ) {\n items {\n ...directAttachedPoliciesFields\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n `,\n })\n\n const parentOUs = _.get(response, ['data', 'OrganizationalUnits', 'items'])\n if (parentOUs === undefined) {\n throw 'could not get list of parent OUs from response'\n }\n\n return parentOUs\n}\n\nfunction* getInstanceProfileForAWS(action) {\n const { resource } = action.payload\n const { srn } = resource\n\n const client = yield getClient()\n const result = yield client.query({\n query: gql`\n query getInstanceProfileForCompute($srn: String) {\n Compute(where: { srn: { value: $srn } }) {\n items {\n hasAttached {\n items {\n name\n srn\n }\n }\n }\n }\n }\n `,\n variables: { srn },\n })\n\n const roles = _.get(result, [\n 'data',\n 'Compute',\n 'items',\n 0,\n 'hasAttached',\n 'items',\n ])\n if (!roles) {\n throw new Error('Could not get attached roles from response')\n }\n yield put(setInstanceProfiles({ profiles: roles }))\n}\n\nfunction* getServicePrincipalsForAzure(action) {\n const { resource } = action.payload\n const client = yield getClient()\n const result = yield client.query({\n variables: { srn: resource.srn },\n query: gql`\n query getComputeServicePrincipals($srn: String) {\n Compute(where: { srn: { value: $srn } }) {\n items {\n canBeAccessedBy(where: { label: { value: \"IdentityProvider\" } }) {\n items {\n srn\n name\n friendlyName\n }\n }\n }\n }\n }\n `,\n })\n\n const path = ['data', 'Compute', 'items', 0, 'canBeAccessedBy', 'items']\n const identityProviders = _.get(result, path)\n if (!identityProviders) {\n throw new Error(`Could not retrive ${path.join('.')} from result`)\n }\n\n yield put(setInstanceProfiles({ profiles: identityProviders }))\n}\n\n/**\n * for AWS computes, the instance profile's Role ARN\n */\nfunction* getInstanceProfiles(action) {\n try {\n const { resource } = action.payload\n if (!resource) {\n throw new Error(\"action paylaod did not have field 'resource'\")\n }\n const { srn, cloudType } = resource\n switch (cloudType) {\n case 'aws':\n yield getInstanceProfileForAWS(action)\n break\n case 'azure':\n yield getServicePrincipalsForAzure(action)\n break\n default:\n // eslint-disable-next-line no-console\n console.warn(\n `no way to get instance profiles for resource ${srn} cloudType ${cloudType}`\n )\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('There was an error loading instance profiles', e)\n yield put(errorInstanceProfiles())\n }\n}\n\nfunction* getPermission(action) {\n try {\n const client = yield getClient()\n const result = yield client.query({\n variables: {\n srn: action.payload,\n },\n query: gql`\n query permissionInfo($srn: String) {\n Permissions(where: { srn: { value: $srn } }) {\n items {\n cloudType\n label\n name\n srn\n metadata\n }\n }\n }\n `,\n })\n\n const permission = _.get(result, ['data', 'Permissions', 'items', 0])\n\n if (!permission) {\n throw new Error('No permission returned')\n }\n yield put(setPermissionInfo(permission))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('There was an error fetching the permission info', e)\n }\n}\n\nfunction* accessSaga() {\n yield all([\n takeLatest(GET_CAN_ASSUME_ROLES, getCanAssumeRoles),\n takeLatest(GET_CAN_BE_ASSUMED_BY, getCanBeAssumedBy),\n takeLatest(GET_GROUP_MEMBERSHIPS, getGroupMemberships),\n takeLatest(GET_DIRECT_ATTACHED_POLICIES, getDirectAttachedPolicies),\n takeLatest(GET_SCPS, getSCPs),\n takeLatest(GET_INSTANCE_PROFILES, getInstanceProfiles),\n takeLatest(GET_PERMISSION_INFO, getPermission),\n ])\n}\n\nexport default accessSaga\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectAccessDomain = state => state.get('access')\n\nexport const selectAccess = createSelector(\n selectAccessDomain,\n state => state || Map()\n)\n\nexport const selectCanAssumeRoles = createSelector(\n selectAccess,\n state => {\n return state.get('canAssumeRoles')\n }\n)\n\nexport const selectCanBeAssumedBy = createSelector(\n selectAccess,\n state => {\n return state.get('canBeAssumedBy')\n }\n)\n\nexport const selectGroupMemberships = createSelector(\n selectAccess,\n state => {\n return state.get('groupMemberships')\n }\n)\n\nexport const selectDirectAttachedPolicies = createSelector(\n selectAccess,\n state => {\n return state.get('directAttachedPolicies')\n }\n)\n\nexport const selectSCPs = createSelector(\n selectAccess,\n state => {\n return state.get('scps')\n }\n)\n\nexport const selectInstanceProfiles = createSelector(\n selectAccess,\n state => {\n return state.get('instanceProfiles')\n }\n)\n\nexport const selectPermissions = createSelector(\n selectAccess,\n state => {\n return state.get('permissions') || Map()\n }\n)\n\nexport default selectAccess\nexport { selectAccessDomain }\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport _ from 'lodash'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\nimport moment from 'moment'\nimport { List } from 'immutable'\nimport { Responsive } from 'react-grid-layout'\nimport SizeMe from 'components/SizeMe'\nimport EffectivePermissionWidget from 'components/EffectivePermissionWidget'\nconst ResponsiveGridLayout = SizeMe(Responsive)\nimport TextLink from 'components/TextLink'\nimport IHelp from 'containers/IHelp'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport CanAccessWidget from 'components/CanAccessWidget'\nimport DirectPolicyWidget from 'components/DirectPolicyWidget'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport injectMultipleSagas from 'utils/injectMultipleSagas'\nimport injectMultipleReducers from 'utils/injectMultipleReducers'\nimport { srnIsCRMActionable } from 'utils/widgetUtils'\nimport { CLOUD_TYPES } from 'appConstants'\nimport ListCard from 'containers/AccessActivity/ListCard'\nimport NodeViewMiniPopout from 'containers/NodeViewMiniPopout'\n\nimport DataTable from 'components/DataTable'\nimport BorderedCard from 'components/BorderedCard'\nimport { TopTitle } from 'components/Card'\nimport messages from './messages'\nimport legacyReducer from 'containers/AccessActivity/reducers'\nimport reducer from './reducers'\nimport legacySaga from 'containers/AccessActivity/sagas'\nimport saga from './sagas'\nimport {\n getNodeViewPushParams,\n exists,\n getNameFromSrn,\n getAccountFromSrn,\n getCloudFromSrn,\n} from 'utils/sonraiUtils'\n\nimport {\n setCriticalResourceMonitorDate,\n getCanAccessData,\n getCanAccessPath,\n setCanAccessPath,\n getEPPaths,\n} from 'containers/AccessActivity/actions'\nimport { toggleResourceMonitoring } from 'containers/NodeSolutionCenter/actions'\n\nimport {\n getCanAssumeRoles,\n getCanBeAssumedBy,\n getGroupMemberships,\n getDirectAttachedPolicies,\n getSCPs,\n getInstanceProfiles,\n getPermissionInfo,\n} from './actions'\n\nimport {\n selectCriticalResourceMonitorDate,\n selectCanAccessData,\n selectCanAccessPaths,\n selectCanAccessPathsLoading,\n selectCanAccessPathsError,\n} from 'containers/AccessActivity/selectors'\n\nimport {\n selectCanAssumeRoles,\n selectCanBeAssumedBy,\n selectGroupMemberships,\n selectDirectAttachedPolicies,\n selectSCPs,\n selectInstanceProfiles,\n selectPermissions,\n} from './selectors'\n\nimport { selectIsMonitored } from 'containers/NodeSolutionCenter/selectors'\n\nimport { selectChangeDetectionProperties } from 'containers/ChangeDetectionManager/selectors'\n\nimport { initialState } from 'containers/AccessActivity/reducers'\nimport ShowPathModal from 'containers/AccessActivity/ShowPathModal'\n\nimport 'react-dates/lib/css/_datepicker.css'\nimport 'containers/AccessActivity/styles.css' // TODO fix this\n\nconst style = {\n crmOverlay: {\n position: 'absolute',\n background: 'rgba(200,200,200,0.48)',\n opacity: '0.7',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n padding: '0.25rem',\n height: '100%',\n },\n marker: {\n width: '100%',\n height: '100%',\n },\n}\n\nconst DATALAYOUT_TYPES = [\n 'DataContainer',\n 'DataObject',\n 'DataStore',\n 'Secret',\n 'SecretStore',\n 'Secret',\n 'EncryptionKey',\n]\n\nclass Access extends React.Component {\n constructor(props) {\n super(props)\n\n this.getAllData(props)\n\n this.state = {\n showPathId: null,\n showPathClassification: null,\n miniNodeViewNodeId: '',\n miniNodeViewOpen: false,\n }\n }\n\n componentDidUpdate(oldProps) {\n if (\n oldProps.date !== this.props.date ||\n oldProps.isMonitored !== this.props.isMonitored\n ) {\n this.getAllData(this.props)\n }\n\n if (\n !oldProps.permissions.getIn(['data', this.state.showPathId]) &&\n this.props.permissions.getIn(['data', this.state.showPathId])\n ) {\n this.setState(currState => ({\n showPathToItem: this.props.permissions\n .getIn(['data', currState.showPathId])\n .toJS(),\n }))\n }\n }\n\n componentWillUnmount() {\n this.props.setCriticalResourceMonitorDate(initialState.get('date'))\n }\n\n getAllData = () => {\n const type = getTypeFromSrn(this.props.nodeId)\n const date = exists(this.props.date)\n ? this.props.date\n : exists(this.props.alertTime)\n ? {\n fromDate: moment\n .utc(parseInt(this.props.alertTime))\n .subtract(1, 'days'),\n toDate: moment.utc(parseInt(this.props.alertTime)),\n }\n : {\n fromDate: moment().subtract(1, 'days'),\n toDate: moment(),\n }\n\n const fromDate = date.fromDate.format('X')\n const toDate = date.toDate.format('X')\n\n const srn = this.props.nodeId\n\n if ('User' === type || 'Compute' === type || 'Role' === type) {\n this.props.getCanAssumeRoles({ srn })\n }\n if ('Role' === type) {\n this.props.getCanBeAssumedBy({ srn })\n }\n\n if ('Role' === type || 'User' === type) {\n this.props.getGroupMemberships({ srn })\n this.props.getDirectAttachedPolicies({ srn })\n }\n\n if ('Role' === type || 'User' === type || DATALAYOUT_TYPES.includes(type)) {\n this.props.getDirectAttachedPolicies({ srn })\n }\n\n if ('Compute' === type) {\n this.props.getInstanceProfiles({ resource: this.props.nodeData })\n }\n this.props.getSCPs({ srn })\n\n this.props.getCanAccessData({\n srn,\n cloudType: this.props.nodeData.cloudType,\n resourceId: this.props.nodeData.resourceId,\n fromDate,\n toDate,\n keyName: srnIsCRMActionable(srn) ? 'actionableBy' : 'hasPermissionTo',\n })\n }\n\n navigateToNodeView = srn => {\n const nodeType = getTypeFromSrn(srn)\n this.props.push(getNodeViewPushParams(srn, nodeType))\n }\n\n onShowPath = (resourceId, classification, conditions) => {\n let fromDate\n let toDate\n if (exists(this.props.date)) {\n fromDate = this.props.date.fromDate.format('YYYY-MM-DD')\n toDate = this.props.date.toDate.format('YYYY-MM-DD')\n } else if (exists(this.props.alertTime)) {\n fromDate = moment\n .utc(parseInt(this.props.alertTime))\n .subtract(1, 'days')\n .format('YYYY-MM-DD')\n toDate = moment.utc(parseInt(this.props.alertTime)).format('YYYY-MM-DD')\n } else {\n fromDate = moment().subtract(1, 'days').format('YYYY-MM-DD')\n toDate = moment().format('YYYY-MM-DD')\n }\n\n if (\n !this.props.canAccessPaths.getIn([\n resourceId,\n classification,\n fromDate,\n conditions,\n ])\n ) {\n const actionableByMode = srnIsCRMActionable(this.props.nodeId)\n\n this.props.getCanAccessPath({\n resourceId: resourceId,\n actionClassification: classification,\n srn: this.props.nodeId,\n conditions: conditions,\n fromDate: fromDate,\n toDate: toDate,\n keyName: actionableByMode ? 'actionableBy' : 'hasPermissionTo',\n })\n }\n\n this.setState({\n showPathId: resourceId,\n showPathClassification: classification,\n showPathConditions: conditions,\n })\n }\n\n onShowPathFromList = ({ item, showPathClassification }) => {\n const { fromDate } = this.getDate()\n const { srn, path, conditions } = item\n\n this.props.setCanAccessPath({\n srn,\n actionClassification: showPathClassification,\n paths: [JSON.parse(path)],\n fromDate: moment(fromDate).format('YYYY-MM-DD'),\n conditions: conditions,\n })\n\n this.setState({\n showPathId: srn,\n showPathClassification: showPathClassification,\n showPathConditions: conditions,\n showPathToItem: { ...item },\n })\n }\n\n onShowPathForEP = effectivePermission => {\n this.props.getPermissionInfo(effectivePermission.permissionSrn)\n const { fromDate } = this.getDate()\n\n const path = effectivePermission.identityChain.split(',')\n path.push(effectivePermission.policySrn)\n this.props.setCanAccessPath({\n srn: effectivePermission.permissionSrn,\n fromDate: moment(fromDate).format('YYYY-MM-DD'),\n actionClassification: '',\n conditions: effectivePermission.policyEntryConditions,\n paths: [path],\n })\n\n this.setState({\n showPathId: effectivePermission.permissionSrn,\n showPathClassification: '',\n showPathConditions: effectivePermission.policyEntryConditions,\n showPathToItem: this.props.permissions.getIn([\n 'data',\n effectivePermission.permissionSrn,\n ])\n ? this.props.permissions\n .getIn(['data', effectivePermission.permissionSrn])\n .toJS()\n : null,\n })\n }\n\n closeShowPath = () => {\n this.setState({\n showPathId: null,\n showPathClassification: null,\n showPathConditions: null,\n showPathToItem: null,\n })\n }\n\n onDoubleClickPathNode = ({ nodes }) => {\n if (!_.isEmpty(nodes)) {\n const srn = _.first(nodes)\n if (srn && srn.startsWith('srn:')) {\n const { origin } = window.location\n const { pathname, search } = getNodeViewPushParams(\n srn,\n getTypeFromSrn(srn)\n )\n if (pathname && search) {\n const url = `${origin}${pathname}?${search}`\n window.open(url, '_blank')\n }\n }\n }\n }\n\n openMiniNodeView = nodeId => {\n this.setState({\n miniNodeViewOpen: true,\n miniNodeViewNodeId: nodeId,\n })\n }\n\n closeMiniNodeView = () => {\n this.setState({\n miniNodeViewOpen: false,\n miniNodeViewNodeId: '',\n })\n }\n\n getModalTitle = () => {\n return 'Actions'\n }\n\n handleDatesChange = params => {\n const { startDate, endDate, value } = params\n if (startDate && endDate) {\n this.props.setCriticalResourceMonitorDate({\n fromDate: startDate,\n toDate: endDate,\n })\n }\n if (!startDate && !endDate && value) {\n this.props.setCriticalResourceMonitorDate({\n fromDate: moment().subtract(value, 'days'),\n toDate: moment(),\n })\n }\n }\n\n getDate = () => {\n const date = exists(this.props.date)\n ? this.props.date\n : exists(this.props.alertTime)\n ? {\n fromDate: moment\n .utc(parseInt(this.props.alertTime))\n .subtract(1, 'days'),\n toDate: moment.utc(parseInt(this.props.alertTime)),\n }\n : {\n fromDate: moment().subtract(1, 'days'),\n toDate: moment(),\n }\n\n return date\n }\n\n getCRMOverlay = () => {\n return (\n
    \n \n Results from this widget are only available if the resource is\n monitored.\n
    \n \n this.props.toggleResourceMonitoring({\n srn: this.props.nodeId,\n isMonitored: this.props.isMonitored,\n })\n }\n >\n Enable Monitoring\n \n \n )\n }\n\n render() {\n const type = getTypeFromSrn(this.props.nodeId)\n\n const date = this.getDate()\n const { fromDate } = date\n\n const actionableByMode =\n srnIsCRMActionable(this.props.nodeId) ||\n (this.state.showPathClassification === 'Authentication' &&\n getTypeFromSrn(this.props.nodeId) === 'Role')\n\n const changeDetectionProperties = this.props.changeDetectionProperties\n const rowHeight = 64\n\n const layout2Col = []\n const layout1Col = []\n\n if ('User' === type) {\n ;[\n { x: 0, y: 0, w: 6, h: 5, i: 'directPolicies' },\n { x: 0, y: 5, w: 4, h: 5, i: 'canAssumeRole' },\n { x: 4, y: 5, w: 1, h: 5, i: 'groupMembership' },\n { x: 5, y: 5, w: 1, h: 5, i: 'scp' },\n { x: 0, y: 0, w: 0, h: 0, i: 'identitiesWithAccess' },\n { x: 0, y: 0, w: 0, h: 0, i: 'canBeAssumedBy' },\n ].forEach(it => layout2Col.push(it))\n ;[\n { x: 0, y: 0, w: 6, h: 4, i: 'directPolicies' },\n { x: 0, y: 4, w: 3, h: 3, i: 'groupMembership' },\n { x: 3, y: 4, w: 3, h: 3, i: 'scp' },\n { x: 0, y: 10, w: 6, h: 4, i: 'canAssumeRole' },\n { x: 0, y: 0, w: 0, h: 0, i: 'identitiesWithAccess' },\n { x: 0, y: 0, w: 0, h: 0, i: 'canBeAssumedBy' },\n ].forEach(it => layout1Col.push(it))\n }\n\n if ('Role' === type) {\n ;[\n { x: 0, y: 0, w: 6, h: 5, i: 'directPolicies' },\n { x: 0, y: 5, w: 4, h: 5, i: 'canAssumeRole' },\n { x: 4, y: 5, w: 1, h: 5, i: 'groupMembership' },\n { x: 5, y: 5, w: 1, h: 5, i: 'scp' },\n { x: 0, y: 10, w: 6, h: 5, i: 'canBeAssumedBy' },\n { x: 0, y: 0, w: 0, h: 0, i: 'identitiesWithAccess' },\n ].forEach(it => layout2Col.push(it))\n ;[\n { x: 0, y: 0, w: 6, h: 4, i: 'directPolicies' },\n { x: 0, y: 4, w: 3, h: 3, i: 'groupMembership' },\n { x: 3, y: 4, w: 3, h: 3, i: 'scp' },\n { x: 0, y: 10, w: 6, h: 4, i: 'canAssumeRole' },\n { x: 0, y: 14, w: 6, h: 4, i: 'canBeAssumedBy' },\n { x: 0, y: 0, w: 0, h: 0, i: 'identitiesWithAccess' },\n ].forEach(it => layout1Col.push(it))\n }\n\n if ('Compute' === type) {\n const layout = [\n { x: 0, y: 0, w: 0, h: 0, i: 'canAssumeRole' },\n { x: 0, y: 0, w: 0, h: 0, i: 'groupMembership' },\n { x: 0, y: 0, w: 0, h: 0, i: 'directPolicies' },\n { x: 0, y: 0, w: 0, h: 0, i: 'canBeAssumedBy' },\n ]\n\n if ('azure' === this.props.nodeData.cloudType) {\n layout.push({ x: 0, y: 0, w: 0, h: 0, i: 'scp' }) // azure don't have SCP\n // so make this full width:\n layout.push({ x: 3, y: 0, w: 6, h: 2, i: 'identitiesWithAccess' })\n } else {\n // otherwise they're side-by-each\n layout.push({ x: 0, y: 0, w: 3, h: 2, i: 'scp' })\n layout.push({ x: 3, y: 0, w: 3, h: 2, i: 'identitiesWithAccess' })\n }\n layout.forEach(it => layout2Col.push(it))\n layout.forEach(it => layout1Col.push(it))\n }\n\n if (DATALAYOUT_TYPES.includes(type)) {\n ;[\n { x: 0, y: 0, w: 0, h: 0, i: 'canAssumeRole' },\n { x: 0, y: 0, w: 0, h: 0, i: 'groupMembership' },\n { x: 0, y: 0, w: 3, h: 4, i: 'directPolicies' },\n { x: 3, y: 0, w: 3, h: 4, i: 'scp' },\n { x: 0, y: 0, w: 0, h: 0, i: 'identitiesWithAccess' },\n { x: 0, y: 0, w: 0, h: 0, i: 'canBeAssumedBy' },\n ].forEach(it => layout2Col.push(it))\n ;[\n { x: 0, y: 0, w: 0, h: 0, i: 'canAssumeRole' },\n { x: 0, y: 0, w: 0, h: 0, i: 'groupMembership' },\n { x: 0, y: 0, w: 3, h: 4, i: 'directPolicies' },\n { x: 3, y: 0, w: 3, h: 4, i: 'scp' },\n { x: 0, y: 0, w: 0, h: 0, i: 'identitiesWithAccess' },\n { x: 0, y: 0, w: 0, h: 0, i: 'canBeAssumedBy' },\n ].forEach(it => layout1Col.push(it))\n }\n\n const renderEffectivePermissions =\n 'User' === type || 'Role' === type || 'Compute' === type\n\n if (renderEffectivePermissions) {\n ;[\n { x: 0, y: 17, w: 3, h: 7, i: 'usedPermissionViewer' },\n { x: 3, y: 17, w: 3, h: 7, i: 'permissionViewer' },\n { x: 0, y: 22, w: 6, h: 8, i: 'resourceViewer' },\n ].forEach(it => layout2Col.push(it))\n ;[\n { x: 0, y: 14, w: 3, h: 6, i: 'usedPermissionViewer' },\n { x: 3, y: 14, w: 3, h: 6, i: 'permissionViewer' },\n { x: 0, y: 18, w: 6, h: 8, i: 'resourceViewer' },\n ].forEach(it => layout1Col.push(it))\n } else {\n ;[\n { x: 0, y: 0, w: 0, h: 0, i: 'usedPermissionViewer' },\n { x: 0, y: 0, w: 0, h: 0, i: 'permissionViewer' },\n { x: 0, y: 10, w: 6, h: 8, i: 'resourceViewer' },\n ].forEach(it => {\n layout1Col.push(it)\n layout2Col.push(it)\n })\n }\n\n let data = this.props.canAssumeRoles.get('data')\n ? this.props.canAssumeRoles.get('data')\n : []\n\n data = data.map(item => ({\n ...item,\n account: getAccountFromSrn(item.srn),\n }))\n\n const cloud = getCloudFromSrn(this.props.nodeId)\n\n return (\n
    \n \n \n \n
    \n {('User' === type || 'Compute' === type || 'Role' === type) && (\n \n
    \n \n \n \n {\n if (!params.data) {\n return null\n }\n return (\n \n this.onShowPathFromList({\n item: {\n srn: params.data.srn,\n name: params.data.name,\n path: JSON.stringify(\n params.data.how\n .split(',')\n .splice(\n 0,\n params.data.how.split(',').length - 1\n )\n ),\n },\n showPathClassification: 'Authentication',\n })\n }\n >\n Show Path\n \n )\n },\n },\n }}\n onDoubleClickRow={item => this.navigateToNodeView(item.srn)}\n />\n
    \n \n )}\n
    \n
    \n {'Role' === type && (\n \n
    \n \n \n \n {\n if (!params.data) {\n return null\n }\n return (\n \n this.onShowPathFromList({\n item: {\n srn: params.data.srn,\n name: params.data.name,\n path: JSON.stringify(\n params.data.how\n .split(',')\n .splice(\n 0,\n params.data.how.split(',').length - 1\n )\n ),\n },\n showPathClassification: 'Authentication',\n })\n }\n >\n Show Path\n \n )\n },\n },\n }}\n data={(this.props.canBeAssumedBy.get('data') || []).map(\n item => ({\n ...item,\n resourceType: getTypeFromSrn(item.srn),\n account: getAccountFromSrn(item.srn),\n })\n )}\n onDoubleClickRow={item => this.navigateToNodeView(item.srn)}\n />\n
    \n \n )}\n
    \n\n
    \n {('Role' === type || 'User' === type) && (\n \n this.onShowPathFromList({\n item,\n showPathClassification: 'Group Membership',\n })\n }\n isLoading={this.props.groupMemberships.get('isLoading')}\n push={this.props.push}\n title={\n \n }\n />\n )}\n
    \n\n
    \n {('Role' === type ||\n 'User' === type ||\n DATALAYOUT_TYPES.includes(type)) && (\n \n this.onShowPathFromList({\n item,\n showPathClassification: 'Direct Policies',\n })\n }\n account={this.props.nodeData.account}\n push={this.props.push}\n />\n )}\n
    \n
    \n \n this.onShowPathFromList({\n item,\n showPathClassification: 'SCP',\n })\n }\n isLoading={this.props.scps.get('isLoading')}\n push={this.props.push}\n title={\n
    \n \n   \n \n
    \n }\n />\n
    \n
    \n {'Compute' === type && (\n this.openMiniNodeView(item.srn)}\n isLoading={this.props.instanceProfiles.get('isLoading')}\n push={this.props.push}\n title={\n 'aws' === this.props.nodeData.cloudType ? (\n \n ) : (\n \n )\n }\n />\n )}\n
    \n
    \n {renderEffectivePermissions && (\n \n )}\n
    \n
    \n {renderEffectivePermissions && (\n \n )}\n
    \n
    \n this.getCRMOverlay()}\n isMonitored={this.props.isMonitored}\n push={this.props.push}\n srn={this.props.nodeId}\n isLocked={\n changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes('hasPermissionTo') ||\n changeDetectionProperties\n .map(x => x.get('keyName'))\n .includes('actionableBy')\n }\n title={actionableByMode ? 'Who & What Can Access' : 'Can Access'}\n canAccessData={this.props.canAccessData.toJS()}\n isLoading={this.props.canAccessData.get('isLoading')}\n onShowPath={this.onShowPath}\n onShowPathFromList={(...args) => {\n this.onShowPathFromList(...args)\n }}\n actionableByMode={actionableByMode}\n />\n
    \n \n
    \n )\n }\n}\n\nAccess.propTypes = {\n alertsCanAccess: ImmutablePropTypes.list,\n alertTime: PropTypes.number,\n canAccessData: ImmutablePropTypes.iterable.isRequired,\n canAccessPaths: ImmutablePropTypes.map.isRequired,\n canAccessPathsLoading: PropTypes.bool,\n canAccessPathsError: PropTypes.bool,\n canAssumeRoles: ImmutablePropTypes.map,\n canBeAssumedBy: ImmutablePropTypes.map,\n changeDetectionProperties: ImmutablePropTypes.iterable,\n crmTickets: ImmutablePropTypes.list.isRequired,\n date: PropTypes.string,\n directAttachedPolicies: ImmutablePropTypes.map,\n getCanAccessPath: PropTypes.func.isRequired,\n getCanAssumeRoles: PropTypes.func.isRequired,\n getCanBeAssumedBy: PropTypes.func.isRequired,\n getCanAccessData: PropTypes.func.isRequired,\n getDirectAttachedPolicies: PropTypes.func.isRequired,\n getEPPaths: PropTypes.func.isRequired,\n getGroupMemberships: PropTypes.func.isRequired,\n getInstanceProfiles: PropTypes.func.isRequired,\n getPermissionInfo: PropTypes.func.isRequired,\n getSCPs: PropTypes.func.isRequired,\n groupMemberships: ImmutablePropTypes.map,\n instanceProfiles: ImmutablePropTypes.map,\n nodeId: PropTypes.string.isRequired,\n nodeData: PropTypes.object.isRequired,\n permissions: ImmutablePropTypes.contains({\n data: ImmutablePropTypes.map,\n }),\n push: PropTypes.func.isRequired,\n scps: ImmutablePropTypes.map,\n setCanAccessPath: PropTypes.func.isRequired,\n setCriticalResourceMonitorDate: PropTypes.func.isRequired,\n toggleResourceMonitoring: PropTypes.func,\n isMonitored: PropTypes.bool,\n}\n\nconst mapStateToProps = createStructuredSelector({\n canAccessPaths: selectCanAccessPaths,\n canAccessData: selectCanAccessData,\n canAssumeRoles: selectCanAssumeRoles,\n canBeAssumedBy: selectCanBeAssumedBy,\n canAccessPathsLoading: selectCanAccessPathsLoading,\n canAccessPathsError: selectCanAccessPathsError,\n changeDetectionProperties: selectChangeDetectionProperties,\n date: selectCriticalResourceMonitorDate,\n directAttachedPolicies: selectDirectAttachedPolicies,\n groupMemberships: selectGroupMemberships,\n scps: selectSCPs,\n instanceProfiles: selectInstanceProfiles,\n isMonitored: selectIsMonitored,\n permissions: selectPermissions,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n setCriticalResourceMonitorDate,\n getCanAccessData,\n getCanAccessPath,\n setCanAccessPath,\n getCanAssumeRoles,\n getGroupMemberships,\n getDirectAttachedPolicies,\n getSCPs,\n getCanBeAssumedBy,\n getEPPaths,\n getInstanceProfiles,\n toggleResourceMonitoring,\n getPermissionInfo,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\nconst withReducer = injectMultipleReducers({\n reducers: [\n {\n key: 'access',\n reducer,\n },\n {\n key: 'accessActivity',\n reducer: legacyReducer,\n },\n ],\n})\nconst withSaga = injectMultipleSagas({\n sagas: [\n { key: 'access', saga: saga },\n { key: 'accessactivity', saga: legacySaga },\n ],\n})\n\nexport default compose(withReducer, withSaga, withConnect)(Access)\n","import loadable from 'utils/loadable'\nexport default loadable(() => import('./index'))\n","export const getBreakpoint = ({ width, breakpoints }) => {\n if (width <= breakpoints.xs) {\n return 'xs'\n } else if (width <= breakpoints.sm) {\n return 'sm'\n } else if (width <= breakpoints.md) {\n return 'md'\n }\n\n return 'lg'\n}\n\nconst breakpointOrder = ['xs', 'sm', 'md', 'lg']\n\nexport const getLayoutForChild = ({ child, width, breakpoints, layouts }) => {\n const breakpoint = getBreakpoint({ width, breakpoints })\n const breakpointIndex = breakpointOrder.indexOf(breakpoint)\n\n const layout = layouts[child.key]\n\n if (layout[breakpoint]) {\n return layout[breakpoint]\n } else {\n for (let i = breakpointIndex; i >= 0; i--) {\n const lowerBreakPoint = breakpointOrder[i]\n if (layout[lowerBreakPoint]) {\n return layout[lowerBreakPoint]\n }\n }\n }\n\n return {\n w: 1,\n }\n}\n\nexport const getLayoutForBreakpoint = ({ width, breakpoints, layout }) => {\n const breakpoint = getBreakpoint({ width, breakpoints })\n const breakpointIndex = breakpointOrder.indexOf(breakpoint)\n\n if (layout[breakpoint]) {\n return layout[breakpoint]\n } else {\n for (let i = breakpointIndex; i >= 0; i--) {\n const lowerBreakPoint = breakpointOrder[i]\n if (layout[lowerBreakPoint]) {\n return layout[lowerBreakPoint]\n }\n }\n }\n\n return []\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport SizeMe from 'components/SizeMe'\nimport Masonry from 'react-masonry-component'\n\nimport { getBreakpoint, getLayoutForChild } from './utils'\nexport class AutoLayout extends React.Component {\n styles = {}\n masonry = null\n\n constructor(props) {\n super(props)\n }\n\n getNumberOfCols = () => {\n const breakpoint = this.getBreakpoint()\n return this.props.cols[breakpoint]\n }\n\n getBreakpoint = () => {\n return getBreakpoint({\n width: this.props.size.width,\n breakpoints: this.props.breakpoints,\n })\n }\n\n getLayoutForChild = child => {\n return getLayoutForChild({\n width: this.props.size.width,\n breakpoints: this.props.breakpoints,\n child,\n layouts: this.props.layouts,\n })\n }\n\n recalculateGrid = () => {\n if (this.masonry) {\n this.masonry.layout()\n }\n }\n\n render() {\n const colWidth = this.props.size.width / this.getNumberOfCols()\n\n return (\n
    \n {\n this.masonry = c ? c.masonry : null\n }}\n options={{\n gutter: 0,\n columnWidth: colWidth,\n fitWidth: true,\n }}\n >\n {React.Children.map(this.props.children, child => {\n const childLayout = this.getLayoutForChild(child)\n\n const width = childLayout.w * colWidth\n if (childLayout.h) {\n const height = childLayout.h * this.props.rowHeight\n\n return (\n \n {React.cloneElement(child, {\n style: { ...child.props.style, height: '100%' },\n recalculateGrid: this.recalculateGrid,\n })}\n
    \n )\n } else {\n return (\n \n {React.cloneElement(child, {\n recalculateGrid: this.recalculateGrid,\n })}\n \n )\n }\n })}\n \n \n )\n }\n}\n\nconst layoutShape = PropTypes.shape({\n w: PropTypes.number.isRequired,\n h: PropTypes.number,\n})\n\nAutoLayout.defaultProps = {\n breakpoints: { lg: 1390, md: 1153, sm: 916, xs: 679 },\n cols: { lg: 8, md: 7, sm: 6, xs: 4 },\n rowHeight: 180,\n}\n\nAutoLayout.propTypes = {\n breakpoints: PropTypes.shape({\n lg: PropTypes.number,\n md: PropTypes.number,\n sm: PropTypes.number,\n xs: PropTypes.number,\n }),\n children: PropTypes.node,\n layouts: PropTypes.objectOf(\n PropTypes.shape({\n lg: layoutShape,\n md: layoutShape,\n sm: layoutShape,\n xs: layoutShape,\n })\n ),\n cols: PropTypes.object,\n rowHeight: PropTypes.number,\n size: PropTypes.shape({\n width: PropTypes.number,\n }).isRequired,\n}\n\nexport default SizeMe(AutoLayout)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport SizeMe from 'components/SizeMe'\nimport Masonry from 'react-masonry-component'\nimport _ from 'lodash'\n\nimport { getBreakpoint, getLayoutForBreakpoint } from './utils'\n\nexport class ColumnLayout extends React.Component {\n styles = {}\n masonry = {}\n\n getBreakpoint = () => {\n return getBreakpoint({\n width: this.props.size.width,\n breakpoints: this.props.breakpoints,\n })\n }\n\n getLayoutForBreakpoint = () => {\n return getLayoutForBreakpoint({\n width: this.props.size.width,\n breakpoints: this.props.breakpoints,\n layout: this.props.columns,\n })\n }\n\n recalculateGrid = index => {\n const masonry = _.get(this.masonry, `col${index}`)\n if (masonry) {\n masonry.layout()\n }\n }\n\n render() {\n const columnLayout = this.getLayoutForBreakpoint()\n\n return (\n
    \n {columnLayout.map((col, index) => {\n const colWidth = this.props.size.width * (col.widthPercent * 0.01)\n return (\n \n {\n this.masonry[`col${index}`] = c ? c.masonry : null\n }}\n options={{\n gutter: 0,\n columnWidth:\n this.props.size.width * (col.widthPercent * 0.01),\n fitWidth: true,\n }}\n >\n {React.Children.map(this.props.children, child => {\n return col.items.includes(child.key)\n ? React.cloneElement(child, {\n childkey: child.key,\n })\n : null\n })\n .filter(child => {\n return !!child\n })\n .map(child => {\n const childHeight = _.get(col, [\n 'heights',\n child.props.childkey,\n ])\n\n return (\n \n {childHeight\n ? React.cloneElement(child, {\n style: { ...child.props.style, height: '100%' },\n recalculateGrid: () =>\n this.recalculateGrid(index),\n })\n : React.cloneElement(child, {\n recalculateGrid: () =>\n this.recalculateGrid(index),\n })}\n
    \n )\n })}\n \n \n )\n })}\n \n )\n }\n}\n\nColumnLayout.defaultProps = {\n breakpoints: { lg: 1390, md: 1153, sm: 916, xs: 679 },\n rowHeight: 180,\n}\n\nconst ColumnShape = PropTypes.shape({\n widthPercent: PropTypes.number.isRequired,\n items: PropTypes.arrayOf(PropTypes.string).isRequired,\n height: PropTypes.objectOf(PropTypes.number),\n})\n\nColumnLayout.propTypes = {\n columns: PropTypes.shape({\n lg: PropTypes.arrayOf(ColumnShape),\n md: PropTypes.arrayOf(ColumnShape),\n sm: PropTypes.arrayOf(ColumnShape),\n xs: PropTypes.arrayOf(ColumnShape),\n }),\n breakpoints: PropTypes.shape({\n lg: PropTypes.number,\n md: PropTypes.number,\n sm: PropTypes.number,\n xs: PropTypes.number,\n }),\n children: PropTypes.node,\n rowHeight: PropTypes.number,\n size: PropTypes.shape({\n width: PropTypes.number,\n }).isRequired,\n}\n\nexport default SizeMe(ColumnLayout)\n","/**\n *\n * NodeView\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport qs from 'querystring'\nimport { injectIntl } from 'react-intl'\nimport { push } from 'connected-react-router'\nimport _ from 'lodash'\nimport { withRouter } from 'react-router'\nimport moment from 'moment'\nimport { Map } from 'immutable'\n\nimport BorderedCard from 'components/BorderedCard'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { NodeViewDetails, NodeViewTabs } from 'components/NodeView'\n\nimport sizeMe from 'components/SizeMe'\nimport {\n selectFields,\n selectTicketCount,\n selectIsMonitored,\n selectCrmTickets,\n} from './selectors'\nimport { TYPES_WITH_CRM } from 'appConstants'\nimport LegacyAccessActivity from 'containers/AccessActivity'\nimport Activity from 'containers/Activity'\nimport Access from 'containers/Access'\nimport DataClassification from 'containers/DataClassification/Loadable'\nimport DynamicHeightGrid, { ColumnLayout } from 'components/DynamicHeightGrid'\nimport RapSheet from 'containers/RapSheet'\nimport { DEFAULT_RAPSHEET_ALERTS_DAYS } from './constants'\nimport { FILTER_DATE_FORMAT } from 'appConstants'\nimport { hasClassifications } from 'containers/DataClassification/utils'\n\nexport const TYPES_WITH_NEW_ACCESS_ACTIVITY_VIEW = [\n 'user',\n 'role',\n 'compute',\n 'datacontainer',\n 'dataobject',\n 'datastore',\n 'secretstore',\n 'secret',\n 'encryptionkey',\n]\n\nclass NodeView extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n rapsheetFromDate: moment()\n .subtract(DEFAULT_RAPSHEET_ALERTS_DAYS, 'days')\n .startOf('day')\n .toISOString(),\n rapsheetToDate: moment().endOf('day').toISOString(),\n }\n this.styles = {\n details: {\n borderTop: 0,\n borderRadius: 0,\n overflow: 'auto',\n padding: '0',\n },\n gridBody: {\n overflow: 'auto',\n },\n nodeContainer: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n margin: '0 12px 12px 12px',\n },\n }\n }\n\n hasAccessActivityTabParam = () => {\n const { alert } = qs.parse(window.location.search.substring(1))\n if (alert) {\n return true\n }\n\n const urlShowAccessActivity = qs.parse(\n _.get(this.props, ['location', 'search'], '')\n ).showAccessActivity\n\n const locationAccessActivity = _.get(this.props, [\n 'location',\n 'state',\n 'AccessActivity',\n ])\n\n if (locationAccessActivity || urlShowAccessActivity) {\n return true\n }\n\n return false\n }\n\n navigateToNodeView = srn => {\n const nodeType = getTypeFromSrn(srn)\n this.props.push(getNodeViewPushParams(srn, nodeType))\n }\n\n setRapsheetDateRange = dateRange => {\n const rapsheetFromDate = dateRange.startDate\n const rapsheetToDate = dateRange.endDate\n\n this.setState({ rapsheetFromDate, rapsheetToDate })\n }\n\n setRapsheetDateFilter = ({ fromDate, toDate }) => {\n this.setState({\n rapsheetFromDate: moment(fromDate).format(FILTER_DATE_FORMAT),\n rapsheetToDate: moment(toDate).format(FILTER_DATE_FORMAT),\n })\n }\n\n renderGridBody = () => {\n if (this.props.columns) {\n return (\n
    \n \n {this.props.gridContent}\n \n
    \n )\n }\n\n if (this.props.horizontal) {\n return (\n
    \n \n {this.props.gridContent}\n \n
    \n )\n }\n\n return (\n
    \n \n {this.props.gridContent}\n \n
    \n )\n }\n\n renderOverview = () => {\n const horizontal = this.props.width < 900 || this.props.horizontal\n\n const type = getTypeFromSrn(this.props.nodeData.srn).toLowerCase()\n\n const cardStyle =\n TYPES_WITH_CRM.includes(type) && this.props.isMonitored\n ? { overflow: 'auto' }\n : {}\n\n const content = [\n
    \n {this.renderGridBody()}\n
    ,\n ]\n\n if (horizontal) {\n return (\n
    \n {content}\n
    \n )\n }\n\n return (\n
    \n {content}\n
    \n )\n }\n\n renderSidebar = () => {\n const horizontal = this.props.width < 900 || this.props.horizontal\n const style = {\n maxWidth: !horizontal ? '325px' : undefined,\n }\n\n return (\n \n \n \n )\n }\n\n render() {\n const { alertTime } = qs.parse(window.location.search.substring(1))\n const {\n nodeData: { srn },\n changeHistory,\n } = this.props\n\n const type = getTypeFromSrn(srn).toLowerCase()\n const hasActivity = this.hasAccessActivityTabParam()\n\n const supportsClassification = hasClassifications(this.props.nodeData)\n\n const sonbabies = []\n\n if (this.props.horizontal) {\n sonbabies.push(
    {this.renderSidebar()}
    )\n }\n if (this.props.renderDetailsTab) {\n sonbabies.push(
    {this.renderOverview()}
    )\n }\n\n if (\n TYPES_WITH_CRM.includes(type) &&\n !TYPES_WITH_NEW_ACCESS_ACTIVITY_VIEW.includes(type) &&\n this.props.isMonitored\n ) {\n sonbabies.push(\n
    \n \n
    \n )\n }\n\n if (TYPES_WITH_NEW_ACCESS_ACTIVITY_VIEW.includes(type)) {\n sonbabies.push(\n
    \n \n
    \n )\n }\n\n if (TYPES_WITH_NEW_ACCESS_ACTIVITY_VIEW.includes(type)) {\n sonbabies.push(\n
    \n \n
    \n )\n }\n\n if (supportsClassification) {\n sonbabies.push(\n
    \n \n
    \n )\n }\n\n if (this.props.tabs) {\n sonbabies.push(...this.props.tabs)\n }\n\n sonbabies.push(\n \n \n \n \n \n )\n\n return (\n \n {!this.props.horizontal && this.renderSidebar()}\n \n {sonbabies}\n \n \n )\n }\n}\n\nconst ColumnShape = PropTypes.shape({\n widthPercent: PropTypes.number.isRequired,\n items: PropTypes.arrayOf(PropTypes.string).isRequired,\n height: PropTypes.objectOf(PropTypes.number),\n})\n\nNodeView.defaultProps = {\n renderDetailsTab: true,\n tabs: [],\n}\n\nNodeView.propTypes = {\n changeHistory: ImmutablePropTypes.list,\n columns: PropTypes.shape({\n lg: PropTypes.arrayOf(ColumnShape),\n md: PropTypes.arrayOf(ColumnShape),\n sm: PropTypes.arrayOf(ColumnShape),\n xs: PropTypes.arrayOf(ColumnShape),\n }),\n cols: PropTypes.shape({\n lg: PropTypes.number,\n md: PropTypes.number,\n sm: PropTypes.number,\n xs: PropTypes.number,\n }),\n crmTickets: ImmutablePropTypes.list.isRequired,\n dataContainerContent: PropTypes.object,\n detailsTag: PropTypes.node,\n fields: ImmutablePropTypes.list,\n gridContent: PropTypes.node,\n horizontal: PropTypes.bool,\n additionalHeaderDetails: PropTypes.arrayOf(PropTypes.node),\n layouts: PropTypes.object,\n push: PropTypes.func.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n nodeData: PropTypes.object.isRequired,\n isMonitored: PropTypes.bool,\n location: PropTypes.object, //eslint-disable-line\n propsOfInterest: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n message: PropTypes.node,\n })\n ),\n renderDetailsTab: PropTypes.bool,\n width: PropTypes.number,\n tabs: PropTypes.array,\n ticketCount: PropTypes.number,\n}\n\nconst mapStateToProps = createStructuredSelector({\n crmTickets: selectCrmTickets,\n fields: selectFields,\n isMonitored: selectIsMonitored,\n ticketCount: selectTicketCount,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withRouter, withConnect, injectIntl, sizeMe)(NodeView)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n alt: {\n id: 'app.components.CopyToClipboard.alt',\n defaultMessage: 'Copy to Clipboard',\n },\n copySuccess: {\n id: 'app.components.CopyToClipboard.copySuccess',\n defaultMessage: 'Copied!',\n },\n})\n","import React from 'react'\nimport { injectIntl, intlShape } from 'react-intl'\nimport PropTypes from 'prop-types'\nimport uuid from 'uuid/v4'\nimport ReactTooltip from 'react-tooltip'\n\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\n\nimport messages from './messages'\n\nexport class CopyToClipboard extends React.PureComponent {\n constructor(props) {\n super(props)\n this.buttonRef = React.createRef()\n this.uuid = uuid()\n }\n\n copyToClipboard = e => {\n e.stopPropagation()\n let el = document.createElement('textarea')\n el.value = this.props.value\n el.setAttribute('readonly', '')\n el.style = { position: 'absolute', left: '-9999px' }\n document.body.appendChild(el)\n el.select()\n document.execCommand('copy')\n document.body.removeChild(el)\n ReactTooltip.show(this.buttonRef.current)\n setTimeout(() => {\n ReactTooltip.hide(this.buttonRef.current)\n }, 3000)\n }\n\n render() {\n const tooltip = this.props.tooltip\n ? this.props.tooltip\n : this.props.intl.formatMessage(messages.alt)\n return (\n \n \n \n \n )\n }\n}\n\nCopyToClipboard.defaultProps = {\n style: {},\n}\n\nCopyToClipboard.propTypes = {\n intl: intlShape,\n value: PropTypes.string,\n style: PropTypes.object,\n tooltip: PropTypes.string,\n}\n\nexport default injectIntl(CopyToClipboard)\n","import {\n SET_TICKET_LIST_FILTER_PANEL,\n CLEAR_TICKET_LIST_FILTER,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const setTicketListFilterPanel = createAction(\n SET_TICKET_LIST_FILTER_PANEL\n)\nexport const clearTicketListFilter = createAction(CLEAR_TICKET_LIST_FILTER)\n","export const LAYERS = {\n BASE: 1,\n SECONDARY_NAV: 400,\n NAV: 500,\n TOOLBAR: 600,\n ACTIONS_TOOLBAR: 700,\n DROPDOWN: 800,\n PANEL: 900,\n GLOBAL_NAV: 950,\n MODAL: 1000,\n}\n","/*\n Copyright (C) 2017 Piotr Tomasz Monarski.\n Licensed under the MIT License (MIT), see\n https://github.com/Monar/react-immutable-pure-component\n*/\n\nimport React from 'react'\nimport { is } from 'immutable'\n\nexport class ImmutablePureComponent extends React.Component {\n shouldComponentUpdate(nextProps, nextState = {}) {\n const state = this.state || {}\n\n return (\n !(\n this.updateOnProps || Object.keys({ ...nextProps, ...this.props })\n ).every(p => is(nextProps[p], this.props[p])) ||\n !(this.updateOnStates || Object.keys({ ...nextState, ...state })).every(\n s => is(nextState[s], state[s])\n )\n )\n }\n}\n\nexport default ImmutablePureComponent\n","import {\n ADD_FIELD,\n ADD_RESULT_VIEW,\n CHANGE_ARGUMENT,\n CHANGE_FIELD_NAME,\n REMOVE_ARGUMENT,\n REMOVE_FIELD,\n REMOVE_RESULT_VIEW,\n RESET_QUERY,\n START_QUERY,\n LOAD_SAVED_QUERY,\n UPDATE_RESULT_VIEW,\n SET_DEFAULT_VIEW,\n ADD_ARGUMENT,\n MOVE_ARGUMENT,\n LOAD_AND_CONVERT_SAVED_QUERY,\n CHANGE_CHILD_OPERATOR,\n ADD_PROPERTY,\n REMOVE_PROPERTY,\n TOGGLE_DEFAULT_PROPERTY,\n RESET_DEFAULT_PROPERTIES,\n ADD_COMMENT,\n REMOVE_COMMENT,\n SET_QUERY_PROPERTY_ORDER,\n SET_QUERY_COLUMN_ALIAS,\n REMOVE_QUERY_COLUMN_ALIAS,\n ADD_EFFECTIVE_PERMISSION_INCLUDE_GROUP,\n ADD_EFFECTIVE_PERMISSION_EXCLUDE_GROUP,\n REMOVE_EFFECTIVE_PERMISSION_GROUP,\n ADD_EFFECTIVE_PERMISSION,\n REMOVE_EFFECTIVE_PERMISSION,\n SET_EFFECTIVE_PERMISSION_PROPERTY_ORDER,\n ADD_EP_DISPLAY_COLUMN,\n REMOVE_EP_DISPLAY_COLUMN,\n SET_IS_DISTINCT_EP,\n REMOVE_EFFECTIVE_PERMISSION_BLOCK,\n SET_EP_DISPLAY_COLUMN_ALIAS,\n REMOVE_EP_COLUMN_ALIAS,\n UPDATE_EFFECTIVE_PERMISSION,\n INSERT_FIELD,\n SET_SEARCH_LIMIT,\n CLEAR_SEARCH_LIMIT,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const addField = createAction(ADD_FIELD)\nexport const addResultView = createAction(ADD_RESULT_VIEW)\nexport const changeArgument = createAction(CHANGE_ARGUMENT)\nexport const changeFieldName = createAction(CHANGE_FIELD_NAME)\nexport const removeArgument = createAction(REMOVE_ARGUMENT)\nexport const removeField = createAction(REMOVE_FIELD)\nexport const removeResultView = createAction(REMOVE_RESULT_VIEW)\nexport const startQuery = createAction(START_QUERY)\nexport const loadSavedQuery = createAction(LOAD_SAVED_QUERY)\nexport const resetQuery = createAction(RESET_QUERY)\nexport const updateResultView = createAction(UPDATE_RESULT_VIEW)\n\nexport const setDefaultView = createAction(SET_DEFAULT_VIEW)\nexport const addArgument = createAction(ADD_ARGUMENT)\nexport const moveArgument = createAction(MOVE_ARGUMENT)\nexport const loadAndConvertSavedQuery = createAction(\n LOAD_AND_CONVERT_SAVED_QUERY\n)\nexport const changeChildOperator = createAction(CHANGE_CHILD_OPERATOR)\n\nexport const addProperty = createAction(ADD_PROPERTY)\nexport const removeProperty = createAction(REMOVE_PROPERTY)\nexport const toggleDefaultProperty = createAction(TOGGLE_DEFAULT_PROPERTY)\nexport const resetDefaultProperties = createAction(RESET_DEFAULT_PROPERTIES)\n\nexport const addComment = createAction(ADD_COMMENT)\nexport const removeComment = createAction(REMOVE_COMMENT)\nexport const setQueryPropertyOrder = createAction(SET_QUERY_PROPERTY_ORDER)\nexport const setQueryColumnAlias = createAction(SET_QUERY_COLUMN_ALIAS)\nexport const removeQueryColumnAlias = createAction(REMOVE_QUERY_COLUMN_ALIAS)\nexport const addEffectivePermissionIncludeGroup = createAction(\n ADD_EFFECTIVE_PERMISSION_INCLUDE_GROUP\n)\nexport const setEffectivePermissionPropertyOrder = createAction(\n SET_EFFECTIVE_PERMISSION_PROPERTY_ORDER\n)\nexport const addEffectivePermissionExcludeGroup = createAction(\n ADD_EFFECTIVE_PERMISSION_EXCLUDE_GROUP\n)\nexport const removeEffectivePermissionGroup = createAction(\n REMOVE_EFFECTIVE_PERMISSION_GROUP\n)\nexport const addEffectivePermission = createAction(ADD_EFFECTIVE_PERMISSION)\nexport const removeEffectivePermission = createAction(\n REMOVE_EFFECTIVE_PERMISSION\n)\nexport const addEPDisplayColumn = createAction(ADD_EP_DISPLAY_COLUMN)\nexport const removeEPDisplayColumn = createAction(REMOVE_EP_DISPLAY_COLUMN)\nexport const setIsDistinctEP = createAction(SET_IS_DISTINCT_EP)\nexport const setEPDisplayColumnAlias = createAction(SET_EP_DISPLAY_COLUMN_ALIAS)\nexport const removeEPColumnAlias = createAction(REMOVE_EP_COLUMN_ALIAS)\nexport const removeEffectivePermissionBlock = createAction(\n REMOVE_EFFECTIVE_PERMISSION_BLOCK\n)\nexport const updateEffectivePermission = createAction(\n UPDATE_EFFECTIVE_PERMISSION\n)\nexport const insertField = createAction(INSERT_FIELD)\nexport const setSearchLimit = createAction(SET_SEARCH_LIMIT)\nexport const clearSearchLimit = createAction(CLEAR_SEARCH_LIMIT)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n selectCard: {\n id: 'app.components.CombinedSearches.selectCard',\n defaultMessage: 'Select a search card...',\n },\n searchCardLabel: {\n id: 'app.components.CombinedSearches.searchCardLabel',\n defaultMessage: 'Search Card',\n },\n selectSearch: {\n id: 'app.components.CombinedSearches.selectSearch',\n defaultMessage: 'Select a search...',\n },\n})\n","/**\n *\n * CombinedSearches\n *\n */\n\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport SelectBar from 'components/SelectBar'\nimport { injectIntl, intlShape } from 'react-intl'\n\nimport FormLabel from 'components/FormLabel'\nimport { exists } from 'utils/sonraiUtils'\n\nimport messages from './messages'\n\nclass CombinedSearches extends React.PureComponent {\n combineSearchSonraiSearches = (saved, sonrai) => {\n if (this.props.onlySonrai) {\n return sonrai\n } else if (this.props.onlySaved) {\n return saved.toList()\n } else {\n return saved.toList().concat(sonrai)\n }\n }\n\n setSonraiSearch = value => {\n if (!this.props.onlySaved && this.props.setSonraiSearch) {\n this.props.setSonraiSearch(value)\n }\n }\n\n setSavedSearch = value => {\n if (!this.props.onlySonrai && this.props.selectSavedSearch) {\n this.props.selectSavedSearch(value)\n\n if (this.props.selectSearchField) {\n this.props.selectSearchField(null)\n }\n }\n }\n\n handleSelect = value => {\n if (this.props.onSelect) {\n this.props.onSelect(value)\n }\n\n if (value === null) {\n if (this.props.selectedSearchId) {\n this.setSavedSearch(null)\n } else {\n this.setSonraiSearch(null)\n }\n } else {\n switch (value.type) {\n case 'Search':\n this.setSavedSearch(value)\n this.setSonraiSearch(null)\n break\n case 'Savedquery':\n this.setSonraiSearch(value)\n this.setSavedSearch(null)\n\n break\n }\n }\n }\n\n getOptions = () =>\n this.combineSearchSonraiSearches(\n this.props.savedSearches,\n this.props.savedSonraiSearches\n )\n .toJS()\n .map(search => ({\n value: search.sid ? search.sid : search.name,\n label: search.name,\n type: search.__typename,\n srn: search.srn,\n }))\n\n render() {\n return (\n \n \n\n {this.props.selectSearchField && this.props.selectedSearchId && (\n \n \n ({\n value: field.id,\n label: field.name,\n }))}\n onChange={this.props.selectSearchField}\n isDisabled={this.props.searchFieldDisabled || this.props.loading}\n placeholder={this.props.intl.formatMessage(messages.selectCard)}\n />\n \n )}\n \n )\n }\n}\n\nCombinedSearches.defaultProps = {\n onlySaved: false,\n onlySonrai: false,\n searchFieldRequired: false,\n}\n\nCombinedSearches.propTypes = {\n intl: intlShape,\n onlySaved: PropTypes.bool,\n onlySonrai: PropTypes.bool,\n onSelect: PropTypes.func,\n savedSearches: ImmutablePropTypes.iterable,\n savedSonraiSearches: ImmutablePropTypes.iterable,\n searchCards: ImmutablePropTypes.iterable,\n searchFieldDisabled: PropTypes.bool,\n searchFieldRequired: PropTypes.bool,\n loading: PropTypes.bool,\n searchFieldLabel: PropTypes.string,\n selectSavedSearch: PropTypes.func,\n selectSearchField: PropTypes.func,\n selectedFieldId: PropTypes.string,\n selectedSearchId: PropTypes.string,\n selectedSonraiValue: PropTypes.string,\n setSonraiSearch: PropTypes.func,\n}\n\nexport default injectIntl(CombinedSearches)\n","import {\n RUN_QUERY,\n QUERY_ERROR_HAPPEN,\n SET_QUERY_RESULTS,\n SAVE_SEARCH_WITH_CONCURRENT_CHECK,\n SET_SEARCH_MODIFIED_CONCURRENTLY,\n SAVE_SEARCH,\n SAVE_SEARCH_SUCCESS,\n SAVE_SEARCH_ERROR,\n SET_SEARCH_NAME,\n LOAD_SEARCH_IN_ADVANCED,\n SET_MONITORING_ON_RESOURCES,\n SET_MONITORING_ON_RESOURCES_SUCCESS,\n SET_MONITORING_ON_RESOURCES_ERROR,\n SET_MONITORING_RESOURCES_EXCEEDED,\n SET_IMPORTANCE_MULTI,\n SET_IMPORTANCE_MULTI_SUCCESS,\n SET_IMPORTANCE_MULTI_MODAL,\n ADD_TAGS_ON_SELECTED_RESOURCES,\n ADD_TAGS_ON_SELECTED_RESOURCES_SUCCESS,\n TOGGLE_COMMENTS,\n CLEAR_QUERY_ERROR,\n CLEAR_SAVE_SEARCH_ERROR,\n RESET_EDITOR,\n SAVE_SEARCH_DESCRIPTION,\n SAVE_SEARCH_DESCRIPTION_SUCCESS,\n GET_NODETYPE_COUNTS,\n SET_NODETYPE_COUNTS,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const runQuery = createAction(RUN_QUERY)\nexport const queryErrorHappen = createAction(QUERY_ERROR_HAPPEN)\nexport const clearQueryError = createAction(CLEAR_QUERY_ERROR)\nexport const setQueryResults = createAction(SET_QUERY_RESULTS)\nexport const saveSearchWithConcurrentCheck = createAction(\n SAVE_SEARCH_WITH_CONCURRENT_CHECK\n)\nexport const setSearchModifiedConcurrently = createAction(\n SET_SEARCH_MODIFIED_CONCURRENTLY\n)\nexport const saveSearch = createAction(SAVE_SEARCH)\nexport const saveSearchSuccess = createAction(SAVE_SEARCH_SUCCESS)\nexport const setSaveSearchError = createAction(SAVE_SEARCH_ERROR)\nexport const clearSaveSearchError = createAction(CLEAR_SAVE_SEARCH_ERROR)\nexport const loadSearchInAdvanced = createAction(LOAD_SEARCH_IN_ADVANCED)\nexport const setSearchName = createAction(SET_SEARCH_NAME)\nexport const setMonitoringOnResources = createAction(\n SET_MONITORING_ON_RESOURCES\n)\nexport const setMonitoringOnResourcesSuccess = createAction(\n SET_MONITORING_ON_RESOURCES_SUCCESS\n)\nexport const setMonitoringOnResourcesError = createAction(\n SET_MONITORING_ON_RESOURCES_ERROR\n)\nexport const setMonitoringResourcesExceeded = createAction(\n SET_MONITORING_RESOURCES_EXCEEDED\n)\nexport const setImportanceMulti = createAction(SET_IMPORTANCE_MULTI)\nexport const setImportanceMultiSuccess = createAction(\n SET_IMPORTANCE_MULTI_SUCCESS\n)\nexport const setImportanceMultiModal = createAction(SET_IMPORTANCE_MULTI_MODAL)\n\nexport const addTagsOnSelectedResources = createAction(\n ADD_TAGS_ON_SELECTED_RESOURCES\n)\nexport const addTagsOnSelectedResourcesSuccess = createAction(\n ADD_TAGS_ON_SELECTED_RESOURCES_SUCCESS\n)\nexport const toggleComments = createAction(TOGGLE_COMMENTS)\n\nexport const resetEditor = createAction(RESET_EDITOR)\n\nexport const saveSearchDescription = createAction(SAVE_SEARCH_DESCRIPTION)\nexport const saveSearchDescriptionSuccess = createAction(\n SAVE_SEARCH_DESCRIPTION_SUCCESS\n)\n\nexport const getNodeTypeCounts = createAction(GET_NODETYPE_COUNTS)\nexport const setNodeTypeCounts = createAction(SET_NODETYPE_COUNTS)\n","/**\n * the auth modes aren't used in actions, they're constants for howto display\n * the authentication modes on the form to submit the job:\n */\n// user must supply username and azure keyvault secret & path:\nexport const AUTH_MODE_USERNAME_KV = `AUTH_MODE_USERNAME_KV`\n// user must supply username and aws secret manager & path:\nexport const AUTH_MODE_USERNAME_SECRETMGR = `AUTH_MODE_USERNAME_SECRETMGR`\n\nexport const CLASSIFICATION_TYPE_DB = 'DB'\nexport const CLASSIFICATION_TYPE_BUCKET = 'Bucket'\n\n// the rest of the constants are probbaly for redux actions:\n\nexport const RESET_JOB_REQUEST_SUCCESS = `app/containers/DataClassification/RESET_JOB_REQUEST_SUCCESS`\n\nexport const SET_PRIVATE_KEY = `app/containers/DataClassification/SET_PRIVATE_KEY`\n\nexport const SET_PLATFORM_ACCOUNT = `app/containers/DataClassification/SET_PLATFORM_ACCOUNT`\n\nexport const SUBMIT_JOB = `app/containers/DataClassification/SUBMIT_JOB`\nexport const SUBMIT_JOB_SUCCESS = `app/containers/DataClassification/SUBMIT_JOB_SUCCESS`\nexport const SUBMIT_JOB_ERROR = `app/containers/DataClassification/SUBMIT_JOB_ERROR`\n","/*\n *\n * SecurityCenter constants\n *\n */\n\nexport const SET_SELECTED_RESOURCE_ID =\n 'app/SecurityCenter/SET_SELECTED_RESOURCE_ID'\nexport const SET_SELECTED_RESOURCE = 'app/SecurityCenter/SET_SELECTED_RESOURCE'\nexport const CLEAR_SELECTED_RESOURCE_ID =\n 'app/SecurityCenter/CLEAR_SELECTED_RESOURCE_ID'\nexport const SET_FILTER = 'app/SecurityCenter/SET_FILTER'\nexport const SET_SELECTED_SWIMLANE_NAME =\n 'app/SecurityCenter/SET_SELECTED_SWIMLANE_NAME'\nexport const DISABLE_RESOURCE_MONITORING =\n 'app/SecurityCenter/DISABLE_RESOURCE_MONITORING'\nexport const ENABLE_RESOURCE_MONITORING =\n 'app/SecurityCenter/ENABLE_RESOURCE_MONITORING'\nexport const FETCH_ROLLUP_DATA = 'app/SecurityCenter/FETCH_ROLLUP_DATA'\nexport const SET_CATEGORY_ROLLUP_DATA =\n 'app/SecurityCenter/SET_CATEGORY_ROLLUP_DATA'\nexport const SET_TIMELINE_ROLLUP_DATA =\n 'app/SecurityCenter/SET_TIMELINE_ROLLUP_DATA'\nexport const SET_RELATIVE_DATE_FILTER =\n 'app/SecurityCenter/SET_RELATIVE_DATE_FILTER'\nexport const SET_CUSTOM_DATE_FILTER =\n 'app/SecurityCenter/SET_CUSTOM_DATE_FILTER'\nexport const SET_VIS_FILTERS = 'app/SecurityCenter/SET_VIS_FILTERS'\nexport const SET_SELECTED_CATEGORY = 'app/SecurityCenter/SET_SELECTED_CATEGORY'\nexport const SET_SELECTED_SEVERITY = 'app/SecurityCenter/SET_SELECTED_SEVERITY'\nexport const FETCH_CATEGORY_ROLLUP_DATA =\n 'app/SecurityCenter/FETCH_CATEGORY_ROLLUP_DATA'\n\nexport const BULK_DISABLE_MONITORING =\n 'app/SecurityCenter/BULK_DISABLE_MONITORING'\nexport const BULK_DISABLE_MONITORING_SUCCESS =\n 'app/SecurityCenter/BULK_DISABLE_MONITORING_SUCCESS'\n\nexport const VIEWS = {\n VIS: 'vis',\n RESOURCES: 'resources',\n}\n\nexport const TOGGLE_SC_INFO_MODAL = 'app/SecurityCenter/TOGGLE_SC_INFO_MODAL'\n\nexport const SET_STATUS_FILTER = 'app/SecurityCenter/SET_STATUS_FILTER'\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nclass IconLayer extends React.Component {\n render() {\n return (\n \n {this.props.children}\n \n )\n }\n}\n\nIconLayer.propTypes = {\n children: PropTypes.node,\n style: PropTypes.object,\n}\n\nexport default IconLayer\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport NodeViewTab from './NodeViewTab'\nimport IconCount from 'components/IconCount'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass NodeViewTabs extends Component {\n constructor(props) {\n super(props)\n\n const child = this.findChild((child, index) => index === props.activeTabId)\n\n this.state = {\n activeTab:\n child && child.props\n ? child.props.label\n : (this.findChild(ele => ele && ele.props && ele.props.label) || {})\n .label,\n }\n\n this.styles = {\n tabContainer: {\n borderBottom: '1px solid #ccc',\n padding: '0rem 1.4rem',\n },\n }\n }\n\n findChild = predicate => {\n let match = undefined\n React.Children.forEach(this.props.children, (child, index) => {\n if (!match && predicate(child, index)) {\n match = child\n }\n })\n\n return match\n }\n\n onSelectTab = tab => {\n this.setState({ activeTab: tab })\n }\n\n render() {\n const {\n onSelectTab,\n props: { children },\n state: { activeTab },\n } = this\n\n return (\n
    \n
    \n
    \n {React.Children.map(children, child => {\n if (!child) {\n return null\n }\n\n const { label, notification, notificationTitle } = child.props\n if (!label) {\n return null\n }\n return (\n \n {notification ? (\n \n ) : null}\n \n )\n }).filter(child => child)}\n
    \n
    \n
    \n {React.Children.map(children, child => {\n if (!child) {\n return null\n }\n\n if (child.props.label !== activeTab) return undefined\n return child.props.children\n }).filter(child => child)}\n
    \n
    \n )\n }\n}\n\nNodeViewTabs.defaultProps = {\n activeTabId: 0,\n tabStyle: { overflow: 'auto' },\n}\n\nNodeViewTabs.propTypes = {\n children: PropTypes.array,\n activeTabId: PropTypes.number,\n style: PropTypes.object,\n tabStyle: PropTypes.object,\n theme: themeShape,\n}\n\nexport default themeable(NodeViewTabs)\n","import { createSelector } from 'reselect'\nimport { List, Map } from 'immutable'\nimport { VIEWS } from './constants'\nimport qs from 'query-string'\n\nconst selectSecurityCenterDomain = state => state.get('securityCenter') || Map()\n\nexport const selectResources = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('resources') || Map()\n)\n\nexport const selectBulkDisablingMonitoring = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('bulkDisablingMonitoring')\n)\n\nexport const selectSelectedResourceId = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('selectedResourceId')\n)\n\nexport const selectSelectedResource = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('selectedResource')\n)\n\nexport const selectSelectedSwimlaneName = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('selectedSwimlaneName')\n)\n\nexport const selectStatus = createSelector(selectSecurityCenterDomain, sc =>\n sc.get('status')\n)\n\nexport const selectSelectedCategory = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('selectedCategory')\n)\n\nexport const selectSelectedSeverity = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('selectedSeverity')\n)\n\nexport const selectView = (state, props) =>\n qs.parse(props.location.search).view || VIEWS.VIS\n\nexport const selectLaneFilters = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('filters')\n)\n\nexport const selectLoadingRollupData = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('loadingRollupData')\n)\n\nexport const selectCategoryRollupData = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('categoryRollupData') || List()\n)\n\nexport const selectCategorySeverityRollupData = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('categorySeverityRollupData') || List()\n)\n\nexport const selectTimelineRollupData = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('timelineRollupData') || List()\n)\n\nexport const selectVisFilters = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('visFilters') || Map()\n)\n\nexport const selectCategorySeriesTotals = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('categorySeriesTotals') || Map()\n)\n\nexport const selectSCInfoModal = createSelector(\n selectSecurityCenterDomain,\n sc => sc.get('scInfoModal')\n)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n assignmentControlAll: {\n id: 'app.containers.Tickets.assignmentControlAll',\n defaultMessage: 'All Assignees',\n },\n assignmentControlMyself: {\n id: 'app.containers.Tickets.assignmentControlMyself',\n defaultMessage: 'Assigned to Me',\n },\n assignmentControlUnassigned: {\n id: 'app.containers.Tickets.assignmentControlUnassigned',\n defaultMessage: 'Unassigned',\n },\n createdByCriticalAssetMonitor: {\n id: 'app.containers.Tickets.createdByCriticalAssetMonitor',\n defaultMessage: 'Critical Asset Monitor',\n },\n createdByPolicyEvaluation: {\n id: 'app.containers.Tickets.createdByPolicyEvaluation',\n defaultMessage: 'Policy Evaluation',\n },\n fetchErrorMessage: {\n id: 'app.containers.Tickets.fetchErrorMessage',\n defaultMessage: 'There was an error fetching tickets.',\n },\n manageTicketTemplates: {\n id: 'app.containers.Tickets.manageTicketTemplates',\n defaultMessage: 'Manage Custom Ticket Templates',\n },\n pageTitle: {\n id: 'app.containers.Tickets.pageTitle',\n defaultMessage: 'Tickets',\n },\n statusControlOpen: {\n id: 'app.containers.Tickets.statusControlOpen',\n defaultMessage: 'Open',\n },\n statusControlAll: {\n id: 'app.containers.Tickets.statusControlAll',\n defaultMessage: 'All Statuses',\n },\n ticketStatusNew: {\n id: 'app.containers.Tickets.ticketStatusNew',\n defaultMessage: 'New',\n },\n ticketStatusSNOOZED: {\n id: 'app.containers.Tickets.ticketStatusSNOOZED',\n defaultMessage: 'Snoozed',\n },\n ticketStatusRISK_ACCEPTED: {\n id: 'app.containers.Tickets.ticketStatusRISK_ACCEPTED',\n defaultMessage: 'Accepted Risk',\n },\n ticketStatusCLOSED: {\n id: 'app.containers.Tickets.ticketStatusRISK_ACCEPTED',\n defaultMessage: 'Closed',\n },\n unassigned: {\n id: 'app.containers.Tickets.unassigned',\n defaultMessage: 'Unassigned',\n },\n})\n","import {\n all,\n put,\n takeLatest,\n take,\n race,\n call,\n select,\n} from 'redux-saga/effects'\nimport { delay } from 'redux-saga'\nimport {\n FETCH_SAVED_SEARCHES_QUERY,\n FETCH_SONRAI_SEARCHES_QUERY,\n FETCH_ACCOUNTS_QUERY,\n FETCH_TAGS_QUERY,\n FETCH_DATA_CONTAINERS_QUERY,\n CHECK_FOR_CLOUD_ACCOUNTS_QUERY,\n MONITORED_RESOURCES_COUNT_QUERY,\n FETCH_SUBSCRIPTIONS_QUERY,\n} from 'static-queries'\n\nimport {\n GET_ALL_BOTS,\n CREATE_BOT_MUTATION,\n GET_FILTERED_BOTS,\n} from 'containers/BotManagement/static-queries'\n\nimport { setSwimlaneBotError } from 'containers/SwimlaneDetails/actions'\n\nimport {\n setRelations,\n setTypes,\n setSavedSearches,\n setAllowedRootQueries,\n setSonraiSearches,\n fetchAccountsSuccess,\n fetchTagsSuccess,\n fetchDataContainersSuccess,\n setQueryNames,\n setGraphQLSchema,\n setHasCollectors,\n setMonitoredResourcesCount,\n fetchSwimlanesSuccess,\n fetchSubscriptionsSuccess,\n fetchSonraiUsersSuccess,\n updateSonraiUserSuccess,\n setAllRoles,\n errAllRoles,\n updateUserRolesSuccess,\n setGlobalError,\n setBots,\n validateSourceUrlSuccess,\n createBotSuccess,\n handleDeleteBotsSuccess,\n updateBotAssignmentsSuccess,\n removeSwimlaneSuccess,\n setExemptedIdentities,\n setExemptedIdentitiesError,\n addExemptedIdentitiesSuccess,\n deleteExemptedIdentitiesSuccess,\n setObjectives,\n fetchObjectivesError,\n fetchObjectives as fetchObjectivesAction,\n enableObjectiveSuccess,\n enableObjectiveError,\n setSonraiConfig,\n enableAllObjectivesSuccess,\n enableAllObjectivesError,\n enableAllObjectivesForSwimlaneSuccess,\n enableAllObjectivesForSwimlaneError,\n} from './actions'\n\nimport { generateTypeColors } from 'containers/ThemeManager/actions'\nimport { fetchControlGroups } from 'containers/ControlFrameworkData/actions'\nimport {\n RUN_INSPECTION_QUERY,\n FETCH_SAVED_SEARCHES,\n FETCH_SAVED_SEARCHES_DETAILS,\n FETCH_SONRAI_SEARCHES,\n FETCH_ACCOUNTS,\n FETCH_TAGS,\n FETCH_DATA_CONTAINERS,\n START_UPDATE_DATA_POLL,\n STOP_UPDATE_DATA_POLL,\n CHECK_IF_HAS_COLLECTORS,\n GET_MONITORED_RESOURCES_COUNT,\n FETCH_SWIMLANES,\n FETCH_SUBSCRIPTIONS,\n FETCH_SONRAI_USERS,\n UPDATE_SONRAI_USER,\n GET_ALL_ROLES,\n UPDATE_USER_ROLES,\n GET_BOTS,\n VALIDATE_SOURCE_URL,\n HANDLE_DELETE_BOTS,\n UPDATE_BOT_ASSIGNMENT,\n REMOVE_SWIMLANE,\n FETCH_GRAPHQL_SCHEMA,\n GET_EXEMPTED_IDENTITIES,\n ADD_EXEMPTED_IDENTITIES,\n DELETE_EXEMPTED_IDENTITIES,\n FETCH_OBJECTIVES,\n ENABLE_OBJECTIVE,\n ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE,\n FETCH_SONRAI_CONFIG,\n ENABLE_ALL_OBJECTIVES,\n} from './constants'\nimport {\n selectBots,\n selectSavedSearches,\n selectPermissions,\n selectObjectives,\n} from './selectors'\nimport { getClient } from 'apolloClient'\nimport { INSPECTION_QUERY } from 'query-builder'\nimport gql from 'graphql-tag'\nimport { List, fromJS, Map } from 'immutable'\nimport { getIntrospectionQuery } from 'graphql'\nimport { POLL_FREQUENCY } from 'appConstants'\nimport _ from 'lodash'\n\nfunction* runInspectionQuery() {\n try {\n const client = getClient()\n\n var data = null\n\n // try to fetch the data multiple times, retry if there is timeout\n const MAX_INTROSPECTION_ATTEMPTS = 5\n for (var attempt = 0; attempt < MAX_INTROSPECTION_ATTEMPTS; attempt++) {\n try {\n const result = yield client.query({\n query: INSPECTION_QUERY,\n fetchPolicy: 'no-cache',\n context: {\n queryName: 'pivoted-inspection-query',\n },\n })\n data = result.data\n break\n } catch (e) {\n // check error to make sure we did timeout\n const networkErrorMessage = _.get(\n e,\n ['networkError', 'result', 'errors', 0, 'message'],\n ''\n )\n const networkStatusCode = _.get(e, ['networkError', 'statusCode'], -1)\n\n const isTimeoutStatus = networkStatusCode === 504\n const isTimeoutMessage = networkErrorMessage.startsWith(\n 'The request timed out after '\n )\n if (!(isTimeoutStatus && isTimeoutMessage)) {\n throw e // if it's some other error, throw up\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `retrying introspection query fetch attempt ${\n attempt + 1\n }/${MAX_INTROSPECTION_ATTEMPTS}`\n )\n }\n }\n }\n\n if (data === null) {\n throw new Error(\n `could not fetch after ${MAX_INTROSPECTION_ATTEMPTS} attempts due to timeout`\n )\n }\n\n if (data.Queries) {\n let queries = ['AnalyticsResults'].concat(data.Queries)\n queries.sort()\n yield put(setAllowedRootQueries(queries))\n }\n\n if (data.Relations) {\n const relations = data.Relations\n yield put(setRelations(relations))\n }\n\n if (data.PivotedIntrospection) {\n yield put(setTypes(data.PivotedIntrospection.types))\n yield put(generateTypeColors())\n }\n\n if (data.__type) {\n const queryNames = data.__type.fields.reduce((types, nextType) => ({\n ...types,\n [nextType.type.name]: nextType,\n }))\n\n yield put(setQueryNames(queryNames))\n }\n } catch (e) {\n if (Object.values(e)[2] === 'Network error: Failed to fetch') {\n yield put(setGlobalError(e.message))\n }\n //eslint-disable-next-line no-console\n console.error('Error running introspection query', e)\n }\n}\n\nfunction* getGraphqlSchema() {\n try {\n const client = getClient()\n\n const schema_response = yield client.query({\n query: gql`\n ${getIntrospectionQuery()}\n `,\n fetchPolicy: 'no-cache',\n context: {\n queryName: 'graphiql-inspection-query',\n },\n })\n if (schema_response) {\n const schema_data = schema_response.data\n\n if (schema_data) {\n yield put(setGraphQLSchema(schema_data))\n }\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error fetching the graphql schema', e)\n }\n}\n\nfunction* getSonraiConfig() {\n try {\n const client = getClient()\n const result = yield client.query({\n query: gql`\n query getSonraiUIConfig {\n SonraiUiConfigs {\n items {\n config\n }\n }\n }\n `,\n })\n\n if (result.data.SonraiUiConfigs.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n const sonraiConfig = _.get(\n _.first(result.data.SonraiUiConfigs.items),\n ['config'],\n {}\n )\n\n const config = _.merge(window.config, sonraiConfig)\n window.config = config\n\n yield put(setSonraiConfig())\n } catch (e) {\n yield put(setSonraiConfig())\n yield put(setGlobalError(`Error fetching Sonrai UI Config: ${e.message}`))\n\n //eslint-disable-next-line no-console\n console.error('Failed to load Sonrai UI Config', e)\n }\n}\n\nexport function* fetchSavedSearches(action) {\n try {\n const client = getClient(action.poll)\n\n let includeDetails = true\n const isFirstPoll = (yield select(selectSavedSearches)).isEmpty()\n if (isFirstPoll && action.forceIncludeDetails != true) {\n // we can save ourselves some time on initial render by not fetching the\n // relationships for the seaches. They're only needed on the Manage Searches page\n const location = yield select(state => {\n return state.getIn(['router', 'location', 'pathname'], '')\n })\n if (!location.startsWith('/App/SearchManager')) {\n includeDetails = false\n }\n }\n\n const results = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${FETCH_SAVED_SEARCHES_QUERY}\n `,\n variables: { includeDetails },\n })\n\n if (results.data.Searches.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const immutableResults = fromJS(results.data)\n const resultsMappedById = Map(\n immutableResults\n .getIn(['Searches', 'items'], List())\n .map(search => List([search.get('sid'), search]))\n )\n\n yield put(\n setSavedSearches({\n results: resultsMappedById,\n withDetails: includeDetails,\n })\n )\n\n if (!includeDetails) {\n // if we didn't load details this time, we can preemtively load it now\n yield call(fetchSavedSearchesDetails)\n }\n } catch (e) {\n yield put(setGlobalError(`Error fetching Saved Searches: ${e.message}`))\n //eslint-disable-next-line no-console\n console.error('error fetching saved searches', e)\n }\n}\n\nfunction* fetchSavedSearchesDetails() {\n yield call(fetchSavedSearches, { forceIncludeDetails: true })\n}\n\nfunction* getSavedSonraiSeaches(action) {\n try {\n const client = getClient(action.poll)\n const result = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${FETCH_SONRAI_SEARCHES_QUERY}\n `,\n })\n\n if (result.data.SavedQueries.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setSonraiSearches(result.data.SavedQueries.items))\n } catch (e) {\n yield put(setGlobalError(`Error fetching Sonrai Searches: ${e.message}`))\n\n //eslint-disable-next-line no-console\n console.error('Failed to load Sonrai saved searches', e)\n }\n}\n\nfunction* getAccounts(action) {\n try {\n const client = getClient(action.poll)\n const results = yield client.query({\n query: gql`\n ${FETCH_ACCOUNTS_QUERY}\n `,\n })\n\n if (results.data.Accounts.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const immutableResults = fromJS(results.data).getIn(\n ['Accounts', 'items'],\n List()\n )\n\n yield put(fetchAccountsSuccess(immutableResults))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error fetching accounts', e)\n }\n}\n\nfunction* getAzureSubscriptions() {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${FETCH_SUBSCRIPTIONS_QUERY}\n `,\n })\n\n if (results.data.Subscriptions.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const immutableResults = fromJS(results.data).getIn(\n ['Subscriptions', 'items'],\n List()\n )\n\n yield put(fetchSubscriptionsSuccess(immutableResults))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error fetching subscriptions', e)\n }\n}\n\nfunction* getTags() {\n try {\n const client = getClient()\n\n const results = yield client.query({\n query: gql`\n ${FETCH_TAGS_QUERY}\n `,\n })\n\n const immutableResults = fromJS(\n results.data.Tags.group\n // filter to ensure we don't end up with null/undef. in list of tags\n .filter(tagGroup => (tagGroup.items || []).length > 0)\n .map(groupedResult => groupedResult.items[0])\n )\n\n yield put(fetchTagsSuccess(immutableResults))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error fetching tags', e)\n }\n}\n\nfunction* getDataContainers() {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n ${FETCH_DATA_CONTAINERS_QUERY}\n `,\n })\n\n if (results.data.DataContainers.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const immutableResults = fromJS(results.data).getIn(\n ['DataContainers', 'items'],\n List()\n )\n\n yield put(fetchDataContainersSuccess(immutableResults))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error fetching data containers', e)\n }\n}\n\nexport function* checkIfHasCollectors() {\n try {\n const client = getClient()\n const results = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${CHECK_FOR_CLOUD_ACCOUNTS_QUERY}\n `,\n })\n\n const count = results.data.PlatformAccounts.count\n\n yield put(setHasCollectors(count > 0))\n } catch (err) {\n yield put(setGlobalError(`Error verifying org collectors: ${err.message}`))\n\n //eslint-disable-next-line no-console\n console.error(err)\n yield put(setHasCollectors(true))\n }\n}\n\nexport function* getMonitoredResourcesCount() {\n try {\n const client = getClient()\n const results = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${MONITORED_RESOURCES_COUNT_QUERY}\n `,\n })\n\n const count = results.data.Resources.count\n\n yield put(setMonitoredResourcesCount(count))\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error(err)\n }\n}\n\nfunction* getSonraiUsers() {\n const SONRAI_USERS_QUERY = `\n query getSonraiUsers {\n SonraiUsers {\n items {\n srn\n email\n name\n isActive\n lastLogin\n resourceId\n roleAssignments {\n items {\n srn\n scope\n resourceId\n role {\n items {\n srn\n resourceId\n name\n description\n permissions\n }\n }\n }\n }\n orgs\n avatarUrl\n lastLogin\n }\n }\n }\n `\n try {\n const client = getClient()\n const results = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n ${SONRAI_USERS_QUERY}\n `,\n })\n\n yield put(\n fetchSonraiUsersSuccess({\n users: _.get(results, ['data', 'SonraiUsers', 'items'], []),\n })\n )\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error(err)\n }\n}\n\nfunction* updateSonraiUser(action) {\n const UPDATE_SONRAI_USER_QUERY = `\n ${\n action.payload.me\n ? `mutation updateSonraiGuy($updateGuy: [SonraiCurrentUserUpdater!]!) {\n UpdateSonraiCurrentUsers(input: $updateGuy) {`\n : `mutation updateSonraiGuy($updateGuy: [SonraiUserUpdater!]!) {\n UpdateSonraiUsers(input: $updateGuy) {`\n }\n items {\n srn\n email\n name\n isActive\n lastLogin\n resourceId\n roleAssignments {\n items {\n srn\n scope\n resourceId\n role {\n items {\n srn\n resourceId\n name\n description\n permissions\n }\n }\n }\n }\n orgs\n avatarUrl\n lastLogin\n }\n }\n }\n `\n const srnMaybe = action.payload.me ? {} : { srn: action.payload.srn }\n const variables = {\n ...srnMaybe,\n ...action.payload.variables,\n }\n\n try {\n const client = getClient()\n const results = yield client.mutate({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n mutation: gql`\n ${UPDATE_SONRAI_USER_QUERY}\n `,\n variables: {\n updateGuy: variables,\n },\n })\n\n const updatedGuy = _.get(\n results,\n [\n 'data',\n action.payload.me ? `UpdateSonraiCurrentUsers` : `UpdateSonraiUsers`,\n 'items',\n 0,\n ],\n null\n )\n if (updatedGuy) {\n yield put(\n updateSonraiUserSuccess({ srn: action.payload.srn, guy: updatedGuy })\n )\n }\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error(err)\n }\n}\n\nfunction* getBotAssignments(contentSrn) {\n try {\n const client = getClient()\n const results = yield client.query({\n query: gql`\n query getBotAssignemntsOnSwimlane {\n BotAssignments(\n where: {\n contentSrn: {\n value: \"${contentSrn}\"\n }\n }\n ) {\n items {\n srn\n bot {\n srn\n title\n description\n cloud\n url\n }\n }\n }\n }\n `,\n })\n if (results.errors) {\n yield put(setSwimlaneBotError('Error fetching Bots for Swimlane'))\n return []\n } else {\n let nullBoiz = 0\n const botties = _.get(\n results,\n ['data', 'BotAssignments', 'items'],\n []\n ).map(\n //temp fix to prevent null bots ruining EVERYTHING\n item => {\n if (!item) {\n nullBoiz++\n return null\n } else {\n return {\n ...item.bot,\n botAssignmentSrn: item.srn,\n }\n }\n }\n )\n if (nullBoiz > 0) {\n yield put(setSwimlaneBotError('Error fetching Bots for Swimlane'))\n }\n return botties\n }\n } catch (err) {\n //eslint-disable-next-line no-console\n console.error(err)\n }\n}\n\nfunction* getSwimlanes(action) {\n try {\n const client = getClient(action.poll)\n const results = yield client.query({\n query: gql`\n query fetchSwimlanes {\n Swimlanes {\n items {\n description\n label\n title\n srn\n defaultImportance\n createdBy\n sid\n preventionEnabled\n lastModified\n createdDate\n name\n accounts\n names\n resourceIds\n tags\n resourceId\n }\n }\n }\n `,\n })\n\n if (results.data.Swimlanes.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n const bots = yield all(\n results.data.Swimlanes.items.map(swimlane =>\n call(getBotAssignments, swimlane.srn)\n )\n )\n const updatedSwimlanes = results.data.Swimlanes.items.map(\n (swimlane, index) => {\n return { ...swimlane, bots: bots[index] }\n }\n )\n const immutableResults = fromJS(updatedSwimlanes)\n\n const mappedByTitle = Map(\n immutableResults.map(swimlane => List([swimlane.get('title'), swimlane]))\n )\n\n yield put(fetchSwimlanesSuccess(mappedByTitle))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error fetching swimlanes', e)\n }\n}\n\nfunction* getAllRoles(action) {\n if (action.payload.skipAssignments) {\n return yield call(getRolesWithoutAssignments)\n }\n\n try {\n const client = getClient()\n const result = yield client.query({\n query: gql`\n query get_all_roles {\n SonraiRoles {\n items {\n name\n srn\n permissions\n expandedPermissions\n description\n resourceId\n roleAssignments {\n items {\n scope\n srn\n user {\n items {\n srn\n name\n email\n resourceId\n }\n }\n }\n }\n }\n }\n }\n `,\n })\n\n const roles = _.get(result, ['data', 'SonraiRoles', 'items'], null)\n if (roles == null) {\n throw 'the response did not return SonraiRoles.items'\n }\n\n const data = roles\n .map(role => {\n // try to get a list of unique users in the role\n const assignments = _.get(role, ['roleAssignments', 'items'], null)\n if (!assignments) {\n // eslint-disable-next-line no-console\n console.error(\n 'role ' + role.srn + ' did not have roleAssignments.items'\n )\n return null\n }\n const users = assignments\n .map(assignment => {\n const user = _.get(assignment, ['user', 'items', 0], null)\n if (!user) {\n // eslint-disable-next-line no-console\n console.error(\n 'role ' +\n role.srn +\n ' assigment ' +\n assignment.srn +\n ' did not have field user.items'\n )\n return null\n }\n return user\n })\n .filter(user => user != null)\n const uniqueUserNames = _.uniq(users.map(user => user.name))\n return {\n // omit description and put in after so the columns are in right order\n ..._.omit(role, ['description']),\n users: uniqueUserNames.length,\n description: role.description,\n }\n })\n .filter(role => role != null)\n\n yield put(setAllRoles({ data }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('There was an error fetching all roles ', e)\n yield put(errAllRoles())\n }\n}\n\nfunction* getRolesWithoutAssignments() {\n try {\n const client = getClient()\n const result = yield client.query({\n query: gql`\n query get_all_roles {\n SonraiRoles {\n items {\n name\n srn\n permissions\n expandedPermissions\n description\n resourceId\n }\n }\n }\n `,\n })\n\n const roles = _.get(result, ['data', 'SonraiRoles', 'items'], null)\n if (roles == null) {\n throw 'the response did not return SonraiRoles.items'\n }\n\n //Fill in blank roleAssignments\n const data = roles.map(role => {\n role.roleAssignments = { items: [] }\n return role\n })\n\n yield put(setAllRoles({ data }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('There was an error fetching the roles ', e)\n yield put(errAllRoles())\n }\n}\n\nfunction* updateRoles(action) {\n const DELETE_USER_ROLES_MUTATION = `\n mutation deleteRoleAssignment($deleteMe: [SonraiRoleAssignmentDeleter!]!) {\n DeleteSonraiRoleAssignments(input: $deleteMe) {\n items {\n srn\n deleted\n }\n }\n }\n `\n const CREATE_ROLE_ASSIGNMENT_MUTATION = `\n mutation assignRole($assignment: [SonraiRoleAssignmentCreator!]!) {\n CreateSonraiRoleAssignments(input: $assignment) {\n items {\n srn\n resourceId\n role {\n items {\n srn\n name\n description\n permissions\n }\n }\n scope\n }\n }\n }\n `\n const removed = []\n const added = []\n\n try {\n const client = getClient()\n if (action.payload.remove) {\n const response = yield client.mutate({\n mutation: gql`\n ${DELETE_USER_ROLES_MUTATION}\n `,\n variables: {\n deleteMe: action.payload.remove.map(srn => ({ srn: srn })),\n },\n })\n\n _.get(\n response,\n ['data', 'DeleteSonraiRoleAssignments', 'items'],\n []\n ).forEach(item => {\n if (item.deleted) {\n removed.push(item.srn)\n }\n })\n }\n\n if (action.payload.add) {\n const response = yield client.mutate({\n mutation: gql`\n ${CREATE_ROLE_ASSIGNMENT_MUTATION}\n `,\n variables: {\n assignment: action.payload.add.map(addMe => ({\n userSrn: action.payload.srn,\n roleSrn: addMe.roleSrn,\n scope: addMe.scope,\n })),\n },\n })\n\n _.get(\n response,\n ['data', 'CreateSonraiRoleAssignments', 'items'],\n []\n ).forEach(item => {\n added.push(item)\n })\n }\n\n yield put(\n updateUserRolesSuccess({\n userSrn: action.payload.srn,\n deletedSrns: removed,\n addedRoles: added,\n })\n )\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error saving user profile', e)\n }\n}\n\n// BOT time\n\nfunction* getAllBots(action) {\n const fields = action.payload.filters\n let filters = {}\n _.keys(fields).forEach(field => {\n if (fields[field]) {\n filters[field] = { value: fields[field].value }\n }\n })\n const client = getClient()\n let result\n\n try {\n if (!_.isEmpty(filters)) {\n result = yield client.query({\n query: GET_FILTERED_BOTS,\n variables: { filters },\n })\n } else {\n result = yield client.query({\n query: GET_ALL_BOTS,\n })\n }\n\n if (!result.data.Bots) {\n throw new Error('Bots query returned null')\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(`Error getting filtered bots ${e}`)\n }\n\n const bots = result.data.Bots.items\n\n yield put(setBots(bots))\n}\n\nfunction* removeBot(srn) {\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`\n mutation deleteBot($srn: String!) {\n DeleteBot(input: { srn: $srn })\n }\n `,\n variables: { srn },\n })\n return { srn, success: result.data.DeleteBot }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(`Error deleting bot ${e}`)\n }\n}\n\nfunction* deleteBots(action) {\n const { bots } = action.payload\n const results = yield all(bots.map(bot => call(removeBot, bot)))\n const currentBots = yield select(selectBots)\n const confirmedDeleted = results\n .filter(item => item.success === true)\n .map(item => item.srn)\n const updatedBots = currentBots\n .get('data')\n .toJS()\n .filter(bot => !confirmedDeleted.includes(bot.srn))\n yield put(handleDeleteBotsSuccess(updatedBots))\n}\n\nfunction* createBot(url) {\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: CREATE_BOT_MUTATION,\n variables: { url },\n })\n if (result.data.CreateBot) {\n return result.data.CreateBot\n } else {\n return {}\n }\n } catch (e) {\n return {}\n }\n}\n\nfunction* updateBotAssignments(action) {\n const CREATE_BOT_ASSIGNMENT_MUTATION = `\n mutation createAssignmentForSwimlane($input: [CreateBotAssignmentInput!]!) {\n CreateBotAssignments(input: $input) {\n items {\n srn\n bot {\n srn\n title\n description\n cloud\n url\n } \n }\n }\n }\n `\n\n const DELETE_BOT_ASSIGNMENT_MUTATION = `\n mutation deleteBotAssignment($input: [RemoveBotAssignmentInput!]!) {\n RemoveBotAssignments(input: $input) {\n items\n }\n }\n `\n\n try {\n const client = getClient()\n\n if (action.payload.add) {\n const result = yield client.mutate({\n mutation: gql`\n ${CREATE_BOT_ASSIGNMENT_MUTATION}\n `,\n variables: {\n input: action.payload.add,\n },\n })\n\n if (result.errors) {\n yield put(\n setSwimlaneBotError(\n _.get(result, ['errors', 0, 'message'], 'Error assigning bot')\n )\n )\n }\n }\n\n if (action.payload.remove) {\n const result = yield client.mutate({\n mutation: gql`\n ${DELETE_BOT_ASSIGNMENT_MUTATION}\n `,\n variables: {\n input: action.payload.remove.map(srn => ({ srn: srn })),\n },\n })\n\n if (result.errors) {\n yield put(\n setSwimlaneBotError(\n _.get(result, ['errors', 0, 'message'], 'Error assigning bot')\n )\n )\n }\n }\n\n const bots = yield call(getBotAssignments, action.payload.swimlaneSrn)\n\n yield put(\n updateBotAssignmentsSuccess({\n swimlaneSrn: action.payload.swimlaneSrn,\n bots: bots,\n })\n )\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error updating bot assignments', e)\n }\n}\n\nfunction* validateSourceUrl(action) {\n const { url } = action.payload\n // //some query here to give us a boolean val of valid or not\n // const isValid = url.includes('github') // this is palceholder - delete after real query\n // yield put(validateSourceUrlSuccess(isValid))\n const bot = yield call(createBot, url)\n const isValid = !_.isEmpty(bot)\n yield put(validateSourceUrlSuccess(isValid))\n if (isValid) {\n yield put(createBotSuccess(bot))\n }\n}\n\nfunction* deleteSwimlane(action) {\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`\n mutation deleteSwimlane($srn: ID!) {\n DeleteSwimlane(srn: $srn)\n }\n `,\n variables: { srn: action.payload.srn },\n })\n\n if (result.errors && result.errors.length > 0) {\n result.errors.map(err => {\n throw new Error(err.message)\n })\n }\n\n yield put(removeSwimlaneSuccess(action.payload.title))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('error deleting swimlanes', e)\n }\n}\n\nfunction* runAllDataFetcher() {\n const permissions = yield select(selectPermissions)\n const permissionKeys = _.keys(permissions.get('data'))\n\n let pollsSet = Map({\n getSavedSonraiSeaches: call(getSavedSonraiSeaches, { poll: true }),\n fetchSavedSearches: call(fetchSavedSearches, { poll: true }),\n })\n\n permissionKeys.forEach(permission => {\n if (permission === 'edit.swimlanes' || permission === 'assign.bots') {\n pollsSet = pollsSet.set(\n 'getSwimlanes',\n call(getSwimlanes, { poll: true })\n )\n }\n\n if (permission === 'view.data') {\n pollsSet = pollsSet.set('getAccounts', call(getAccounts, { poll: true }))\n pollsSet = pollsSet.set(\n 'getSwimlanes',\n call(getSwimlanes, { poll: true })\n )\n pollsSet = pollsSet.set(\n 'getAzureSubscriptions',\n call(getAzureSubscriptions, { poll: true })\n )\n }\n })\n\n const polls = pollsSet.toList().toJS()\n\n while (true) {\n yield all(polls)\n yield call(delay, POLL_FREQUENCY)\n }\n}\n\nfunction* getExemptedIdentities() {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n query getExemptedIdentities {\n BotsExemptedIdentities {\n items {\n resourceId\n cloud\n }\n }\n }\n `,\n })\n\n const ids = _.get(\n response,\n ['data', 'BotsExemptedIdentities', 'items'],\n null\n )\n\n if (response.errors || !ids) {\n const message = _.get(\n response,\n ['errors', 0, 'message'],\n 'Error retrieving Exempted Identities'\n )\n yield put(\n setExemptedIdentitiesError({\n error: message,\n })\n )\n } else {\n yield put(setExemptedIdentities({ identities: ids }))\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* addExemptedIdentities(action) {\n try {\n setTimeout(() => {}, 2500)\n const client = getClient()\n const response = yield client.mutate({\n mutation: gql`\n mutation createExemptItem($input: [BotsExemptedIdentityCreator!]!) {\n CreateBotsExemptedIdentities(input: $input) {\n items {\n resourceId\n cloud\n }\n }\n }\n `,\n variables: {\n input: action.payload.resourceIds.map(id => ({\n resourceId: id,\n cloud: action.payload.cloudType,\n })),\n },\n })\n\n const ids = _.get(\n response,\n ['data', 'CreateBotsExemptedIdentities', 'items'],\n null\n )\n\n if (response.errors || !ids) {\n const message = _.get(\n response,\n ['errors', 0, 'message'],\n 'Error adding Exempted Identities'\n )\n yield put(\n setExemptedIdentitiesError({\n error: message,\n })\n )\n } else {\n yield put(addExemptedIdentitiesSuccess({ identities: ids }))\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nfunction* deleteExemptedIdentities(action) {\n try {\n setTimeout(() => {}, 2500)\n const client = getClient()\n const response = yield client.mutate({\n mutation: gql`\n mutation deleteExemptedIdentity(\n $input: [BotsExemptedIdentityDeleter!]!\n ) {\n DeleteBotsExemptedIdentities(input: $input) {\n items {\n resourceId\n }\n }\n }\n `,\n variables: {\n input: action.payload.resourceIds.map(id => ({\n resourceId: id,\n })),\n },\n })\n\n const id = _.get(\n response,\n ['data', 'DeleteBotsExemptedIdentities', 'items', 0, 'resourceId'],\n null\n )\n\n if (response.errors || !id) {\n const message = _.get(\n response,\n ['errors', 0, 'message'],\n 'Error deleting Exempted Identities'\n )\n yield put(\n setExemptedIdentitiesError({\n error: message,\n })\n )\n } else {\n yield put(deleteExemptedIdentitiesSuccess({ resourceId: id }))\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n }\n}\n\nexport function* fetchObjectives() {\n try {\n const client = getClient()\n const response = yield client.query({\n query: gql`\n query getObjectives {\n SonraiObjectives {\n items {\n srn\n resourceId\n name\n description\n createdBy\n definedControlFrameworks {\n controlFrameworkSrn\n controlFrameworkOrder\n }\n appliedControlFrameworks {\n items {\n srn\n swimlaneSRNs\n contains {\n items {\n srn\n }\n }\n }\n }\n }\n }\n }\n `,\n })\n\n const objectives = _.get(\n response,\n ['data', 'SonraiObjectives', 'items'],\n null\n )\n\n if (response.errors || !objectives) {\n throw new Error(`Error fetching objectives: ' ${response.errors}`)\n } else {\n yield put(setObjectives(objectives))\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n yield put(fetchObjectivesError(e.message))\n }\n}\n\nfunction* enableObjective({ payload }) {\n try {\n const client = getClient()\n const response = yield client.mutate({\n mutation: gql`\n mutation enableObjective($input: [SonraiObjectiveAssignmentCreator!]!) {\n CreateSonraiObjectiveAssignment(input: $input) {\n items {\n controlFrameworkSrn\n swimlaneSrn\n }\n }\n }\n `,\n variables: {\n input: [\n {\n objectiveSrn: payload.objectiveSrn,\n swimlaneSrn: payload.swimlaneSrn,\n enableEscalationSchemes: payload.enableEscalationSchemes,\n },\n ],\n },\n })\n\n if (response.errors) {\n throw new Error(response.errors)\n } else {\n yield put(\n enableObjectiveSuccess({\n objectiveSrn: payload.objectiveSrn,\n swimlaneSrn: payload.swimlaneSrn,\n enableEscalationSchemes: payload.enableEscalationSchemes,\n })\n )\n yield put(fetchObjectivesAction())\n yield put(fetchControlGroups())\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n yield put(enableObjectiveError())\n }\n}\nfunction* enableAllObjectives({ payload }) {\n try {\n const objectives = yield select(selectObjectives)\n\n const client = getClient()\n const enableResults = yield all([\n ...objectives.toJS().map(obj =>\n client.mutate({\n mutation: gql`\n mutation enableObjective(\n $input: [SonraiObjectiveAssignmentCreator!]!\n ) {\n CreateSonraiObjectiveAssignment(input: $input) {\n items {\n controlFrameworkSrn\n swimlaneSrn\n }\n }\n }\n `,\n variables: {\n input: {\n objectiveSrn: obj.srn,\n swimlaneSrn: null,\n enableEscalationSchemes: payload.enableEscalationSchemes,\n },\n },\n })\n ),\n ])\n\n for (let index in enableResults) {\n if (enableResults[index].errors) {\n throw new Error(enableResults[index].errors)\n }\n }\n\n yield put(enableAllObjectivesSuccess())\n yield put(fetchObjectivesAction())\n yield put(fetchControlGroups())\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n yield put(enableAllObjectivesError())\n }\n}\n\nfunction* enableAllObjectivesForSwimlane({ payload }) {\n try {\n const swimlaneSrn = payload.swimlaneSrn\n const objectives = yield select(selectObjectives)\n\n const client = getClient()\n const enableResults = yield all([\n ...objectives.toJS().map(obj =>\n client.mutate({\n mutation: gql`\n mutation enableObjective(\n $input: [SonraiObjectiveAssignmentCreator!]!\n ) {\n CreateSonraiObjectiveAssignment(input: $input) {\n items {\n controlFrameworkSrn\n swimlaneSrn\n }\n }\n }\n `,\n variables: {\n input: {\n objectiveSrn: obj.srn,\n swimlaneSrn: swimlaneSrn,\n enableEscalationSchemes: payload.enableEscalationSchemes,\n },\n },\n })\n ),\n ])\n\n for (let index in enableResults) {\n if (enableResults[index].errors) {\n throw new Error(enableResults[index].errors)\n }\n }\n\n yield put(enableAllObjectivesForSwimlaneSuccess())\n yield put(fetchObjectivesAction())\n yield put(fetchControlGroups())\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(e)\n yield put(enableAllObjectivesForSwimlaneError())\n }\n}\n\nfunction* sonraiDataSaga() {\n yield all([\n takeLatest(RUN_INSPECTION_QUERY, runInspectionQuery),\n takeLatest(FETCH_SONRAI_CONFIG, getSonraiConfig),\n takeLatest(FETCH_SAVED_SEARCHES, fetchSavedSearches),\n takeLatest(FETCH_SAVED_SEARCHES_DETAILS, fetchSavedSearchesDetails),\n takeLatest(FETCH_SONRAI_SEARCHES, getSavedSonraiSeaches),\n takeLatest(FETCH_ACCOUNTS, getAccounts),\n takeLatest(FETCH_SUBSCRIPTIONS, getAzureSubscriptions),\n takeLatest(FETCH_TAGS, getTags),\n takeLatest(FETCH_DATA_CONTAINERS, getDataContainers),\n takeLatest(CHECK_IF_HAS_COLLECTORS, checkIfHasCollectors),\n takeLatest(GET_MONITORED_RESOURCES_COUNT, getMonitoredResourcesCount),\n takeLatest(FETCH_SWIMLANES, getSwimlanes),\n takeLatest(FETCH_SONRAI_USERS, getSonraiUsers),\n takeLatest(UPDATE_SONRAI_USER, updateSonraiUser),\n takeLatest(GET_ALL_ROLES, getAllRoles),\n takeLatest(UPDATE_USER_ROLES, updateRoles),\n takeLatest(GET_BOTS, getAllBots),\n takeLatest(VALIDATE_SOURCE_URL, validateSourceUrl),\n takeLatest(HANDLE_DELETE_BOTS, deleteBots),\n takeLatest(UPDATE_BOT_ASSIGNMENT, updateBotAssignments),\n takeLatest(REMOVE_SWIMLANE, deleteSwimlane),\n takeLatest(FETCH_GRAPHQL_SCHEMA, getGraphqlSchema),\n takeLatest(GET_EXEMPTED_IDENTITIES, getExemptedIdentities),\n takeLatest(ADD_EXEMPTED_IDENTITIES, addExemptedIdentities),\n takeLatest(DELETE_EXEMPTED_IDENTITIES, deleteExemptedIdentities),\n takeLatest(FETCH_OBJECTIVES, fetchObjectives),\n takeLatest(ENABLE_OBJECTIVE, enableObjective),\n takeLatest(ENABLE_ALL_OBJECTIVES, enableAllObjectives),\n takeLatest(\n ENABLE_ALL_OBJECTIVES_FOR_SWIMLANE,\n enableAllObjectivesForSwimlane\n ),\n ])\n\n while (true) {\n yield take(START_UPDATE_DATA_POLL)\n yield race([call(runAllDataFetcher), take(STOP_UPDATE_DATA_POLL)])\n }\n}\n\nexport default sonraiDataSaga\n","import {\n all,\n put,\n takeLatest,\n takeEvery,\n call,\n select,\n} from 'redux-saga/effects'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport { push } from 'connected-react-router'\nimport qs from 'query-string'\nimport {\n policyProps,\n controlFrameworkProps,\n FETCH_CONTROL_FRAMEWORKS_QUERY,\n FETCH_POLICIES_QUERY,\n FETCH_POLICY_SEARCH_NAME_QUERY,\n} from 'static-queries'\n\nimport { selectControlGroups } from './selectors'\nimport { getCurrentOrg } from 'auth/current-org'\nimport { SONRAI_ORG_NAME } from 'appConstants'\nimport { getClient } from 'apolloClient'\nimport {\n setPolicies,\n createPolicySuccess,\n updateControlGroupSuccess,\n setControlGroups,\n createControlGroupSuccess,\n deleteControlGroupSuccess,\n deletePolicySuccess,\n updatePolicySuccess,\n addPolicySuccess,\n removePolicySuccess,\n cloneFrameworkSuccess,\n setFrameworkEnabledSuccess,\n fetchControlGroups,\n setPolicyError,\n toggleEnabledOnSwimlanesSuccess,\n toggleSwimlaneOnCFsSuccess,\n toggleSwimlaneOnCFsError,\n} from './actions'\n\nimport {\n FETCH_POLICIES,\n CREATE_POLICY,\n FETCH_CONTROL_GROUPS,\n UPDATE_CONTROL_GROUP,\n CREATE_CONTROL_GROUP,\n DELETE_CONTROL_GROUP,\n DELETE_POLICY,\n UPDATE_POLICY,\n ADD_POLICY,\n REMOVE_POLICY,\n CLONE_FRAMEWORK,\n SET_FRAMEWORK_ENABLED,\n TOGGLE_ENABLED_ON_SWIMLANES,\n TOGGLE_SWIMLANE_ON_CFS,\n} from './constants'\n\nexport function* getControlGroups() {\n try {\n const client = getClient()\n const result = yield client.query({\n forceFetch: true,\n fetchPolicy: 'network-only',\n query: gql`\n ${FETCH_CONTROL_FRAMEWORKS_QUERY}\n `,\n })\n\n const controlGroups = _.get(result, ['data', 'ControlFrameworks', 'items'])\n\n if (!controlGroups) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n yield put(setControlGroups(controlGroups))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error fetching control groups', e)\n }\n}\n\nfunction* addControlGroup(action) {\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`\n mutation addControlFramework(\n $controlFramework: ControlframeworkCreator!\n ) {\n CreateControlframework(value: $controlFramework) {\n ${controlFrameworkProps}\n }\n }\n `,\n variables: {\n controlFramework: {\n title: action.payload.title,\n description: action.payload.description,\n shortDescription: action.payload.friendlyName,\n enabled: true,\n },\n },\n })\n\n const createdControlGroup = result.data.CreateControlframework\n\n yield put(createControlGroupSuccess(createdControlGroup))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error creating a control group', e)\n }\n}\n\nfunction* updateControlGroup(action) {\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`mutation updateControlFramework(\n $controlFramework: ControlframeworkUpdater!\n ) {\n UpdateControlframework (srn: \"${action.payload.srn}\", value: $controlFramework) {\n ${controlFrameworkProps}\n }\n }\n `,\n variables: {\n controlFramework: {\n title: action.payload.title,\n shortDescription: action.payload.friendlyName,\n description: action.payload.description,\n },\n },\n })\n\n const updatedControlGroup = result.data.UpdateControlframework\n yield put(updateControlGroupSuccess(updatedControlGroup))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error updating control group', e)\n }\n}\n\nexport function* deleteControlGroup(action) {\n try {\n const client = getClient()\n yield client.mutate({\n mutation: gql`mutation deleteControlFramework {\n DeleteControlframework (srn: \"${action.payload}\")\n }\n `,\n })\n yield put(deleteControlGroupSuccess(action.payload))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error deleting control group', e)\n }\n}\n\nexport function* deletePolicy(action) {\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`mutation deletePolicy {\n DeleteControlpolicy (srn: \"${action.payload}\")\n }\n `,\n })\n\n if (result.errors) {\n yield put(\n setPolicyError({\n msg: _.get(result.errors, [0, 'message'], 'Error Deleting Policy'),\n srn: action.payload,\n })\n )\n } else {\n yield put(deletePolicySuccess(action.payload))\n yield put(fetchControlGroups())\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error deleting policy', e)\n }\n}\n\nexport function* getPolicies() {\n try {\n const client = getClient()\n const result = yield client.query({\n forceFetch: true,\n fetchPolicy: 'network-only',\n query: gql`\n ${FETCH_POLICIES_QUERY}\n `,\n })\n\n if (result.data.ControlPolicies.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const policies = result.data.ControlPolicies.items.map(pol => {\n if (typeof pol.evalCriteria === 'string') {\n try {\n pol.evalCriteria = JSON.parse(pol.evalCriteria)\n } catch (e) {\n pol.evalCriteria = {}\n }\n }\n\n return pol\n })\n\n yield put(setPolicies(policies))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error fetching policies', e)\n }\n}\n\nfunction* createPolicy(action) {\n // const bots = action.payload.bots.map(bot => bot.value) --- an arr of srns\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`\n mutation addControlPolicy($controlPolicy: ControlpolicyCreator!) {\n CreateControlpolicy(value: $controlPolicy) {\n ${policyProps}\n }\n }\n `,\n variables: {\n controlPolicy: {\n alertingLevelNumeric: action.payload.alertingLevelNumeric,\n title: action.payload.title,\n description: action.payload.description,\n evalCriteria: JSON.stringify(action.payload.evalCriteria),\n contains: {\n add: action.payload.searchId,\n },\n containedByControlFramework: {\n add: action.payload.controlGroupId,\n },\n //bots\n },\n },\n })\n if (result.errors) {\n yield put(\n setPolicyError({\n msg: _.get(result.errors, [0, 'message'], 'Error Creating Policy'),\n srn: '',\n })\n )\n } else {\n const createdPolicy = result.data.CreateControlpolicy\n createdPolicy.evalCriteria = JSON.parse(createdPolicy.evalCriteria)\n yield put(createPolicySuccess(createdPolicy))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error creating a policy', e)\n }\n}\n\nfunction* addPolicy(action) {\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`mutation addControlPolicy {\n UpdateControlframework (srn: \"${action.payload.controlGroupId}\",\n value: {\n contains: {\n add: \"${action.payload.policyId}\"\n }\n }) {\n ${controlFrameworkProps}\n }\n }\n `,\n })\n\n if (result.errors) {\n yield put(\n setPolicyError({\n msg: _.get(result.errors, [0, 'message'], 'Error Adding Policy'),\n srn: '',\n })\n )\n } else {\n yield put(\n addPolicySuccess(_.get(result, ['data', 'UpdateControlframework']))\n )\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error creating a policy', e)\n }\n}\n\nfunction* removePolicy(action) {\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`mutation removeControlPolicy {\n UpdateControlframework (srn: \"${action.payload.controlGroupId}\",\n value: {\n contains: {\n remove: \"${action.payload.policyId}\"\n }\n }) {\n ${controlFrameworkProps}\n }\n }\n `,\n })\n\n if (result.errors) {\n yield put(\n setPolicyError({\n msg: _.get(result.errors, [0, 'message'], 'Error Adding Policy'),\n srn: action.payload.policyId,\n })\n )\n } else {\n yield put(\n removePolicySuccess({\n cf: _.get(result, ['data', 'UpdateControlframework']),\n policyId: action.payload.policyId,\n srn: action.payload.controlGroupId,\n })\n )\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error creating a policy', e)\n }\n}\n\nfunction* updatePolicy(action) {\n try {\n const client = getClient()\n\n const oldPolicySearch = yield client.query({\n forceFetch: true,\n fetchPolicy: 'network-only',\n query: gql`\n ${FETCH_POLICY_SEARCH_NAME_QUERY}\n `,\n variables: {\n policySrn: action.payload.srn,\n },\n })\n\n const oldSearchId = _.get(oldPolicySearch, [\n 'data',\n 'ControlPolicies',\n 'items',\n 0,\n 'contains',\n 'items',\n 0,\n 'srn',\n ])\n\n const result = yield client.mutate({\n mutation: gql`mutation updateControlPolicy($controlPolicy: ControlpolicyUpdater!) {\n UpdateControlpolicy (srn: \"${action.payload.srn}\", value: $controlPolicy) {\n ${policyProps}\n }\n }\n `,\n variables: {\n controlPolicy: {\n title: action.payload.title,\n description: action.payload.description,\n remediationType: action.payload.remediationType,\n alertingLevelNumeric: action.payload.alertingLevelNumeric,\n evalCriteria: JSON.stringify(action.payload.evalCriteria),\n contains:\n action.payload.searchId && oldSearchId !== action.payload.searchId\n ? {\n remove: oldSearchId,\n add: action.payload.searchId,\n }\n : undefined,\n },\n },\n })\n\n if (result.errors) {\n yield put(\n setPolicyError({\n msg: _.get(result.errors, [0, 'message'], 'Error Adding Policy'),\n srn: action.payload.policyId,\n })\n )\n } else {\n const updatedPolicy = _.get(result, ['data', 'UpdateControlpolicy'])\n if (updatedPolicy) {\n updatedPolicy.evalCriteria = JSON.parse(updatedPolicy.evalCriteria)\n }\n yield put(updatePolicySuccess(updatedPolicy))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error updating control policy', e)\n }\n}\n\nfunction* cloneAndEnableFramework(action) {\n try {\n const client = getClient()\n const cloneResult = yield client.mutate({\n mutation: gql`\n mutation cloneControlFramework {\n CloneControlframework(\n srn: \"${action.payload}\"\n ) {\n srn\n }\n }\n `,\n })\n\n const newSrn = cloneResult.data.CloneControlframework.srn\n\n //The clone mutation doesn't update the enabled property, so manually enable the new CF\n const result = yield client.mutate({\n mutation: gql`mutation updateControlFramework(\n $controlFramework: ControlframeworkUpdater!\n ) {\n UpdateControlframework (srn: \"${newSrn}\", value: $controlFramework) {\n ${controlFrameworkProps}\n }\n }\n `,\n variables: {\n controlFramework: {\n enabled: true,\n },\n },\n })\n\n const createdControlGroup = result.data.UpdateControlframework\n\n yield put(createControlGroupSuccess(createdControlGroup))\n yield put(cloneFrameworkSuccess(createdControlGroup.srn))\n yield put(cloneFrameworkSuccess(action.payload))\n yield put(setFrameworkEnabledSuccess(createdControlGroup.srn))\n yield put(updateControlGroupSuccess(createdControlGroup))\n return createdControlGroup.srn\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error cloning a control group', e)\n }\n}\n\nfunction* cloneAndEnableFrameworkOnSwimlane({ payload }) {\n try {\n const client = getClient()\n const cloneResult = yield client.mutate({\n mutation: gql`\n mutation cloneControlFramework {\n CloneControlframework(\n srn: \"${payload.srn}\"\n ) {\n srn\n }\n }\n `,\n })\n\n if (!cloneResult.data.CloneControlframework || cloneResult.errors) {\n throw new Error('Toggle Enabled mutation error')\n }\n\n const newSrn = cloneResult.data.CloneControlframework.srn\n\n //The clone mutation doesn't update the enabled property, so manually enable the new CF\n const result = yield client.mutate({\n mutation: gql`mutation updateControlFramework(\n $controlFramework: ControlframeworkUpdater!, $srn: ID!\n ) {\n UpdateControlframework (srn: $srn, value: $controlFramework) {\n ${controlFrameworkProps}\n }\n }\n `,\n variables: {\n srn: newSrn,\n controlFramework: {\n enabled: true,\n swimlaneSRNs: {\n add: payload.add ? payload.add : [],\n remove: payload.remove ? payload.remove : [],\n },\n },\n },\n })\n\n const createdControlGroup = result.data.UpdateControlframework\n if (!createdControlGroup || result.errors) {\n throw new Error('Toggle Enabled mutation error')\n }\n\n if (payload.redirect) {\n yield put(\n push({\n pathname: '/App/ControlCenter/ControlGroup',\n search: qs.stringify({\n controlGroupId: newSrn,\n }),\n })\n )\n }\n\n yield put(\n toggleEnabledOnSwimlanesSuccess({\n srn: payload.srn,\n cf: createdControlGroup,\n })\n )\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error enabling a control group with swimanes', e)\n }\n}\n\nfunction* toggleSwimlaneOnCFs({ payload }) {\n try {\n const client = getClient()\n\n const addResults = yield all([\n ...payload.add.map(cfSrn =>\n client.mutate({\n mutation: gql`\n mutation assignControlFramework(\n $controlFrameworkSrn: String!,\n $add: [String],\n $remove: [String]\n ) {\n AssignControlFrameworksToSwimlanes(input: [\n {\n controlFrameworkSrn: $controlFrameworkSrn,\n swimlaneSrns: {\n add: $add,\n remove: $remove,\n },\n }\n ]) {\n ${controlFrameworkProps}\n }\n }\n `,\n variables: {\n controlFrameworkSrn: cfSrn,\n add: [payload.srn],\n remove: [],\n },\n })\n ),\n ])\n\n const removeResults = yield all([\n ...payload.remove.map(cfSrn =>\n client.mutate({\n mutation: gql`\n mutation assignControlFramework(\n $controlFrameworkSrn: String!,\n $add: [String],\n $remove: [String]\n ) {\n AssignControlFrameworksToSwimlanes(input: [\n {\n controlFrameworkSrn: $controlFrameworkSrn,\n swimlaneSrns: {\n add: $add,\n remove: $remove,\n },\n }\n ]) {\n ${controlFrameworkProps}\n }\n }\n `,\n variables: {\n controlFrameworkSrn: cfSrn,\n add: [],\n remove: [payload.srn],\n },\n })\n ),\n ])\n\n if (addResults && addResults.length > 0) {\n for (let addResult of addResults) {\n const cf = _.get(\n addResult,\n ['data', 'AssignControlFrameworksToSwimlanes', 0],\n null\n )\n if (cf) {\n yield put(toggleEnabledOnSwimlanesSuccess({ srn: cf.srn, cf }))\n } else if (addResult.errors) {\n throw new Error(\n _.get(\n addResult,\n ['errors', 0, 'message'],\n 'Toggle Enabled mutation error'\n )\n )\n }\n }\n }\n\n if (removeResults && removeResults.length > 0) {\n for (let removeResult of removeResults) {\n const cf = _.get(\n removeResult,\n ['data', 'AssignControlFrameworksToSwimlanes', 0],\n null\n )\n\n if (cf) {\n yield put(toggleEnabledOnSwimlanesSuccess({ srn: cf.srn, cf }))\n } else if (removeResult.errors) {\n throw new Error(\n _.get(\n removeResult,\n ['errors', 0, 'message'],\n 'Toggle Enabled mutation error'\n )\n )\n }\n }\n }\n\n yield put(toggleSwimlaneOnCFsSuccess({ srn: payload.srn }))\n } catch (e) {\n yield put(toggleSwimlaneOnCFsError({ srn: payload.srn, error: e.message }))\n // eslint-disable-next-line no-console\n console.error('Error enabling swimlanes on a control group', e)\n }\n}\n\nfunction* toggleEnabledOnSwimlane({ payload }) {\n const frameworks = yield select(selectControlGroups)\n const cf = frameworks.get(payload.srn)\n const org = cf.getIn(['ownedByOrganization', 'items', 0, 'name'])\n\n if (org === SONRAI_ORG_NAME && getCurrentOrg() !== SONRAI_ORG_NAME) {\n //We cannot modify CFs that are owned by sonrai, so to enable them we actually have to clone them first.\n yield call(cloneAndEnableFrameworkOnSwimlane, {\n payload,\n })\n\n return\n }\n\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`\n mutation assignControlFramework(\n $controlFrameworkSrn: String!,\n $add: [String],\n $remove: [String]\n ) {\n AssignControlFrameworksToSwimlanes(input: [\n {\n controlFrameworkSrn: $controlFrameworkSrn,\n swimlaneSrns: {\n add: $add,\n remove: $remove,\n },\n }\n ]) {\n ${controlFrameworkProps}\n }\n }\n `,\n variables: {\n controlFrameworkSrn: payload.srn,\n add: payload.add ? payload.add : [],\n remove: payload.remove ? payload.remove : [],\n },\n })\n\n const stuff = _.get(\n result,\n ['data', 'AssignControlFrameworksToSwimlanes', 0],\n null\n )\n if (stuff) {\n yield put(\n toggleEnabledOnSwimlanesSuccess({ srn: payload.srn, cf: stuff })\n )\n } else if (result.errors) {\n throw new Error('Toggle Enabled mutation error')\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error enabling swimlanes on a control group', e)\n }\n}\n\nexport function* setFrameworkEnabled(action) {\n const frameworks = yield select(selectControlGroups)\n const cf = frameworks.get(action.payload.srn)\n const org = cf.getIn(['ownedByOrganization', 'items', 0, 'name'])\n\n if (org === SONRAI_ORG_NAME && getCurrentOrg() !== SONRAI_ORG_NAME) {\n //We cannot modify CFs that are owned by sonrai, so to enable them we actually have to clone them first.\n const newSrn = yield call(cloneAndEnableFramework, {\n payload: action.payload.srn,\n })\n\n if (action.payload.redirect) {\n yield put(\n push({\n pathname: '/App/ControlCenter/ControlGroup',\n search: qs.stringify({\n controlGroupId: newSrn,\n }),\n })\n )\n }\n\n return\n }\n\n try {\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`\n mutation assignControlFramework(\n $controlFrameworkSrn: String!,\n $enabled: Boolean,\n ) {\n AssignControlFrameworksToSwimlanes(input: [\n {\n controlFrameworkSrn: $controlFrameworkSrn,\n enabled: $enabled\n }\n ]) {\n ${controlFrameworkProps}\n }\n }\n `,\n variables: {\n controlFrameworkSrn: action.payload.srn,\n enabled: action.payload.enabled,\n },\n })\n\n const updatedControlGroup =\n result.data.AssignControlFrameworksToSwimlanes[0]\n\n yield put(setFrameworkEnabledSuccess(action.payload.srn))\n yield put(updateControlGroupSuccess(updatedControlGroup))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error updating control group', e)\n }\n}\n\nfunction* controlFrameworkDataSaga() {\n yield all([\n takeLatest(FETCH_POLICIES, getPolicies),\n takeLatest(CREATE_POLICY, createPolicy),\n takeLatest(FETCH_CONTROL_GROUPS, getControlGroups),\n takeLatest(UPDATE_CONTROL_GROUP, updateControlGroup),\n takeLatest(CREATE_CONTROL_GROUP, addControlGroup),\n takeEvery(DELETE_CONTROL_GROUP, deleteControlGroup),\n takeEvery(DELETE_POLICY, deletePolicy),\n takeLatest(UPDATE_POLICY, updatePolicy),\n takeLatest(ADD_POLICY, addPolicy),\n takeEvery(REMOVE_POLICY, removePolicy),\n takeLatest(CLONE_FRAMEWORK, cloneAndEnableFramework),\n takeEvery(SET_FRAMEWORK_ENABLED, setFrameworkEnabled),\n takeEvery(TOGGLE_ENABLED_ON_SWIMLANES, toggleEnabledOnSwimlane),\n takeEvery(TOGGLE_SWIMLANE_ON_CFS, toggleSwimlaneOnCFs),\n ])\n}\n\nexport default controlFrameworkDataSaga\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport Slider from 'rc-slider'\nimport 'rc-slider/assets/index.css'\nconst Handle = Slider.Handle\n\nclass ImportanceWidget extends Component {\n styles = {\n slider: {\n width: '168px',\n margin: '0.5rem 0',\n },\n }\n\n handleChange = props => {\n const { value, dragging, ...restProps } = props\n\n //Convert dragging to a string to remove a warning in console\n //See: https://github.com/react-component/slider/issues/502\n return (\n \n \n {value}\n \n \n )\n }\n\n setImportance = (nodeId, importance) => {\n if (this.props.importance !== importance) {\n this.props.setImportance({ srn: nodeId, importance: importance })\n }\n }\n\n render() {\n const { nodeId } = this.props\n\n return (\n
    \n {\n this.setImportance(nodeId, importance)\n }}\n min={1}\n max={10}\n defaultValue={\n typeof this.props.importance !== undefined &&\n this.props.importance !== 0\n ? this.props.importance\n : 1\n }\n handle={this.handleChange}\n disabled={this.props.disabled}\n />\n
    \n )\n }\n}\n\nImportanceWidget.propTypes = {\n importance: PropTypes.number,\n setImportance: PropTypes.func.isRequired,\n nodeId: PropTypes.string,\n disabled: PropTypes.bool,\n}\n\nexport default ImportanceWidget\n","/**\n *\n * IconCount\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nclass IconCount extends React.PureComponent {\n render() {\n return (\n \n {this.props.text}\n \n )\n }\n}\n\nIconCount.defaultProps = {\n style: {},\n color: 'red',\n}\n\nIconCount.propTypes = {\n color: PropTypes.string,\n title: PropTypes.string,\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n style: PropTypes.object,\n}\n\nexport default IconCount\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport const EmptyText = ({ theme, children }) => {\n return (\n \n {children}\n \n )\n}\n\nEmptyText.propTypes = {\n theme: themeShape,\n children: PropTypes.node,\n}\n\nexport default themeable(EmptyText)\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\nimport { Map } from 'immutable'\nimport CloudBadge from 'components/CloudBadge'\nimport { selectBotsMap } from 'containers/SonraiData/selectors'\nimport TextLink from 'components/TextLink'\nimport qs from 'query-string'\nimport { stripTags } from 'utils/sonraiUtils'\n\nclass BotWidget extends React.Component {\n styles = {\n container: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n alignItems: 'center',\n },\n }\n\n getPushLink = srn => {\n return {\n pathname: '/App/BotManagement/BotDetails',\n search: qs.stringify({\n botId: srn,\n }),\n }\n }\n\n render() {\n if (!this.props.srn || typeof this.props.srn !== 'string') {\n return '-'\n }\n\n const bot = this.props.bots.get(this.props.srn) || Map()\n if (bot.isEmpty()) {\n return \n }\n\n return (\n
    \n \n \n \n {stripTags(bot.get('title'))}\n \n
    \n \n )\n }\n}\n\nBotWidget.propTypes = {\n bots: ImmutablePropTypes.map,\n srn: PropTypes.string,\n table: PropTypes.bool,\n}\nconst mapStateToProps = createStructuredSelector({\n bots: selectBotsMap,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default compose(withConnect)(BotWidget)\n","/**\n *\n * SonraiCountDisplay\n *\n */\n\nimport PropTypes from 'prop-types'\nimport { sonraiCountDisplay } from 'utils/sonraiUtils'\n\nconst SonraiCountDisplay = ({ count, hasSearchLimit }) => {\n return sonraiCountDisplay(count, hasSearchLimit)\n}\n\nSonraiCountDisplay.defaultProps = {\n hasSearchLimit: false,\n}\n\nSonraiCountDisplay.propTypes = {\n count: PropTypes.number.isRequired,\n hasSearchLimit: PropTypes.bool,\n}\n\nexport default SonraiCountDisplay\n","import { styled as stylesIn } from 'react-tabtab'\nimport styled from 'styled-components'\n\nexport const getTheme = (theme, small) => {\n let { TabListStyle, ActionButtonStyle, TabStyle, PanelStyle } = stylesIn\n\n TabStyle = styled(TabStyle)`\n color: ${theme.dark};\n font-weight: 300;\n padding: 0;\n margin: 0 5px;\n transition: color 0.28s ease;\n border: none;\n border-bottom: 2px solid #fff;\n height: ${small ? '37px' : '47px'};\n &:hover {\n border-bottom: 2px solid ${theme.primary};\n }\n ${props => {\n return props.active\n ? `\n color: ${theme.primary};\n `\n : null\n }}\n ${props =>\n props.active && !props.vertical\n ? `\n border-bottom: 2px solid ${theme.primary};\n `\n : null};\n `\n\n ActionButtonStyle = styled(ActionButtonStyle)`\n background-color: transparent;\n border: none;\n padding: 0px;\n margin-top: -0.1em;\n border-radius: 0;\n &:hover {\n color: #1b75bc;\n }\n `\n\n PanelStyle = styled(PanelStyle)`\n border-left: 1px solid rgba(0, 0, 0, 0.12);\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 30px 30px;\n transition: box-shadow 0.25s, -webkit-box-shadow 0.25s;\n border-radius: 2px;\n `\n\n return {\n TabList: TabListStyle,\n ActionButton: ActionButtonStyle,\n Tab: TabStyle,\n Panel: PanelStyle,\n }\n}\n","/**\n *\n * Tab\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport Radium from 'radium'\nimport { Dropdown, DropdownToggle, Fade } from 'reactstrap'\n\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport DropdownMenu from 'components/StyledReactstrapDropdownMenu'\n\nclass Tab extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n moreButton: {\n padding: '0 0.3em 0 0.7em',\n marginRight: '-3px',\n border: 0,\n display: 'inline',\n },\n link: {\n display: 'block',\n width: '100%',\n marginBottom: '0.5em',\n paddingTop: '0.25em',\n paddingBottom: '0.25em',\n paddingLeft: '1em',\n paddingRight: '1em',\n cursor: 'pointer',\n ':hover': { backgroundColor: 'rgba(116, 180, 223, 0.4)' },\n textAlign: 'left',\n },\n tab: {\n padding: props.small ? '5px' : '10px',\n fontSize: props.small ? '16px' : '18px',\n },\n }\n\n this.state = {\n hover: false,\n dropdownExpanded: false,\n }\n }\n\n toggleActionMenu = event => {\n event.stopPropagation() //Required to prevent navigation when clicking the options dropdown\n\n this.setState(oldState => {\n return {\n dropdownExpanded: !oldState.dropdownExpanded,\n }\n })\n }\n\n render() {\n return (\n this.setState({ hover: true })}\n onMouseLeave={() => this.setState({ hover: false })}\n style={this.styles.tab}\n >\n {this.props.text}\n {this.props.actions &&\n (this.state.hover || this.state.dropdownExpanded) && (\n \n \n \n \n \n \n\n \n {this.props.actions.map(({ text, link }) => (\n \n {text}\n \n ))}\n \n \n )}\n \n )\n }\n}\n\nTab = Radium(Tab) // eslint-disable-line\n\nTab.propTypes = {\n text: PropTypes.node,\n actions: PropTypes.array,\n small: PropTypes.bool,\n}\n\nexport default Tab\n","/**\n *\n * TabBar\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { Tabs, TabList, Tab } from 'react-tabtab'\nimport { getTheme } from './theme'\nimport * as customStyle from 'react-tabtab/lib/themes/material-design'\n\nimport TabContent from './Tab'\nimport themeable from 'containers/ThemeManager/Themeable'\nclass TabBar extends React.Component {\n style = {\n ...customStyle,\n ...getTheme(this.props.theme, this.props.small),\n }\n\n render() {\n const nCards = this.props.tabs\n const tabTemplate = nCards.map(tab => {\n const closable = this.props.tabs.length > 1 && tab.closable\n return (\n \n \n \n )\n })\n\n return (\n \n {tabTemplate}\n \n )\n }\n}\n\nTabBar.propTypes = {\n changeTab: PropTypes.func.isRequired,\n activeTab: PropTypes.number.isRequired,\n tabs: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n actions: PropTypes.array,\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n })\n ).isRequired,\n theme: PropTypes.shape({\n primary: PropTypes.string,\n dark: PropTypes.string,\n }),\n handleEdit: PropTypes.func,\n handleTabSequenceChange: PropTypes.func,\n showModal: PropTypes.bool,\n showArrow: PropTypes.bool,\n small: PropTypes.bool,\n}\n\nexport default themeable(TabBar)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport numeral from 'numeral'\nimport SizeMe from 'components/SizeMe'\nimport TextLink from 'components/TextLink'\nexport class BigStat extends React.Component {\n styles = {\n number: {\n textAlign: 'center',\n overflow: 'hidden',\n width: '100%',\n height: '100%',\n },\n searchLink: {\n fontWeight: '300',\n cursor: 'pointer',\n transition: 'color 0.1s ease-out',\n },\n }\n\n shouldComponentUpdate = newProps => {\n return (\n newProps.height !== this.props.height ||\n newProps.width !== this.props.width ||\n newProps.data !== this.props.data\n )\n }\n\n getTextSize = (text, fontSize) => {\n var canvas = this.canvas || (this.canvas = document.createElement('canvas'))\n var context = canvas.getContext('2d')\n context.font = `300 ${fontSize}px 'Roboto', 'Helvetica Neue', Arial, sans-serif`\n var metrics = context.measureText(text)\n return metrics.width\n }\n\n getFontSize = () => {\n const formatted = `${numeral(this.props.data).format('0.[00]a')}`\n\n let fontSize = 60\n\n let textSize = this.getTextSize(formatted, fontSize)\n\n while (textSize > this.props.width && fontSize > 20) {\n fontSize = fontSize - 5\n textSize = this.getTextSize(formatted, fontSize)\n }\n\n return fontSize\n }\n\n render() {\n return (\n
    \n \n {numeral(this.props.data).format('0.[00]a')}\n \n
    \n )\n }\n}\n\nBigStat.propTypes = {\n onClick: PropTypes.func,\n data: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n title: PropTypes.string,\n height: PropTypes.number,\n width: PropTypes.number,\n}\n\nexport default SizeMe(BigStat)\n","/**\n *\n * BigStatWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Query } from 'react-apollo'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport Color from 'color'\nimport Card, { BottomTitle, CardBody } from 'components/Card'\nimport TextLink from 'components/TextLink'\nimport WidgetCard from 'components/WidgetCard'\nimport { BOUNDARY_OPTIONS } from 'appConstants'\nimport { queryHasPivotFilter } from 'query-builder'\nimport {\n getFields,\n getSonraiSearchQuery,\n getSearchCard,\n getSonraiSearchData,\n getSelection,\n hasSonraiSearch,\n} from 'query-builder'\nimport BigStat from './BigStat'\nimport { getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\nimport { widgetSearchUsesFirstCard } from 'utils/widgetUtils'\nimport { Map } from 'immutable'\n\nexport class BigStatWidget extends React.Component {\n getQuery = () => {\n if (hasSonraiSearch(this.props.options, 'bigcountsearch')) {\n return getSonraiSearchQuery(\n this.props.options.sonraiSearches.bigcountsearch\n )\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.bigcountsearch\n )\n\n if (fields.isEmpty()) {\n return {}\n }\n\n const rootField = fields.find(\n statement => !statement.get('parentId'),\n null,\n Map()\n )\n\n const queryBuilder = this.props.getQueryBuilder(fields)\n queryBuilder.countsOnly()\n\n if (this.searchUsesFirstCard()) {\n //Performance optimization: skip aggregations if the query is reading the count from the first card\n queryBuilder.enableFlattenMode()\n }\n\n return queryBuilder.buildPivotableSource(\n rootField.get('id'),\n 'bigstatquery'\n )\n }\n }\n\n searchUsesFirstCard = () => {\n const searchCardId = getSearchCard(\n this.props.resultLayout,\n 'bigcountsearch'\n ).id\n\n return widgetSearchUsesFirstCard(\n this.props.resultLayout.indexedSearches.bigcountsearch,\n this.props.savedSearches,\n searchCardId\n )\n }\n\n getSearchName = () => {\n return hasSonraiSearch(this.props.options, 'bigcountsearch')\n ? this.props.options.sonraiSearches.bigcountsearch\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.bigcountsearch,\n 'name',\n ])\n }\n\n getNumber = data => {\n if (_.isEmpty(data)) {\n return ''\n }\n\n if (!_.isEmpty(this.props.options.sonraiSearches.bigcountsearch)) {\n return this.getNumberFromSonraiSearch(data)\n } else {\n return this.getNumberFromSavedSearch(data)\n }\n }\n\n getNumberFromSavedSearch = data => {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.bigcountsearch\n ).toJS()\n\n const searchCard = getSearchCard(this.props.resultLayout, 'bigcountsearch')\n const selection = getSelection(\n fields,\n searchCard,\n 'count',\n this.searchUsesFirstCard() ? 'items' : 'aggregation'\n )\n\n if (!selection) {\n return 'DATA ERROR'\n }\n\n const number = _.get(data, [...selection])\n\n if (typeof number === 'string' || typeof number === 'number') {\n return number\n } else {\n return 'DATA ERROR'\n }\n }\n\n getNumberFromSonraiSearch = data => {\n let num = getSonraiSearchData(data).count\n if (num) {\n return num\n } else {\n return 0\n }\n }\n\n getBorderStyle = count => {\n if (count === '' || count === null) {\n return {}\n }\n\n if (typeof count === `object`) {\n count = count.for\n }\n\n const thresholds = _.get(this.props.resultLayout, [\n 'widgetOptions',\n 'thresholds',\n ])\n if (!thresholds) {\n return\n } else {\n let style = {}\n\n thresholds.forEach(threshold => {\n let isMatch = false\n\n if (threshold.type === 'between') {\n if (count >= threshold.start && count <= threshold.end) {\n isMatch = true\n }\n } else {\n const sign = threshold.operatorSign\n switch (sign) {\n case BOUNDARY_OPTIONS.GREATER:\n if (count > threshold.operatorVal) {\n isMatch = true\n }\n break\n case BOUNDARY_OPTIONS.LESS:\n if (count < threshold.operatorVal) {\n isMatch = true\n }\n break\n case BOUNDARY_OPTIONS.EQUAL:\n if (count === threshold.operatorVal) {\n isMatch = true\n }\n break\n }\n }\n\n if (isMatch) {\n const shadowColor = Color(threshold.color).alpha(0.5).rgb().string()\n\n const borderColor = Color(threshold.color).alpha(0.7).rgb().string()\n\n style = {\n borderRadius: '3px',\n border: `1px solid ${borderColor}`,\n boxShadow: `0 2px 5px 3px ${shadowColor}`,\n }\n }\n })\n return style\n }\n }\n\n onClickSearch = () => {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.bigcountsearch,\n sonraiSearchName: this.props.options.sonraiSearches.bigcountsearch,\n searchTitle: this.props.title,\n })\n }\n\n getTitleFontSize = title => {\n const width = this.props.layout.w\n const numChars = title.length\n\n let fontSize = 16\n\n let textToWidthRatio = numChars / width\n\n if (textToWidthRatio > 4.6) {\n fontSize = 13\n }\n\n return {\n fontSize: `${fontSize}px`,\n }\n }\n\n getSearchId = () => {\n const { options, sonraiSearches, resultLayout } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'bigcountsearch')) {\n const searches = getSearchIdForSonraiSearches(options, sonraiSearches)\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set(\n 'uiSearch',\n resultLayout.indexedSearches.bigcountsearch\n )\n }\n return searchObj\n }\n\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const query = this.getQuery()\n if (!query.gqlStatement) {\n return (\n \n )\n }\n\n const filtered = queryHasPivotFilter(query.gqlStatement)\n\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n const number = this.getNumber(data)\n const borderStyle = this.getBorderStyle(number)\n\n return (\n \n {this.props.title}\n \n }\n filtered={filtered}\n pivot={filtered ? this.props.pivot : undefined}\n error={error}\n description={_.get(this.props.resultLayout, [\n 'widgetOptions',\n 'description',\n ])}\n >\n \n \n \n \n \n {this.props.title}\n \n \n \n )\n }}\n \n )\n } else {\n return (\n \n \n \n \n \n {this.props.title}\n \n \n )\n }\n }\n}\n\nBigStatWidget.defaultProps = {\n layout: {\n w: 10,\n },\n savedSearches: Map(),\n}\n\nBigStatWidget.propTypes = {\n layout: PropTypes.shape({\n w: PropTypes.number,\n }),\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n disableToolbar: PropTypes.bool,\n title: PropTypes.node.isRequired,\n onRemove: PropTypes.func,\n toggleStatic: PropTypes.func,\n savedSearches: ImmutablePropTypes.map.isRequired,\n static: PropTypes.bool,\n options: PropTypes.object,\n pivot: ImmutablePropTypes.map,\n resultLayout: PropTypes.object,\n getQueryBuilder: PropTypes.func,\n onClickSearch: PropTypes.func,\n data: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onEdit: PropTypes.func,\n sonraiSearches: ImmutablePropTypes.iterable,\n widget: PropTypes.object,\n}\n\nexport default BigStatWidget\n","import { createSelector } from 'reselect'\nimport { fromJS, Map } from 'immutable'\nimport _ from 'lodash'\nimport qs from 'query-string'\nimport { initialState } from './reducer'\n\nexport const selectQueryStringTicketSrn = (state, props) => {\n return qs.parse(_.get(props, ['location', 'search'], '')).srn\n}\n\nconst selectDomain = state => state.get('ticketDetails') ?? initialState\n\nexport const selectAssignToMe = createSelector(selectDomain, state =>\n state.get('assignToMe')\n)\n\nexport const selectTicketDetails = createSelector(selectDomain, state =>\n state.get('ticketDetails')\n)\n\nexport const selectTicketComments = createSelector(\n selectDomain,\n state => state.get('ticketComments') || Map()\n)\n\nexport const selectAddCommentError = createSelector(selectDomain, state =>\n state.get('addCommentError')\n)\n\nexport const selectSimilarTickets = createSelector(\n selectDomain,\n state => state.get('similarTickets') || Map()\n)\n\nexport const selectTicketHistory = createSelector(\n selectDomain,\n state => state.get('ticketHistory') || Map()\n)\n\nexport const selectActivityTicketActions = createSelector(selectDomain, state =>\n state.get('activityTicketActions')\n)\n\nexport const selectAcceptRiskTicketStatus = createSelector(\n selectDomain,\n state => state.get('acceptRiskTicketStatus')\n)\n\nexport const selectCloseTicketStatus = createSelector(selectDomain, state =>\n state.get('closeTicketStatus')\n)\n\nexport const selectSnoozeTicketStatus = createSelector(selectDomain, state =>\n state.get('snoozeTicketStatus')\n)\n\nexport const selectReassignToUserStatus = createSelector(selectDomain, state =>\n state.get('reassignToUserStatus')\n)\n\nexport const selectReopenTicketStatus = createSelector(selectDomain, state =>\n state.get('reopenTicketStatus')\n)\n\nexport const selectPolicyEvidenceLegacy = createSelector(selectDomain, state =>\n state.get('policyEvidenceLegacy')\n)\n\nexport const selectPolicyPath = createSelector(selectDomain, state =>\n state.get('policyPath')\n)\n\nexport const selectBulkActionWorking = createSelector(selectDomain, state =>\n state.get('bulkActionWorking')\n)\n\n/**\n * get whether or not any action is currnetly loading/error\n */\nexport const selectActionStatus = createSelector(\n [\n selectAssignToMe,\n selectAcceptRiskTicketStatus,\n selectCloseTicketStatus,\n selectSnoozeTicketStatus,\n selectReopenTicketStatus,\n selectReassignToUserStatus,\n ],\n (...actions) =>\n fromJS({\n loading: actions.reduce(\n (loading, action) => loading || action.get('loading'),\n false\n ),\n error: actions.reduce(\n (error, action) => error || action.get('error'),\n false\n ),\n })\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\n\nimport {\n getFields,\n getSearchCard,\n getBaseSonraiSearchData,\n getSelection,\n hasSonraiSearch,\n} from 'query-builder'\n\nimport { TopTitle, CardBody } from 'components/Card'\nimport DataTable from 'components/DataTable'\nimport WidgetCard from 'components/WidgetCard'\n\nimport { exists } from 'utils/sonraiUtils'\n\nexport default class TableWidgetQueryResult extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n // we keep the rows in state so we don't have to do the transform in getRows\n // on each render, otherwise a new object get passed down to DataTable and\n // cause it to re-process it's data\n rows: this.getRows(props.data),\n }\n }\n\n styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n cursor: 'pointer',\n marginRight: '0px',\n },\n subtitle: {\n fontSize: '14px',\n fontWeight: '300',\n color: '#888888',\n },\n card: {\n minHeight: 0, //Required to allow tables to autosize without overflowing\n },\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.data !== this.props.data) {\n this.setState({ rows: this.getRows(this.props.data) })\n }\n }\n\n getRows = data => {\n const subData = this.getData(data)\n\n //The following is to get a deep clone of the original data,\n //which has been made immutable by Apollo Query using Object.preventExtensions()\n //AGGrid temporarily adds a property to the row items to track changes between renders\n //which results in an error because it cannot modify the original objects\n let rows = _.cloneDeep(subData) || []\n\n return rows\n }\n\n getData = data => {\n if (hasSonraiSearch(this.props.options, 'table')) {\n return getBaseSonraiSearchData(data)\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.table\n ).toJS()\n\n if (this.props.shouldFlatten()) {\n if (_.isObject(data)) {\n const key = _.first(_.keys(data))\n return _.get(data, [key, 'items'], [])\n }\n return data\n } else {\n const searchCard = getSearchCard(this.props.resultLayout, 'table')\n const path = getSelection(fields, searchCard, 'items')\n\n return _.get(data, path)\n }\n }\n }\n\n onClickFlattenedNodeView = (allData, clickedRowData) => {\n if (!hasSonraiSearch(this.props.options, 'table')) {\n const dataKey = Object.keys(allData)[0]\n const dataItems = allData[dataKey].items\n\n if (!dataItems || dataItems.length === 0) {\n return\n }\n\n const rootDataSample = dataItems[0]\n const rootDataTypeKey = Object.keys(rootDataSample).find(propertyKey =>\n propertyKey.includes('__typename')\n )\n const rootDataType = rootDataSample[rootDataTypeKey]\n const rowRootDataSrn = clickedRowData[`${rootDataType}_srn`]\n if (rowRootDataSrn) {\n this.props.onClickNodeView(rowRootDataSrn, rootDataType)\n }\n }\n }\n\n render() {\n // const rows = this.state.rows\n\n let flatten = false\n if (\n !_.isEmpty(this.props.data) &&\n this.props.shouldFlatten() &&\n this.props.networkStatus !== 1\n ) {\n flatten = true\n }\n\n //Required to prevent error on refetching\n //See: https://github.com/apollographql/apollo-client/issues/1291#issuecomment-367911441\n const doRefetch = () => {\n this.props.refetch()\n }\n\n return (\n \n {this.props.renderHeader(this.state.rows.length)}\n \n {!_.isEmpty(this.props.data) && exists(this.state.rows) && (\n \n )}\n \n \n )\n }\n}\n\nTableWidgetQueryResult.propTypes = {\n // setUserProfileTables: PropTypes.func,\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n customColumnConfig: PropTypes.object,\n data: PropTypes.array,\n disableToolbar: PropTypes.bool,\n error: PropTypes.bool,\n filtered: PropTypes.bool,\n networkStatus: PropTypes.any,\n onClickNodeView: PropTypes.func,\n onEdit: PropTypes.func,\n onRemove: PropTypes.func,\n onSingleClickNodeView: PropTypes.func,\n options: PropTypes.object,\n pivot: PropTypes.object,\n refetch: PropTypes.func.isRequired,\n renderHeader: PropTypes.func.isRequired,\n resultLayout: PropTypes.shape({\n indexedSearches: PropTypes.objectOf(PropTypes.string),\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n }),\n savedSearches: ImmutablePropTypes.map,\n searchId: PropTypes.string,\n setWidgetOptions: PropTypes.func,\n shouldFlatten: PropTypes.func,\n srn: PropTypes.string,\n static: PropTypes.bool,\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n toggleStatic: PropTypes.func,\n userProfile: PropTypes.object,\n widget: PropTypes.object,\n}\n","/**\n *\n * TableWidget\n *\n */\n\nimport React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Query } from 'react-apollo'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport TextLink from 'components/TextLink'\nimport DataTable from 'components/DataTable'\nimport { getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\nimport { queryHasPivotFilter } from 'query-builder'\nimport Card, { TopTitle, CardBody } from 'components/Card'\nimport WidgetCard from 'components/WidgetCard'\nimport {\n getSonraiSearchQuery,\n getSearchCard,\n hasSonraiSearch,\n getWidgetResultsExplorerSavedSearchQuery,\n getTableSavedSearchQuery,\n} from 'query-builder'\nimport SonraiCountDisplay from 'components/SonraiCountDisplay'\nimport { Map } from 'immutable'\n\nimport TableWidgetQueryResult from './TableWidgetQueryResult'\n\nexport class TableWidget extends React.Component {\n styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n cursor: 'pointer',\n marginRight: '0px',\n },\n subtitle: {\n fontSize: '14px',\n fontWeight: '300',\n color: '#888888',\n },\n card: {\n minHeight: 0, //Required to allow tables to autosize without overflowing\n },\n }\n\n shouldFlatten = () => {\n return (\n (this.props.options && this.props.options.sonraiSearches.table) ||\n !getSearchCard(this.props.resultLayout, 'table')\n )\n }\n\n getQuery = () => {\n if (hasSonraiSearch(this.props.options, 'table')) {\n return getSonraiSearchQuery(this.props.options.sonraiSearches.table)\n } else {\n return getTableSavedSearchQuery(\n this.props.getQueryBuilder,\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.table,\n {},\n 'tableWidgetQuery',\n this.shouldFlatten()\n )\n }\n }\n\n getExploreResultsQuery = () => {\n if (hasSonraiSearch(this.props.options, 'table')) {\n return getSonraiSearchQuery(this.props.options.sonraiSearches.table)\n } else {\n return getWidgetResultsExplorerSavedSearchQuery(\n this.props.getQueryBuilder,\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.table\n )\n }\n }\n\n getSearchName = () => {\n if (!this.props.savedSearches) {\n return\n }\n\n return hasSonraiSearch(this.props.options, 'table')\n ? this.props.options.sonraiSearches.table\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.table,\n 'name',\n ])\n }\n\n onClickSearch = () => {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.table,\n sonraiSearchName: this.props.options.sonraiSearches.table,\n searchTitle: this.props.title,\n })\n }\n\n getSearchId = () => {\n const { options, sonraiSearches, resultLayout } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'table')) {\n const searches = getSearchIdForSonraiSearches(options, sonraiSearches)\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set('uiSearch', resultLayout.indexedSearches.table)\n }\n return searchObj\n }\n\n renderHeader = length => {\n const title = length ? (\n \n {this.props.title} ()\n \n ) : (\n this.props.title\n )\n\n return (\n
    \n
    \n {this.props.onClickSearch ? (\n \n {title}\n \n ) : (\n {title}\n )}\n
    \n\n
    \n {this.props.subtitle}\n
    \n
    \n )\n }\n\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const queryConfig = this.getQuery()\n if (!queryConfig.gqlStatement) {\n return (\n \n )\n }\n\n const filtered = queryHasPivotFilter(queryConfig.gqlStatement)\n\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n return (\n \n )\n }}\n \n )\n } else {\n if (this.props.loading) {\n return (\n \n )\n }\n\n return (\n \n {this.renderHeader(this.props.data.length)}\n \n \n \n \n )\n }\n }\n}\n\nTableWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n disableToolbar: PropTypes.bool,\n data: PropTypes.array,\n flatten: PropTypes.bool,\n nodeViewType: PropTypes.string,\n getQueryBuilder: PropTypes.func,\n onRemove: PropTypes.func,\n options: PropTypes.object,\n resultLayout: PropTypes.shape({\n indexedSearches: PropTypes.objectOf(PropTypes.string),\n }),\n savedSearches: ImmutablePropTypes.map,\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n subtitle: PropTypes.string,\n toggleStatic: PropTypes.func,\n static: PropTypes.bool,\n setWidgetOptions: PropTypes.func,\n onClickNodeView: PropTypes.func,\n onClickSearch: PropTypes.func,\n onEdit: PropTypes.func,\n onSingleClickNodeView: PropTypes.func,\n pivot: PropTypes.object,\n userProfile: PropTypes.object,\n srn: PropTypes.string,\n selectedNode: PropTypes.string,\n widget: PropTypes.object,\n loading: PropTypes.bool,\n selectNode: PropTypes.func,\n sonraiSearches: ImmutablePropTypes.iterable,\n customColumnConfig: PropTypes.object,\n}\n\nexport default TableWidget\n","export const RUN_QUERY = 'app/Search/RUN_QUERY'\nexport const QUERY_ERROR_HAPPEN = 'app/Search/QUERY_ERROR_HAPPEN'\nexport const CLEAR_QUERY_ERROR = 'app/Search/CLEAR_QUERY_ERROR'\nexport const START_QUERY = 'app/Search/START_QUERY'\nexport const SET_QUERY_RESULTS = 'app/Search/SET_QUERY_RESULTS'\nexport const SAVE_SEARCH_WITH_CONCURRENT_CHECK =\n 'app/Search/SAVE_SEARCH_WITH_CONCURRENT_CHECK'\nexport const SET_SEARCH_MODIFIED_CONCURRENTLY =\n 'app/Search/SET_SEARCH_MODIFIED_CONCURRENTLY'\nexport const SAVE_SEARCH = 'app/Search/SAVE_SEARCH'\nexport const SAVE_SEARCH_SUCCESS = 'app/Search/SAVE_SEARCH_SUCCESS'\nexport const SAVE_SEARCH_ERROR = 'app/Search/SAVE_SEARCH_ERROR'\nexport const CLEAR_SAVE_SEARCH_ERROR = 'app/Search/CLEAR_SAVE_SEARCH_ERROR'\nexport const SET_SEARCH_NAME = 'app/Search/SET_SEARCH_NAME'\nexport const LOAD_SEARCH_IN_ADVANCED = 'app/Search/LOAD_SEARCH_IN_ADVANCED'\n\nexport const SEARCH_VIEWS = {\n BUILD: 'build',\n RESULTS: 'results',\n}\n\nexport const SET_MONITORING_ON_RESOURCES =\n 'app/Search/SET_MONITORING_ON_RESOURCES'\nexport const SET_MONITORING_ON_RESOURCES_SUCCESS =\n 'app/Search/SET_MONITORING_ON_RESOURCES_SUCCESS'\nexport const SET_MONITORING_ON_RESOURCES_ERROR =\n 'app/Search/SET_MONITORING_ON_RESOURCES_ERROR'\nexport const SET_MONITORING_RESOURCES_EXCEEDED = `app/Search/SET_MONITORING_RESOURCES_EXCEEDED`\nexport const SET_IMPORTANCE_MULTI = 'app/Search/SET_IMPORTANCE_MULTI'\nexport const SET_IMPORTANCE_MULTI_SUCCESS =\n 'app/Search/SET_IMPORTANCE_MULTI_SUCCESS'\nexport const SET_IMPORTANCE_MULTI_MODAL =\n 'app/Search/SET_IMPORTANCE_MULTI_MODAL'\n\nexport const ADD_TAGS_ON_SELECTED_RESOURCES =\n 'app/Search/ADD_TAGS_ON_SELECTED_RESOURCES'\nexport const ADD_TAGS_ON_SELECTED_RESOURCES_SUCCESS =\n 'app/Search/ADD_TAGS_ON_SELECTED_RESOURCES_SUCCESS'\nexport const TOGGLE_COMMENTS = 'app/Search/TOGGLE_COMMENTS'\nexport const RESET_EDITOR = 'app/Search/RESET_EDITOR'\nexport const SAVE_SEARCH_DESCRIPTION = 'app/Search/SAVE_SEARCH_DESCRIPTION'\nexport const SAVE_SEARCH_DESCRIPTION_SUCCESS =\n 'app/Search/SAVE_SEARCH_DESCRIPTION_SUCCESS'\nexport const GET_NODETYPE_COUNTS = 'app/Search/GET_NODETYPE_COUNTS'\nexport const SET_NODETYPE_COUNTS = 'app/Search/SET_NODETYPE_COUNTS'\n"],"sourceRoot":""}