mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
Revert "[RAM] fix 159174 & 155991 (#160455)"
This reverts commit 73d1ed4ef8
.
This commit is contained in:
parent
9efbd2243c
commit
e0fdd482e9
5 changed files with 19 additions and 184 deletions
|
@ -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}
|
||||
/>
|
||||
)}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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',
|
||||
});
|
||||
});
|
||||
});
|
|
@ -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,
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue