diff --git a/packages/devextreme/js/__internal/grids/grid_core/columns_controller/__tests__/column_has_value.test.ts b/packages/devextreme/js/__internal/grids/grid_core/columns_controller/__tests__/column_has_value.test.ts new file mode 100644 index 000000000000..a1fe900b3125 --- /dev/null +++ b/packages/devextreme/js/__internal/grids/grid_core/columns_controller/__tests__/column_has_value.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from '@jest/globals'; +import { AI_COLUMN_NAME } from '@ts/grids/grid_core/ai_column/const'; +import { columnHasValue } from '@ts/grids/grid_core/columns_controller/m_columns_controller_utils'; +import type { Column } from '@ts/grids/grid_core/columns_controller/types'; + +const column = (partial: Partial): Column => partial as Column; + +describe('columnHasValue', () => { + it('should be true for a data column', () => { + expect(columnHasValue(column({ dataField: 'name' }))).toBe(true); + }); + + it('should be false for a command column', () => { + expect(columnHasValue(column({ command: 'select' }))).toBe(false); + }); + + it('should be true for the AI column even though it carries a command', () => { + expect(columnHasValue(column({ command: AI_COLUMN_NAME, type: AI_COLUMN_NAME }))).toBe(true); + }); +}); diff --git a/packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller_utils.ts b/packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller_utils.ts index d3dcd37385d2..c09139a4facb 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller_utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/columns_controller/m_columns_controller_utils.ts @@ -1097,4 +1097,8 @@ export const isColumnNameRequired = function ({ type = '' }: Column): boolean { return COMMAND_COLUMNS_WITH_REQUIRED_NAMES.includes(type); }; +export const columnHasValue = (column: Column): boolean => ( + !column.command || column.type === AI_COLUMN_NAME +); + export const getColumnHeaderCellSelector = (visibleIndex: number): string => `.dx-header-row td[aria-colindex="${visibleIndex + 1}"]`; diff --git a/packages/devextreme/js/__internal/grids/grid_core/data_controller/utils/row_values.ts b/packages/devextreme/js/__internal/grids/grid_core/data_controller/utils/row_values.ts index 36ddc1488dea..a13f3eade9d7 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/data_controller/utils/row_values.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/data_controller/utils/row_values.ts @@ -1,4 +1,4 @@ -import { AI_COLUMN_NAME } from '@ts/grids/grid_core/ai_column/const'; +import { columnHasValue } from '@ts/grids/grid_core/columns_controller/m_columns_controller_utils'; import type { Column } from '@ts/grids/grid_core/columns_controller/types'; import type { RawItemData } from '../../data_source_adapter/types'; @@ -13,7 +13,7 @@ export function generateRowValues( const emptyValue = isModified ? undefined : null; return columns.map((column) => { - if (column.command && column.type !== AI_COLUMN_NAME) { + if (!columnHasValue(column)) { return emptyValue; } diff --git a/packages/devextreme/js/__internal/grids/grid_core/views/utils.ts b/packages/devextreme/js/__internal/grids/grid_core/views/utils.ts index 9a2e10b6435a..f482ffa1e6bf 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/views/utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/views/utils.ts @@ -1,13 +1,13 @@ +import { columnHasValue } from '@ts/grids/grid_core/columns_controller/m_columns_controller_utils'; import type { Column } from '@ts/grids/grid_core/columns_controller/types'; -import { AI_COLUMN_NAME } from '../ai_column/const'; import gridCoreUtils from '../m_utils'; export const getCellText = ( column: Column, displayValue: unknown, ): string => ( - !column.command || column.type === AI_COLUMN_NAME + columnHasValue(column) ? gridCoreUtils.formatValue(displayValue, column) as string : '' );