diff --git a/packages/kbn-unified-data-table/__mocks__/table_context.ts b/packages/kbn-unified-data-table/__mocks__/table_context.ts index 4a4a75b0fa9e5..b495a3f84e9b4 100644 --- a/packages/kbn-unified-data-table/__mocks__/table_context.ts +++ b/packages/kbn-unified-data-table/__mocks__/table_context.ts @@ -14,17 +14,13 @@ import { servicesMock } from './services'; import { DataTableContext } from '../src/table_context'; import { convertValueToString } from '../src/utils/convert_value_to_string'; import { buildDataTableRecord } from '@kbn/discover-utils'; -import type { EsHitRecord } from '@kbn/discover-utils/types'; - -const buildTableContext = (dataView: DataView, rows: EsHitRecord[]): DataTableContext => { - const usedRows = rows.map((row) => { - return buildDataTableRecord(row, dataView); - }); +import type { DataTableRecord } from '@kbn/discover-utils/types'; +const buildTableContext = (dataView: DataView, rows: DataTableRecord[]): DataTableContext => { return { expanded: undefined, setExpanded: jest.fn(), - rows: usedRows, + getRowByIndex: jest.fn((index) => rows[index]), onFilter: jest.fn(), dataView, isDarkMode: false, @@ -35,13 +31,24 @@ const buildTableContext = (dataView: DataView, rows: EsHitRecord[]): DataTableCo rowIndex, columnId, fieldFormats: servicesMock.fieldFormats, - rows: usedRows, + rows, dataView, options, }), }; }; -export const dataTableContextMock = buildTableContext(dataViewMock, esHitsMock); +export const dataTableContextRowsMock = esHitsMock.map((row) => + buildDataTableRecord(row, dataViewMock) +); + +export const dataTableContextMock = buildTableContext(dataViewMock, dataTableContextRowsMock); + +export const dataTableContextComplexRowsMock = esHitsComplex.map((row) => + buildDataTableRecord(row, dataViewComplexMock) +); -export const dataTableContextComplexMock = buildTableContext(dataViewComplexMock, esHitsComplex); +export const dataTableContextComplexMock = buildTableContext( + dataViewComplexMock, + dataTableContextComplexRowsMock +); diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 07755e0e65769..6824058a9f9b7 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -66,7 +66,7 @@ import { getVisibleColumns, canPrependTimeFieldColumn, } from './data_table_columns'; -import { UnifiedDataTableContext } from '../table_context'; +import { DataTableContext, UnifiedDataTableContext } from '../table_context'; import { getSchemaDetectors } from './data_table_schema'; import { DataTableCompareToolbarBtn, @@ -510,11 +510,11 @@ export const UnifiedDataTable = ({ [displayedRows, dataView, fieldFormats] ); - const unifiedDataTableContextValue = useMemo( + const unifiedDataTableContextValue = useMemo( () => ({ expanded: expandedDoc, setExpanded: setExpandedDoc, - rows: displayedRows, + getRowByIndex: (index: number) => displayedRows[index], onFilter, dataView, isDarkMode: darkMode, diff --git a/packages/kbn-unified-data-table/src/components/data_table_document_selection.test.tsx b/packages/kbn-unified-data-table/src/components/data_table_document_selection.test.tsx index 9835f6f0798f9..070645e4fa8cf 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_document_selection.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_document_selection.test.tsx @@ -13,7 +13,7 @@ import { DataTableDocumentToolbarBtn, SelectButton, } from './data_table_document_selection'; -import { dataTableContextMock } from '../../__mocks__/table_context'; +import { dataTableContextMock, dataTableContextRowsMock } from '../../__mocks__/table_context'; import { UnifiedDataTableContext } from '../table_context'; import { getDocId } from '@kbn/discover-utils'; import { render, screen } from '@testing-library/react'; @@ -142,7 +142,7 @@ describe('document selection', () => { const props = { isPlainRecord: false, isFilterActive: false, - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, selectedDocs: ['i::1::'], setIsFilterActive: jest.fn(), setSelectedDocs: jest.fn(), diff --git a/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx b/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx index 492d739456b49..d5a1adfe496b2 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx @@ -26,10 +26,10 @@ import { UnifiedDataTableContext } from '../table_context'; export const SelectButton = ({ rowIndex, setCellProps }: EuiDataGridCellValueElementProps) => { const { euiTheme } = useEuiTheme(); - const { selectedDocs, expanded, rows, isDarkMode, setSelectedDocs } = + const { selectedDocs, expanded, getRowByIndex, isDarkMode, setSelectedDocs } = useContext(UnifiedDataTableContext); - const doc = useMemo(() => rows[rowIndex], [rows, rowIndex]); - const checked = useMemo(() => selectedDocs.includes(doc.id), [selectedDocs, doc.id]); + const doc = useMemo(() => getRowByIndex(rowIndex), [getRowByIndex, rowIndex]); + const checked = useMemo(() => (doc ? selectedDocs.includes(doc.id) : false), [doc, selectedDocs]); const toggleDocumentSelectionLabel = i18n.translate('unifiedDataTable.grid.selectDoc', { defaultMessage: `Select document ''{rowNumber}''`, @@ -46,6 +46,10 @@ export const SelectButton = ({ rowIndex, setCellProps }: EuiDataGridCellValueEle } }, [expanded, doc, setCellProps, isDarkMode]); + if (!doc) { + return null; + } + return ( { const contextMock = { ...dataTableContextMock, - expanded: dataTableContextMock.rows[0], + expanded: dataTableContextMock.getRowByIndex(0), }; const component = mountWithIntl( @@ -62,7 +62,7 @@ describe('Data table view button ', function () { it('when another document is expanded, setExpanded is called with the current document', async () => { const contextMock = { ...dataTableContextMock, - expanded: dataTableContextMock.rows[0], + expanded: dataTableContextMock.getRowByIndex(0), }; const component = mountWithIntl( @@ -80,6 +80,6 @@ describe('Data table view button ', function () { ); const button = findTestSubject(component, 'docTableExpandToggleColumn'); await button.simulate('click'); - expect(contextMock.setExpanded).toHaveBeenCalledWith(dataTableContextMock.rows[1]); + expect(contextMock.setExpanded).toHaveBeenCalledWith(dataTableContextMock.getRowByIndex(1)); }); }); diff --git a/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx b/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx index 76210b6aeee23..39d25020a3fbd 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_expand_button.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React, { useContext, useEffect, useRef, useState } from 'react'; +import React, { useContext, useEffect, useMemo, useRef, useState } from 'react'; import { EuiButtonIcon, EuiDataGridCellValueElementProps, EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { UnifiedDataTableContext } from '../table_context'; @@ -18,13 +18,13 @@ import { DataTableRowControl } from './data_table_row_control'; export const ExpandButton = ({ rowIndex, setCellProps }: EuiDataGridCellValueElementProps) => { const toolTipRef = useRef(null); const [pressed, setPressed] = useState(false); - const { expanded, setExpanded, rows, isDarkMode, componentsTourSteps } = + const { expanded, setExpanded, getRowByIndex, isDarkMode, componentsTourSteps } = useContext(UnifiedDataTableContext); - const current = rows[rowIndex]; + const current = useMemo(() => getRowByIndex(rowIndex), [getRowByIndex, rowIndex]); const tourStep = componentsTourSteps ? componentsTourSteps.expandButton : undefined; useEffect(() => { - if (current.isAnchor) { + if (current?.isAnchor) { setCellProps({ className: 'unifiedDataTable__cell--highlight', }); @@ -42,7 +42,7 @@ export const ExpandButton = ({ rowIndex, setCellProps }: EuiDataGridCellValueEle defaultMessage: 'Toggle dialog with details', }); - const testSubj = current.isAnchor + const testSubj = current?.isAnchor ? 'docTableExpandToggleColumnAnchor' : 'docTableExpandToggleColumn'; @@ -55,7 +55,7 @@ export const ExpandButton = ({ rowIndex, setCellProps }: EuiDataGridCellValueEle } }, [isCurrentRowExpanded, setPressed, pressed]); - if (!setExpanded) { + if (!setExpanded || !current) { return null; } diff --git a/packages/kbn-unified-data-table/src/components/default_cell_actions.tsx b/packages/kbn-unified-data-table/src/components/default_cell_actions.tsx index 109d289eea84a..0eb4fcc5572df 100644 --- a/packages/kbn-unified-data-table/src/components/default_cell_actions.tsx +++ b/packages/kbn-unified-data-table/src/components/default_cell_actions.tsx @@ -23,10 +23,10 @@ function onFilterCell( mode: '+' | '-', field: DataViewField ) { - const row = context.rows[rowIndex]; - const value = row.flattened[columnId]; + const row = context.getRowByIndex(rowIndex); - if (field && context.onFilter) { + if (row && field && context.onFilter) { + const value = row.flattened[columnId]; context.onFilter(field, value, mode); } } diff --git a/packages/kbn-unified-data-table/src/table_context.tsx b/packages/kbn-unified-data-table/src/table_context.tsx index cc6c63ab87682..85ab516ea1445 100644 --- a/packages/kbn-unified-data-table/src/table_context.tsx +++ b/packages/kbn-unified-data-table/src/table_context.tsx @@ -15,7 +15,7 @@ import type { ValueToStringConverter } from './types'; export interface DataTableContext { expanded?: DataTableRecord | undefined; setExpanded?: (hit?: DataTableRecord) => void; - rows: DataTableRecord[]; + getRowByIndex: (index: number) => DataTableRecord | undefined; onFilter?: DocViewFilterFn; dataView: DataView; isDarkMode: boolean; diff --git a/packages/kbn-unified-data-table/src/utils/convert_value_to_string.test.tsx b/packages/kbn-unified-data-table/src/utils/convert_value_to_string.test.tsx index aa8ba719c5ba2..5723c8d72c295 100644 --- a/packages/kbn-unified-data-table/src/utils/convert_value_to_string.test.tsx +++ b/packages/kbn-unified-data-table/src/utils/convert_value_to_string.test.tsx @@ -6,14 +6,19 @@ * Side Public License, v 1. */ -import { dataTableContextComplexMock, dataTableContextMock } from '../../__mocks__/table_context'; +import { + dataTableContextComplexMock, + dataTableContextComplexRowsMock, + dataTableContextMock, + dataTableContextRowsMock, +} from '../../__mocks__/table_context'; import { servicesMock } from '../../__mocks__/services'; import { convertValueToString, convertNameToString } from './convert_value_to_string'; describe('convertValueToString', () => { it('should convert a keyword value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'keyword_key', @@ -28,7 +33,7 @@ describe('convertValueToString', () => { it('should convert a text value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'text_message', @@ -43,7 +48,7 @@ describe('convertValueToString', () => { it('should convert a text value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'text_message', @@ -58,7 +63,7 @@ describe('convertValueToString', () => { it('should convert a multiline text value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'text_message', @@ -74,7 +79,7 @@ describe('convertValueToString', () => { it('should convert a number value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'number_price', @@ -89,7 +94,7 @@ describe('convertValueToString', () => { it('should convert a date value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'date', @@ -104,7 +109,7 @@ describe('convertValueToString', () => { it('should convert a date nanos value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'date_nanos', @@ -119,7 +124,7 @@ describe('convertValueToString', () => { it('should convert a date nanos value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'date_nanos', @@ -134,7 +139,7 @@ describe('convertValueToString', () => { it('should convert a boolean value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'bool_enabled', @@ -149,7 +154,7 @@ describe('convertValueToString', () => { it('should convert a binary value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'binary_blob', @@ -164,7 +169,7 @@ describe('convertValueToString', () => { it('should convert a binary value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'binary_blob', @@ -179,7 +184,7 @@ describe('convertValueToString', () => { it('should convert an object value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'object_user.first', @@ -194,7 +199,7 @@ describe('convertValueToString', () => { it('should convert a nested value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'nested_user', @@ -211,7 +216,7 @@ describe('convertValueToString', () => { it('should convert a flattened value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'flattened_labels', @@ -226,7 +231,7 @@ describe('convertValueToString', () => { it('should convert a range value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'range_time_frame', @@ -243,7 +248,7 @@ describe('convertValueToString', () => { it('should convert a rank features value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'rank_features', @@ -258,7 +263,7 @@ describe('convertValueToString', () => { it('should convert a histogram value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'histogram', @@ -273,7 +278,7 @@ describe('convertValueToString', () => { it('should convert a IP value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'ip_addr', @@ -288,7 +293,7 @@ describe('convertValueToString', () => { it('should convert a IP value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'ip_addr', @@ -303,7 +308,7 @@ describe('convertValueToString', () => { it('should convert a version value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'version', @@ -318,7 +323,7 @@ describe('convertValueToString', () => { it('should convert a version value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'version', @@ -333,7 +338,7 @@ describe('convertValueToString', () => { it('should convert a vector value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'vector', @@ -348,7 +353,7 @@ describe('convertValueToString', () => { it('should convert a geo point value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'geo_point', @@ -363,7 +368,7 @@ describe('convertValueToString', () => { it('should convert a geo point object value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'geo_point', @@ -378,7 +383,7 @@ describe('convertValueToString', () => { it('should convert an array value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'array_tags', @@ -393,7 +398,7 @@ describe('convertValueToString', () => { it('should convert a shape value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'geometry', @@ -410,7 +415,7 @@ describe('convertValueToString', () => { it('should convert a runtime value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'runtime_number', @@ -425,7 +430,7 @@ describe('convertValueToString', () => { it('should convert a scripted value to text', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'scripted_string', @@ -440,7 +445,7 @@ describe('convertValueToString', () => { it('should convert a scripted value to text (not for CSV)', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'scripted_string', @@ -455,7 +460,7 @@ describe('convertValueToString', () => { it('should return an empty string and not fail', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'unknown', @@ -470,7 +475,7 @@ describe('convertValueToString', () => { it('should return an empty string when rowIndex is out of range', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'unknown', @@ -485,7 +490,7 @@ describe('convertValueToString', () => { it('should return _source value', () => { const result = convertValueToString({ - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, dataView: dataTableContextMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: '_source', @@ -508,7 +513,7 @@ describe('convertValueToString', () => { it('should return a formatted _source value', () => { const result = convertValueToString({ - rows: dataTableContextMock.rows, + rows: dataTableContextRowsMock, dataView: dataTableContextMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: '_source', @@ -525,7 +530,7 @@ describe('convertValueToString', () => { it('should escape formula', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'array_tags', @@ -539,7 +544,7 @@ describe('convertValueToString', () => { expect(result.withFormula).toBe(true); const result2 = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'scripted_string', @@ -555,7 +560,7 @@ describe('convertValueToString', () => { it('should not escape formulas when not for CSV', () => { const result = convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, columnId: 'array_tags', diff --git a/packages/kbn-unified-data-table/src/utils/copy_value_to_clipboard.test.tsx b/packages/kbn-unified-data-table/src/utils/copy_value_to_clipboard.test.tsx index f49a7ef95ed6d..432830e1db210 100644 --- a/packages/kbn-unified-data-table/src/utils/copy_value_to_clipboard.test.tsx +++ b/packages/kbn-unified-data-table/src/utils/copy_value_to_clipboard.test.tsx @@ -6,7 +6,10 @@ * Side Public License, v 1. */ -import { dataTableContextComplexMock } from '../../__mocks__/table_context'; +import { + dataTableContextComplexMock, + dataTableContextComplexRowsMock, +} from '../../__mocks__/table_context'; import { servicesMock } from '../../__mocks__/services'; import { copyValueToClipboard, @@ -22,7 +25,7 @@ const warn = jest.spyOn(console, 'warn').mockImplementation(() => {}); describe('copyValueToClipboard', () => { const valueToStringConverter: ValueToStringConverter = (rowIndex, columnId, options) => convertValueToString({ - rows: dataTableContextComplexMock.rows, + rows: dataTableContextComplexRowsMock, dataView: dataTableContextComplexMock.dataView, fieldFormats: servicesMock.fieldFormats, rowIndex,