@@ -20,6 +20,7 @@ import {
2020} from '@elastic/eui' ;
2121import { FormattedMessage } from '@kbn/i18n-react' ;
2222import styled from 'styled-components' ;
23+ import { EventKind } from '../../../flyout/document_details/shared/constants/event_kinds' ;
2324import { StyledTitle } from './styles' ;
2425import * as selectors from '../../store/selectors' ;
2526import * as eventModel from '../../../../common/endpoint/models/event' ;
@@ -41,6 +42,7 @@ import { useLinkProps } from '../use_link_props';
4142import { useFormattedDate } from './use_formatted_date' ;
4243import { PanelContentError } from './panel_content_error' ;
4344import type { State } from '../../../common/store/types' ;
45+ import type { NodeEventOnClick } from './node_events_of_type' ;
4446
4547const StyledCubeForProcess = styled ( CubeForProcess ) `
4648 position: relative;
@@ -51,7 +53,15 @@ const nodeDetailError = i18n.translate('xpack.securitySolution.resolver.panel.no
5153} ) ;
5254
5355// eslint-disable-next-line react/display-name
54- export const NodeDetail = memo ( function ( { id, nodeID } : { id : string ; nodeID : string } ) {
56+ export const NodeDetail = memo ( function ( {
57+ id,
58+ nodeID,
59+ nodeEventOnClick,
60+ } : {
61+ id : string ;
62+ nodeID : string ;
63+ nodeEventOnClick ?: NodeEventOnClick ;
64+ } ) {
5565 const processEvent = useSelector ( ( state : State ) =>
5666 nodeDataModel . firstEvent ( selectors . nodeDataForID ( state . analyzer [ id ] ) ( nodeID ) )
5767 ) ;
@@ -62,7 +72,12 @@ export const NodeDetail = memo(function ({ id, nodeID }: { id: string; nodeID: s
6272 return nodeStatus === 'loading' ? (
6373 < PanelLoading id = { id } />
6474 ) : processEvent ? (
65- < NodeDetailView id = { id } nodeID = { nodeID } processEvent = { processEvent } />
75+ < NodeDetailView
76+ id = { id }
77+ nodeID = { nodeID }
78+ processEvent = { processEvent }
79+ nodeEventOnClick = { nodeEventOnClick }
80+ />
6681 ) : (
6782 < PanelContentError id = { id } translatedErrorMessage = { nodeDetailError } />
6883 ) ;
@@ -78,14 +93,16 @@ export interface NodeDetailsTableView {
7893 * Created, PID, User/Domain, etc.
7994 */
8095// eslint-disable-next-line react/display-name
81- const NodeDetailView = memo ( function ( {
96+ export const NodeDetailView = memo ( function ( {
8297 id,
8398 processEvent,
8499 nodeID,
100+ nodeEventOnClick,
85101} : {
86102 id : string ;
87103 processEvent : SafeResolverEvent ;
88104 nodeID : string ;
105+ nodeEventOnClick ?: NodeEventOnClick ;
89106} ) {
90107 const processName = eventModel . processNameSafeVersion ( processEvent ) ;
91108 const nodeState = useSelector ( ( state : State ) =>
@@ -96,6 +113,9 @@ const NodeDetailView = memo(function ({
96113 } ) ;
97114 const eventTime = eventModel . eventTimestamp ( processEvent ) ;
98115 const dateTime = useFormattedDate ( eventTime ) ;
116+ const isAlert = eventModel . eventKind ( processEvent ) [ 0 ] === EventKind . signal ;
117+ const documentId = eventModel . documentID ( processEvent ) ;
118+ const indexName = eventModel . indexName ( processEvent ) ;
99119
100120 const processInfoEntry : NodeDetailsTableView [ ] = useMemo ( ( ) => {
101121 const createdEntry = {
@@ -278,7 +298,16 @@ const NodeDetailView = memo(function ({
278298 state = { nodeState }
279299 />
280300 < span data-test-subj = "resolver:node-detail:title" >
281- < GeneratedText > { processName } </ GeneratedText >
301+ { nodeEventOnClick ? (
302+ < EuiLink
303+ data-test-subj = "resolver:node-detail:title-link"
304+ onClick = { nodeEventOnClick ( { documentId, indexName, scopeId : id , isAlert } ) }
305+ >
306+ < GeneratedText > { processName } </ GeneratedText >
307+ </ EuiLink >
308+ ) : (
309+ < GeneratedText > { processName } </ GeneratedText >
310+ ) }
282311 </ span >
283312 </ StyledTitle >
284313 </ EuiTitle >
0 commit comments