Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SECURITY SOLUTION] [RAC] Event rendered view #108644

Merged
merged 23 commits into from
Aug 17, 2021
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
25adac9
wip
XavierM Jul 30, 2021
2a8ff53
match design for selecting grid view
XavierM Aug 3, 2021
ca6dad4
Merge branch 'master' of github.com:elastic/kibana into rac-summary-view
XavierM Aug 3, 2021
4a937f9
wip to integrate event rendered view
XavierM Aug 7, 2021
f98851b
Merge branch 'master' of github.com:elastic/kibana into rac-summary-view
XavierM Aug 7, 2021
795afb3
wip
XavierM Aug 15, 2021
b19f7c6
Merge branch 'master' of github.com:elastic/kibana into rac-summary-view
XavierM Aug 15, 2021
d937968
integration of the event rendered
XavierM Aug 16, 2021
42e0c89
fix perPage action on Euibasic table
XavierM Aug 16, 2021
c639690
Merge branch 'master' of github.com:elastic/kibana into rac-summary-view
XavierM Aug 16, 2021
e29d182
Add bulding block background color to EventRenderedView
machadoum Aug 16, 2021
8bee34f
Merge branch 'master' of github.com:elastic/kibana into rac-summary-view
angorayc Aug 16, 2021
6970f3a
styling
angorayc Aug 16, 2021
7a8d5bc
remove header
XavierM Aug 16, 2021
c4aa225
fix types
angorayc Aug 17, 2021
8b8351a
Merge branch 'master' of github.com:elastic/kibana into rac-summary-view
angorayc Aug 17, 2021
6f9f06a
fix unit tests
angorayc Aug 17, 2021
ffea64f
use memo for listProps
angorayc Aug 17, 2021
6731ab6
fix styling + add feature flag
XavierM Aug 17, 2021
cdc2034
review I
XavierM Aug 17, 2021
05930fe
Merge branch 'rac-summary-view' of github.com:XavierM/kibana into rac…
XavierM Aug 17, 2021
8026993
fix merge
XavierM Aug 17, 2021
f917c86
change the gutter size
angorayc Aug 17, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export type ExperimentalFeatures = typeof allowedExperimentalValues;
export const allowedExperimentalValues = Object.freeze({
metricsEntitiesEnabled: false,
ruleRegistryEnabled: false,
tGridEnabled: false,
tGridEnabled: true,
trustedAppsByPolicyEnabled: false,
excludePoliciesInFilterEnabled: false,
uebaEnabled: false,
Expand Down
51 changes: 51 additions & 0 deletions x-pack/plugins/timelines/public/components/rule_name/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { EuiLink } from '@elastic/eui';
import { isEmpty } from 'lodash';
import React, { useCallback, useMemo } from 'react';
import { CoreStart } from '../../../../../../src/core/public';
import { useKibana } from '../../../../../../src/plugins/kibana_react/public';

interface RuleNameProps {
name: string;
id: string;
}

const appendSearch = (search?: string) =>
isEmpty(search) ? '' : `${search?.startsWith('?') ? search : `?${search}`}`;

const RuleNameComponents = ({ name, id }: RuleNameProps) => {
const { navigateToApp, getUrlForApp } = useKibana<CoreStart>().services.application;

const hrefRuleDetails = useMemo(
() =>
getUrlForApp('securitySolution', {
deepLinkId: 'rules',
path: `/id/${id}${appendSearch(window.location.search)}`,
}),
[getUrlForApp, id]
);
const goToRuleDetails = useCallback(
(ev) => {
ev.preventDefault();
navigateToApp('securitySolution', {
deepLinkId: 'rules',
path: `/id/${id}${appendSearch(window.location.search)}`,
});
},
[navigateToApp, id]
);
return (
// eslint-disable-next-line @elastic/eui/href-or-on-click
<EuiLink href={hrefRuleDetails} onClick={goToRuleDetails}>
{name}
</EuiLink>
);
};

export const RuleName = React.memo(RuleNameComponents);
95 changes: 80 additions & 15 deletions x-pack/plugins/timelines/public/components/t_grid/body/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import {
EuiDataGridStyle,
EuiDataGridToolBarVisibilityOptions,
EuiLoadingSpinner,
EuiFlexGroup,
EuiFlexItem,
} from '@elastic/eui';
import { getOr } from 'lodash/fp';
import memoizeOne from 'memoize-one';
Expand Down Expand Up @@ -57,14 +59,16 @@ import { DEFAULT_ICON_BUTTON_WIDTH } from '../helpers';
import type { BrowserFields } from '../../../../common/search_strategy/index_fields';
import type { OnRowSelected, OnSelectAll } from '../types';
import type { Refetch } from '../../../store/t_grid/inputs';
import { StatefulFieldsBrowser } from '../../../';
import { PaginationInputPaginated, StatefulFieldsBrowser } from '../../../';
import { tGridActions, TGridModel, tGridSelectors, TimelineState } from '../../../store/t_grid';
import { useDeepEqualSelector } from '../../../hooks/use_selector';
import { RowAction } from './row_action';
import * as i18n from './translations';
import { AlertCount } from '../styles';
import { checkBoxControlColumn } from './control_columns';
import type { EuiTheme } from '../../../../../../../src/plugins/kibana_react/common';
import { ViewSelection } from '../event_rendered_view/selector';
import { EventRenderedView } from '../event_rendered_view';

const StatefulAlertStatusBulkActions = lazy(
() => import('../toolbar/bulk_actions/alert_status_bulk_actions')
Expand All @@ -79,9 +83,12 @@ interface OwnProps {
defaultCellActions?: TGridCellAction[];
id: string;
isEventViewer?: boolean;
itemsPerPageOptions: number[];
pageInfo: Pick<PaginationInputPaginated, 'activePage' | 'querySize'>;
renderCellValue: (props: CellValueElementProps) => React.ReactNode;
rowRenderers: RowRenderer[];
tabType: TimelineTabs;
tableView: ViewSelection;
leadingControlColumns?: ControlColumnProps[];
loadPage: (newActivePage: number) => void;
trailingControlColumns?: ControlColumnProps[];
Expand Down Expand Up @@ -235,8 +242,10 @@ export const BodyComponent = React.memo<StatefulBodyProps>(
id,
isEventViewer = false,
isSelectAllChecked,
itemsPerPageOptions,
loadingEventIds,
loadPage,
pageInfo,
selectedEventIds,
setSelected,
clearSelected,
Expand All @@ -246,6 +255,7 @@ export const BodyComponent = React.memo<StatefulBodyProps>(
rowRenderers,
sort,
tabType,
tableView,
totalPages,
totalItems,
filterStatus,
Expand Down Expand Up @@ -328,6 +338,43 @@ export const BodyComponent = React.memo<StatefulBodyProps>(
return bulkActions.alertStatusActions ?? true;
}, [selectedCount, showCheckboxes, bulkActions]);

const alertToolbar = useMemo(
() => (
<EuiFlexGroup alignItems="baseline">
<EuiFlexItem grow={false}>
<AlertCount>{alertCountText}</AlertCount>
</EuiFlexItem>
{showBulkActions && (
<Suspense fallback={<EuiLoadingSpinner />}>
<StatefulAlertStatusBulkActions
data-test-subj="bulk-actions"
id={id}
totalItems={totalItems}
filterStatus={filterStatus}
query={filterQuery}
indexName={indexNames.join()}
onActionSuccess={onAlertStatusActionSuccess}
onActionFailure={onAlertStatusActionFailure}
refetch={refetch}
/>
</Suspense>
)}
</EuiFlexGroup>
),
[
alertCountText,
filterQuery,
filterStatus,
id,
indexNames,
onAlertStatusActionFailure,
onAlertStatusActionSuccess,
refetch,
showBulkActions,
totalItems,
]
);

const toolbarVisibility: EuiDataGridToolBarVisibilityOptions = useMemo(
() => ({
additionalControls: (
Expand Down Expand Up @@ -543,20 +590,38 @@ export const BodyComponent = React.memo<StatefulBodyProps>(
);

return (
<EuiDataGrid
data-test-subj="body-data-grid"
aria-label={i18n.TGRID_BODY_ARIA_LABEL}
columns={columnsWithCellActions}
columnVisibility={{ visibleColumns, setVisibleColumns }}
gridStyle={gridStyle}
leadingControlColumns={leadingTGridControlColumns}
trailingControlColumns={trailingTGridControlColumns}
toolbarVisibility={toolbarVisibility}
rowCount={data.length}
renderCellValue={renderTGridCellValue}
inMemory={{ level: 'sorting' }}
sorting={{ columns: sortingColumns, onSort }}
/>
<>
{tableView === 'gridView' && (
<EuiDataGrid
data-test-subj="body-data-grid"
aria-label={i18n.TGRID_BODY_ARIA_LABEL}
columns={columnsWithCellActions}
columnVisibility={{ visibleColumns, setVisibleColumns }}
gridStyle={gridStyle}
leadingControlColumns={leadingTGridControlColumns}
trailingControlColumns={trailingTGridControlColumns}
toolbarVisibility={toolbarVisibility}
rowCount={data.length}
renderCellValue={renderTGridCellValue}
inMemory={{ level: 'sorting' }}
sorting={{ columns: sortingColumns, onSort }}
/>
)}
{tableView === 'eventRenderedView' && (
<EventRenderedView
alertToolbar={alertToolbar}
browserFields={browserFields}
events={data}
leadingControlColumns={leadingTGridControlColumns ?? []}
onChangePage={loadPage}
pageIndex={pageInfo.activePage}
pageSize={pageInfo.querySize}
pageSizeOptions={itemsPerPageOptions}
rowRenderers={rowRenderers}
totalItemCount={totalItems}
/>
)}
</>
);
}
);
Expand Down
Loading