Revert "[RAM] fix 159174 & 155991 (#160455)"

This reverts commit 73d1ed4ef8.
This commit is contained in:
Tiago Costa 2023-06-30 21:04:52 +01:00
parent 9efbd2243c
commit e0fdd482e9
No known key found for this signature in database
GPG key ID: BAECC2D04A04C6EA
5 changed files with 19 additions and 184 deletions

View file

@ -142,7 +142,6 @@ const AlertsTable: React.FunctionComponent<AlertsTableProps> = (props: AlertsTab
updatedAt,
browserFields,
onChangeVisibleColumns,
onColumnResize,
showAlertStatusWithFlapping = false,
showInspectButton = false,
} = props;
@ -487,7 +486,6 @@ const AlertsTable: React.FunctionComponent<AlertsTableProps> = (props: AlertsTab
onChangePage: onChangePageIndex,
}}
rowHeightsOptions={props.rowHeightsOptions}
onColumnResize={onColumnResize}
ref={dataGridRef}
/>
)}

View file

@ -226,7 +226,6 @@ const AlertsTableStateWithQueryProvider = ({
onResetColumns,
visibleColumns,
onChangeVisibleColumns,
onColumnResize,
fields,
} = useColumns({
featureIds,
@ -396,7 +395,6 @@ const AlertsTableStateWithQueryProvider = ({
onResetColumns,
onColumnsChange,
onChangeVisibleColumns,
onColumnResize,
query,
rowHeightsOptions,
renderCellValue,
@ -412,7 +410,7 @@ const AlertsTableStateWithQueryProvider = ({
memoizedMaintenanceWindows,
columns,
flyoutSize,
pagination.pageSize,
pagination,
id,
leadingControlColumns,
showExpandToDetails,
@ -425,7 +423,6 @@ const AlertsTableStateWithQueryProvider = ({
onResetColumns,
onColumnsChange,
onChangeVisibleColumns,
onColumnResize,
query,
rowHeightsOptions,
renderCellValue,

View file

@ -1,121 +0,0 @@
/*
* 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 { EuiDataGridColumn } from '@elastic/eui';
import { AlertConsumers } from '@kbn/rule-data-utils';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { act, renderHook } from '@testing-library/react-hooks';
import { useColumns, UseColumnsArgs, UseColumnsResp } from './use_columns';
jest.mock('../../../../../common/lib/kibana');
const setItemStorageMock = jest.fn();
const mockStorage = {
getItem: jest.fn(),
setItem: setItemStorageMock,
removeItem: jest.fn(),
clear: jest.fn(),
};
describe('useColumn', () => {
const id = 'useColumnTest';
const featureIds: AlertConsumers[] = [AlertConsumers.LOGS, AlertConsumers.APM];
let storage = { current: new Storage(mockStorage) };
const storageAlertsTable = {
current: {
columns: [],
visibleColumns: [],
sort: [],
},
};
const defaultColumns: EuiDataGridColumn[] = [
{
id: 'event.action',
displayAsText: 'Alert status',
initialWidth: 150,
},
{
id: '@timestamp',
displayAsText: 'Last updated',
initialWidth: 250,
schema: 'datetime',
},
{
id: 'kibana.alert.duration.us',
displayAsText: 'Duration',
initialWidth: 150,
schema: 'numeric',
},
{
id: 'kibana.alert.reason',
displayAsText: 'Reason',
},
];
beforeEach(() => {
setItemStorageMock.mockClear();
storage = { current: new Storage(mockStorage) };
});
test('hide all columns with onChangeVisibleColumns', async () => {
const { result, waitForNextUpdate } = renderHook<UseColumnsArgs, UseColumnsResp>(() =>
useColumns({ defaultColumns, featureIds, id, storageAlertsTable, storage })
);
act(() => {
result.current.onChangeVisibleColumns([]);
});
await waitForNextUpdate();
expect(result.current.visibleColumns).toEqual([]);
expect(result.current.columns).toEqual(defaultColumns);
});
test('show all columns with onChangeVisibleColumns', async () => {
const { result, waitForNextUpdate } = renderHook<UseColumnsArgs, UseColumnsResp>(() =>
useColumns({ defaultColumns, featureIds, id, storageAlertsTable, storage })
);
act(() => {
result.current.onChangeVisibleColumns([]);
});
act(() => {
result.current.onChangeVisibleColumns(defaultColumns.map((dc) => dc.id));
});
await waitForNextUpdate();
expect(result.current.visibleColumns).toEqual([
'event.action',
'@timestamp',
'kibana.alert.duration.us',
'kibana.alert.reason',
]);
expect(result.current.columns).toEqual(defaultColumns);
});
test('onColumnResize', async () => {
const { result, waitForNextUpdate } = renderHook<UseColumnsArgs, UseColumnsResp>(() =>
useColumns({ defaultColumns, featureIds, id, storageAlertsTable, storage })
);
act(() => {
result.current.onColumnResize({ columnId: '@timestamp', width: 100 });
});
await waitForNextUpdate();
expect(setItemStorageMock).toHaveBeenCalledWith(
'useColumnTest',
'{"columns":[{"id":"event.action","displayAsText":"Alert status","initialWidth":150},{"id":"@timestamp","displayAsText":"Last updated","initialWidth":100,"schema":"datetime"},{"id":"kibana.alert.duration.us","displayAsText":"Duration","initialWidth":150,"schema":"numeric"},{"id":"kibana.alert.reason","displayAsText":"Reason"}],"visibleColumns":["event.action","@timestamp","kibana.alert.duration.us","kibana.alert.reason"],"sort":[]}'
);
expect(result.current.columns.find((c) => c.id === '@timestamp')).toEqual({
displayAsText: 'Last updated',
id: '@timestamp',
initialWidth: 100,
schema: 'datetime',
});
});
});

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { EuiDataGridColumn, EuiDataGridOnColumnResizeData } from '@elastic/eui';
import { EuiDataGridColumn } from '@elastic/eui';
import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public';
import { BrowserField, BrowserFields } from '@kbn/rule-registry-plugin/common';
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
@ -15,7 +15,7 @@ import { AlertsTableStorage } from '../../alerts_table_state';
import { toggleColumn } from './toggle_column';
import { useFetchBrowserFieldCapabilities } from '../use_fetch_browser_fields_capabilities';
export interface UseColumnsArgs {
interface UseColumnsArgs {
featureIds: AlertConsumers[];
storageAlertsTable: React.MutableRefObject<AlertsTableStorage>;
storage: React.MutableRefObject<IStorageWrapper>;
@ -24,22 +24,6 @@ export interface UseColumnsArgs {
initialBrowserFields?: BrowserFields;
}
export interface UseColumnsResp {
columns: EuiDataGridColumn[];
visibleColumns: string[];
isBrowserFieldDataLoading: boolean | undefined;
browserFields: BrowserFields;
onColumnsChange: (newColumns: EuiDataGridColumn[]) => void;
onToggleColumn: (columnId: string) => void;
onResetColumns: () => void;
onChangeVisibleColumns: (columnIds: string[]) => void;
onColumnResize: (args: EuiDataGridOnColumnResizeData) => void;
fields: Array<{
field: string;
include_unmapped: boolean;
}>;
}
const EMPTY_FIELDS = [{ field: '*', include_unmapped: true }];
const fieldTypeToDataGridColumnTypeMapper = (fieldType: string | undefined) => {
@ -130,23 +114,26 @@ const getColumnByColumnId = (columns: EuiDataGridColumn[], columnId: string) =>
return columns.find(({ id }: { id: string }) => id === columnId);
};
const getColumnsByColumnIds = (columns: EuiDataGridColumn[], columnIds: string[]) => {
return columnIds
.map((columnId: string) => columns.find((column: EuiDataGridColumn) => column.id === columnId))
.filter(Boolean) as EuiDataGridColumn[];
};
const persist = ({
id,
storageAlertsTable,
columns,
storage,
visibleColumns,
}: {
id: string;
storageAlertsTable: React.MutableRefObject<AlertsTableStorage>;
storage: React.MutableRefObject<IStorageWrapper>;
columns: EuiDataGridColumn[];
visibleColumns: string[];
}) => {
storageAlertsTable.current = {
...storageAlertsTable.current,
columns,
visibleColumns,
};
storage.current.set(id, storageAlertsTable.current);
};
@ -158,7 +145,7 @@ export const useColumns = ({
id,
defaultColumns,
initialBrowserFields,
}: UseColumnsArgs): UseColumnsResp => {
}: UseColumnsArgs) => {
const [isBrowserFieldDataLoading, browserFields] = useFetchBrowserFieldCapabilities({
featureIds,
initialBrowserFields,
@ -166,22 +153,13 @@ export const useColumns = ({
const [columns, setColumns] = useState<EuiDataGridColumn[]>(() => {
let cols = storageAlertsTable.current.columns;
if (cols && cols.length === 0) {
cols = defaultColumns;
}
// before restoring from storage, enrich the column data
if (initialBrowserFields && defaultColumns) {
cols = populateColumns(cols, initialBrowserFields, defaultColumns);
}
return cols;
});
const [visibleColumns, setVisibleColumns] = useState(
storageAlertsTable.current.visibleColumns ?? getColumnIds(columns)
);
const [isColumnsPopulated, setColumnsPopulated] = useState<boolean>(false);
const defaultColumnsRef = useRef<typeof defaultColumns>(defaultColumns);
@ -219,24 +197,17 @@ export const useColumns = ({
storage,
storageAlertsTable,
columns: newColumns,
visibleColumns,
});
},
[id, storage, storageAlertsTable, visibleColumns]
[id, storage, storageAlertsTable]
);
const setColumnsByColumnIds = useCallback(
(columnIds: string[]) => {
setVisibleColumns(columnIds);
persist({
id,
storage,
storageAlertsTable,
columns,
visibleColumns: columnIds,
});
const newColumns = getColumnsByColumnIds(columns, columnIds);
setColumnsAndSave(newColumns);
},
[columns, id, storage, storageAlertsTable]
[setColumnsAndSave, columns]
);
const onToggleColumn = useCallback(
@ -248,7 +219,7 @@ export const useColumns = ({
columns,
defaultColumns,
});
setVisibleColumns(newColumns.map((nc) => nc.id));
setColumnsAndSave(newColumns);
},
[browserFields, columns, defaultColumns, setColumnsAndSave]
@ -259,17 +230,6 @@ export const useColumns = ({
setColumnsAndSave(populatedDefaultColumns);
}, [browserFields, defaultColumns, setColumnsAndSave]);
const onColumnResize = useCallback(
({ columnId, width }: EuiDataGridOnColumnResizeData) => {
const colIndex = columns.findIndex((c) => c.id === columnId);
if (colIndex > -1) {
columns.splice(colIndex, 1, { ...columns[colIndex], initialWidth: width });
setColumnsAndSave(columns);
}
},
[columns, setColumnsAndSave]
);
/*
* In some case such security, we need some special fields such as threat.enrichments which are
* not fetched when passing only EMPTY_FIELDS. Hence, we will fetch all the fields that user has added to the table.
@ -283,6 +243,10 @@ export const useColumns = ({
[columns]
);
const visibleColumns = useMemo(() => {
return getColumnIds(columns);
}, [columns]);
return {
columns,
visibleColumns,
@ -292,7 +256,6 @@ export const useColumns = ({
onToggleColumn,
onResetColumns,
onChangeVisibleColumns: setColumnsByColumnIds,
onColumnResize,
fields: fieldsToFetch,
};
};

View file

@ -24,7 +24,6 @@ import type {
EuiDataGridColumnCellAction,
EuiDataGridToolBarVisibilityOptions,
EuiSuperSelectOption,
EuiDataGridOnColumnResizeHandler,
} from '@elastic/eui';
import { EuiDataGridColumn, EuiDataGridControlColumn, EuiDataGridSorting } from '@elastic/eui';
import { HttpSetup } from '@kbn/core/public';
@ -548,7 +547,6 @@ export type AlertsTableProps = {
onResetColumns: () => void;
onColumnsChange: (columns: EuiDataGridColumn[], visibleColumns: string[]) => void;
onChangeVisibleColumns: (newColumns: string[]) => void;
onColumnResize?: EuiDataGridOnColumnResizeHandler;
query: Pick<QueryDslQueryContainer, 'bool' | 'ids'>;
controls?: EuiDataGridToolBarAdditionalControlsOptions;
showInspectButton?: boolean;