Skip to content

Commit

Permalink
PR comments and made preview link context agnostic
Browse files Browse the repository at this point in the history
  • Loading branch information
christineweng committed Aug 29, 2024
1 parent 3b709f7 commit 89220c6
Show file tree
Hide file tree
Showing 15 changed files with 213 additions and 97 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ import {
import { useKibana } from '../../../../common/lib/kibana';
import { ENTITY_RISK_LEVEL } from '../../../../entity_analytics/components/risk_score/translations';
import { useHasSecurityCapability } from '../../../../helper_hooks';
import { PreviewLink } from '../../shared/components/preview_link';
import { PreviewLink } from '../../../shared/components/preview_link';
import { HostPreviewPanelKey } from '../../../entity_details/host_right';
import { HOST_PREVIEW_BANNER } from '../../right/components/host_entity_overview';

Expand Down Expand Up @@ -170,6 +170,7 @@ export const HostDetails: React.FC<HostDetailsProps> = ({ hostName, timestamp, s
<PreviewLink
field={USER_NAME_FIELD_NAME}
value={user}
scopeId={scopeId}
data-test-subj={HOST_DETAILS_RELATED_USERS_LINK_TEST_ID}
/>
) : (
Expand Down Expand Up @@ -201,6 +202,7 @@ export const HostDetails: React.FC<HostDetailsProps> = ({ hostName, timestamp, s
<PreviewLink
field={HOST_IP_FIELD_NAME}
value={ip}
scopeId={scopeId}
data-test-subj={HOST_DETAILS_RELATED_USERS_IP_LINK_TEST_ID}
/>
) : (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,21 @@ import { HostPreviewPanelKey } from '../../../entity_details/host_right';
import { HOST_PREVIEW_BANNER } from '../../right/components/host_entity_overview';
import { UserPreviewPanelKey } from '../../../entity_details/user_right';
import { USER_PREVIEW_BANNER } from '../../right/components/user_entity_overview';
import { createTelemetryServiceMock } from '../../../../common/lib/telemetry/telemetry_service.mock';

jest.mock('@kbn/expandable-flyout');

const mockedTelemetry = createTelemetryServiceMock();
jest.mock('../../../../common/lib/kibana', () => {
return {
useKibana: () => ({
services: {
telemetry: mockedTelemetry,
},
}),
};
});

jest.mock('../../../../common/hooks/use_experimental_features');
const mockUseIsExperimentalFeatureEnabled = useIsExperimentalFeatureEnabled as jest.Mock;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ import {
} from '../../../../common/components/event_details/use_action_cell_data_provider';
import { getEmptyTagValue } from '../../../../common/components/empty_value';
import { IS_OPERATOR } from '../../../../../common/types';
import { hasPreview, PreviewLink } from '../../shared/components/preview_link';
import { hasPreview, PreviewLink } from '../../../shared/components/preview_link';
import { CellActions } from '../../shared/components/cell_actions';

export const PREVALENCE_TAB_ID = 'prevalence';
Expand Down Expand Up @@ -85,6 +85,10 @@ interface PrevalenceDetailsRow extends PrevalenceData {
* If enabled, clicking host or user should open an entity preview
*/
isPreviewEnabled: boolean;
/**
* Scope id to pass to the preview link
*/
scopeId: string;
}

const columns: Array<EuiBasicTableColumn<PrevalenceDetailsRow>> = [
Expand Down Expand Up @@ -118,6 +122,7 @@ const columns: Array<EuiBasicTableColumn<PrevalenceDetailsRow>> = [
<PreviewLink
field={data.field}
value={value}
scopeId={data.scopeId}
data-test-subj={PREVALENCE_DETAILS_TABLE_PREVIEW_LINK_CELL_TEST_ID}
>
<EuiText size="xs">{value}</EuiText>
Expand Down Expand Up @@ -322,7 +327,8 @@ const columns: Array<EuiBasicTableColumn<PrevalenceDetailsRow>> = [
* Prevalence table displayed in the document details expandable flyout left section under the Insights tab
*/
export const PrevalenceDetails: React.FC = () => {
const { dataFormattedForFieldBrowser, investigationFields } = useDocumentDetailsContext();
const { dataFormattedForFieldBrowser, investigationFields, scopeId } =
useDocumentDetailsContext();

const isPlatinumPlus = useLicense().isPlatinumPlus();
const isPreviewEnabled = !useIsExperimentalFeatureEnabled('entityAlertPreviewDisabled');
Expand Down Expand Up @@ -377,8 +383,9 @@ export const PrevalenceDetails: React.FC = () => {
to: absoluteEnd,
isPlatinumPlus,
isPreviewEnabled,
scopeId,
})),
[data, absoluteStart, absoluteEnd, isPlatinumPlus, isPreviewEnabled]
[data, absoluteStart, absoluteEnd, isPlatinumPlus, isPreviewEnabled, scopeId]
);

const upsell = (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ import { ENTITY_RISK_LEVEL } from '../../../../entity_analytics/components/risk_
import { useHasSecurityCapability } from '../../../../helper_hooks';
import { UserPreviewPanelKey } from '../../../entity_details/user_right';
import { USER_PREVIEW_BANNER } from '../../right/components/user_entity_overview';
import { PreviewLink } from '../../shared/components/preview_link';
import { PreviewLink } from '../../../shared/components/preview_link';

const USER_DETAILS_ID = 'entities-users-details';
const RELATED_HOSTS_ID = 'entities-users-related-hosts';
Expand Down Expand Up @@ -171,6 +171,7 @@ export const UserDetails: React.FC<UserDetailsProps> = ({ userName, timestamp, s
<PreviewLink
field={HOST_NAME_FIELD_NAME}
value={host}
scopeId={scopeId}
data-test-subj={USER_DETAILS_RELATED_HOSTS_LINK_TEST_ID}
/>
) : (
Expand Down Expand Up @@ -202,6 +203,7 @@ export const UserDetails: React.FC<UserDetailsProps> = ({ userName, timestamp, s
<PreviewLink
field={HOST_IP_FIELD_NAME}
value={ip}
scopeId={scopeId}
data-test-subj={USER_DETAILS_RELATED_HOSTS_IP_LINK_TEST_ID}
/>
) : (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,21 @@ import { mockContextValue } from '../shared/mocks/mock_context';
import { DocumentDetailsContext } from '../shared/context';
import { PreviewPanelFooter } from './footer';
import { PREVIEW_FOOTER_TEST_ID, PREVIEW_FOOTER_LINK_TEST_ID } from './test_ids';
import { createTelemetryServiceMock } from '../../../common/lib/telemetry/telemetry_service.mock';

jest.mock('@kbn/expandable-flyout');

const mockedTelemetry = createTelemetryServiceMock();
jest.mock('../../../common/lib/kibana', () => {
return {
useKibana: () => ({
services: {
telemetry: mockedTelemetry,
},
}),
};
});

describe('<PreviewPanelFooter />', () => {
beforeAll(() => {
jest.mocked(useExpandableFlyoutApi).mockReturnValue(mockFlyoutApi);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,24 @@ import { HOST_PREVIEW_BANNER } from './host_entity_overview';
import { UserPreviewPanelKey } from '../../../entity_details/user_right';
import { USER_PREVIEW_BANNER } from './user_entity_overview';
import { NetworkPanelKey, NETWORK_PREVIEW_BANNER } from '../../../network_details';
import { createTelemetryServiceMock } from '../../../../common/lib/telemetry/telemetry_service.mock';

jest.mock('../../../../management/hooks');
jest.mock('../../../../management/hooks/agents/use_get_agent_status');

jest.mock('@kbn/expandable-flyout');

const mockedTelemetry = createTelemetryServiceMock();
jest.mock('../../../../common/lib/kibana', () => {
return {
useKibana: () => ({
services: {
telemetry: mockedTelemetry,
},
}),
};
});

const useGetAgentStatusMock = useGetAgentStatus as jest.Mock;

jest.mock('../../../../common/hooks/use_experimental_features');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {
HIGHLIGHTED_FIELDS_CELL_TEST_ID,
HIGHLIGHTED_FIELDS_LINKED_CELL_TEST_ID,
} from './test_ids';
import { hasPreview, PreviewLink } from '../../shared/components/preview_link';
import { hasPreview, PreviewLink } from '../../../shared/components/preview_link';

export interface HighlightedFieldsCellProps {
/**
Expand Down Expand Up @@ -83,6 +83,7 @@ export const HighlightedFieldsCell: VFC<HighlightedFieldsCellProps> = ({
<PreviewLink
field={field}
value={value}
scopeId={scopeId}
data-test-subj={HIGHLIGHTED_FIELDS_LINKED_CELL_TEST_ID}
/>
) : hasPreview(field) ? (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import { LeftPanelInsightsTab } from '../../left';
import { ENTITIES_TAB_ID } from '../../left/components/entities_details';
import { useRiskScore } from '../../../../entity_analytics/api/hooks/use_risk_score';
import { mockFlyoutApi } from '../../shared/mocks/mock_flyout_context';
import { createTelemetryServiceMock } from '../../../../common/lib/telemetry/telemetry_service.mock';

const hostName = 'host';
const osFamily = 'Windows';
Expand All @@ -46,6 +47,19 @@ const panelContextValue = {

jest.mock('@kbn/expandable-flyout');

const mockedTelemetry = createTelemetryServiceMock();
jest.mock('../../../../common/lib/kibana', () => {
const originalModule = jest.requireActual('../../../../common/lib/kibana');
return {
...originalModule,
useKibana: () => ({
services: {
telemetry: mockedTelemetry,
},
}),
};
});

jest.mock('../../../../common/hooks/use_experimental_features');
const mockUseIsExperimentalFeatureEnabled = useIsExperimentalFeatureEnabled as jest.Mock;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ import {
import { DocumentDetailsLeftPanelKey } from '../../shared/constants/panel_keys';
import { LeftPanelInsightsTab } from '../../left';
import { RiskScoreDocTooltip } from '../../../../overview/components/common';
import { PreviewLink } from '../../shared/components/preview_link';
import { PreviewLink } from '../../../shared/components/preview_link';

const HOST_ICON = 'storage';

Expand Down Expand Up @@ -210,6 +210,7 @@ export const HostEntityOverview: React.FC<HostEntityOverviewProps> = ({ hostName
<PreviewLink
field={HOST_NAME_FIELD_NAME}
value={hostName}
scopeId={scopeId}
data-test-subj={ENTITIES_HOST_OVERVIEW_LINK_TEST_ID}
>
<EuiText
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,29 @@ import { TestProviders } from '../../../../common/mock';
import { NetworkPanelKey, NETWORK_PREVIEW_BANNER } from '../../../network_details';
import { mockFlyoutApi } from '../../shared/mocks/mock_flyout_context';
import { FLYOUT_TABLE_PREVIEW_LINK_FIELD_TEST_ID } from './test_ids';
import { createTelemetryServiceMock } from '../../../../common/lib/telemetry/telemetry_service.mock';

jest.mock('@kbn/expandable-flyout', () => ({
useExpandableFlyoutApi: jest.fn(),
ExpandableFlyoutProvider: ({ children }: React.PropsWithChildren<{}>) => <>{children}</>,
withExpandableFlyoutProvider: <T extends object>(Component: React.ComponentType<T>) => {
return (props: T) => {
return <Component {...props} />;
};
},
}));

const mockedTelemetry = createTelemetryServiceMock();
jest.mock('../../../../common/lib/kibana', () => {
return {
useKibana: () => ({
services: {
telemetry: mockedTelemetry,
},
}),
};
});

jest.mock('../../../../common/hooks/use_experimental_features');
const mockUseIsExperimentalFeatureEnabled = useIsExperimentalFeatureEnabled as jest.Mock;

Expand All @@ -32,7 +49,7 @@ const panelContextValue = {
scopeId: 'scopeId',
} as unknown as DocumentDetailsContext;

const contextId = 'test';
const scopeId = 'scopeId';

const eventId = 'TUWyf3wBFCFU0qRJTauW';

Expand Down Expand Up @@ -63,7 +80,7 @@ describe('TableFieldValueCell', () => {
<TestProviders>
<DocumentDetailsContext.Provider value={panelContextValue}>
<TableFieldValueCell
contextId={contextId}
scopeId={scopeId}
data={hostIpData}
eventId={eventId}
values={hostIpValues}
Expand All @@ -84,7 +101,7 @@ describe('TableFieldValueCell', () => {
<TestProviders>
<DocumentDetailsContext.Provider value={panelContextValue}>
<TableFieldValueCell
contextId={contextId}
scopeId={scopeId}
data={hostIpData}
eventId={eventId}
fieldFromBrowserField={undefined} // <-- no metadata
Expand Down Expand Up @@ -130,7 +147,7 @@ describe('TableFieldValueCell', () => {
<TestProviders>
<DocumentDetailsContext.Provider value={panelContextValue}>
<TableFieldValueCell
contextId={contextId}
scopeId={scopeId}
data={messageData}
eventId={eventId}
fieldFromBrowserField={messageFieldFromBrowserField}
Expand Down Expand Up @@ -166,7 +183,7 @@ describe('TableFieldValueCell', () => {
<TestProviders>
<DocumentDetailsContext.Provider value={panelContextValue}>
<TableFieldValueCell
contextId={contextId}
scopeId={scopeId}
data={hostIpData}
eventId={eventId}
fieldFromBrowserField={hostIpFieldFromBrowserField} // <-- metadata
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ import { OverflowField } from '../../../../common/components/tables/helpers';
import { FormattedFieldValue } from '../../../../timelines/components/timeline/body/renderers/formatted_field';
import { MESSAGE_FIELD_NAME } from '../../../../timelines/components/timeline/body/renderers/constants';
import { FLYOUT_TABLE_PREVIEW_LINK_FIELD_TEST_ID } from './test_ids';
import { hasPreview, PreviewLink } from '../../shared/components/preview_link';
import { hasPreview, PreviewLink } from '../../../shared/components/preview_link';

export interface FieldValueCellProps {
/**
* Value used to create a unique identifier in children components
*/
contextId: string;
scopeId: string;
/**
* Datq retrieved from the row
*/
Expand Down Expand Up @@ -49,7 +49,7 @@ export interface FieldValueCellProps {
*/
export const TableFieldValueCell = memo(
({
contextId,
scopeId,
data,
eventId,
fieldFromBrowserField,
Expand Down Expand Up @@ -86,11 +86,12 @@ export const TableFieldValueCell = memo(
<PreviewLink
field={data.field}
value={value}
scopeId={scopeId}
data-test-subj={`${FLYOUT_TABLE_PREVIEW_LINK_FIELD_TEST_ID}-${i}`}
/>
) : (
<FormattedFieldValue
contextId={`${contextId}-${eventId}-${data.field}-${i}-${value}`}
contextId={`${scopeId}-${eventId}-${data.field}-${i}-${value}`}
eventId={eventId}
fieldFormat={getFieldFormat(data)}
fieldName={data.field}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ import {
} from './test_ids';
import { useObservedUserDetails } from '../../../../explore/users/containers/users/observed_details';
import { RiskScoreDocTooltip } from '../../../../overview/components/common';
import { PreviewLink } from '../../shared/components/preview_link';
import { PreviewLink } from '../../../shared/components/preview_link';

const USER_ICON = 'user';

Expand Down Expand Up @@ -210,6 +210,7 @@ export const UserEntityOverview: React.FC<UserEntityOverviewProps> = ({ userName
<PreviewLink
field={USER_NAME_FIELD_NAME}
value={userName}
scopeId={scopeId}
data-test-subj={ENTITIES_USER_OVERVIEW_LINK_TEST_ID}
>
<EuiText
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ export const getColumns: ColumnsProvider = ({ browserFields, eventId, scopeId, g
return (
<CellActions field={data.field} value={values} isObjectArray={data.isObjectArray}>
<TableFieldValueCell
contextId={scopeId}
scopeId={scopeId}
data={data as EventFieldsData}
eventId={eventId}
fieldFromBrowserField={fieldFromBrowserField}
Expand Down
Loading

0 comments on commit 89220c6

Please sign in to comment.