From 52e50f2c09f3c21e8e29fbb6bab3255eb6281ba1 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Thu, 14 May 2026 11:38:40 +0200 Subject: [PATCH 1/9] Grid AI Assistant: add `customizeResponseText`, `customizeResponseTitle` to dts --- .../src/common/grids/index.ts | 3 + .../devextreme-angular/src/common/index.ts | 5 +- .../src/ui/data-grid/nested/ai-assistant.ts | 17 +++++ .../src/ui/tree-list/nested/ai-assistant.ts | 17 +++++ packages/devextreme-react/src/common/grids.ts | 3 + packages/devextreme-react/src/common/index.ts | 5 +- packages/devextreme-react/src/data-grid.ts | 4 +- packages/devextreme-react/src/tree-list.ts | 4 +- packages/devextreme-vue/src/common/grids.ts | 3 + packages/devextreme-vue/src/common/index.ts | 5 +- packages/devextreme-vue/src/data-grid.ts | 5 ++ packages/devextreme-vue/src/tree-list.ts | 5 ++ .../grid_core/ai_assistant/grid_commands.ts | 2 +- .../grids/grid_core/ai_assistant/types.ts | 7 +- packages/devextreme/js/common/grids.d.ts | 69 +++++++++++++----- packages/devextreme/ts/dx.all.d.ts | 72 +++++++++++++++---- 16 files changed, 181 insertions(+), 45 deletions(-) diff --git a/packages/devextreme-angular/src/common/grids/index.ts b/packages/devextreme-angular/src/common/grids/index.ts index 03696c47816d..d7767cbc1885 100644 --- a/packages/devextreme-angular/src/common/grids/index.ts +++ b/packages/devextreme-angular/src/common/grids/index.ts @@ -55,6 +55,9 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommands, + ResponseStatus, + ResponseStatusTexts, RowDragging, RowDraggingTemplateData, RowInsertedInfo, diff --git a/packages/devextreme-angular/src/common/index.ts b/packages/devextreme-angular/src/common/index.ts index 8f0cda9f4a6e..2df8634d4079 100644 --- a/packages/devextreme-angular/src/common/index.ts +++ b/packages/devextreme-angular/src/common/index.ts @@ -275,7 +275,7 @@ export namespace Export { export function Grids(): void {} export namespace Grids { export type AdaptiveDetailRowPreparingInfo = GridsModule.AdaptiveDetailRowPreparingInfo; - export type AIAssistant = GridsModule.AIAssistant; + export type AIAssistant = GridsModule.AIAssistant; export type AIAssistantRequestCreatingInfo = GridsModule.AIAssistantRequestCreatingInfo; export type AIColumnMode = GridsModule.AIColumnMode; export type AIColumnRequestCreatingInfo = GridsModule.AIColumnRequestCreatingInfo; @@ -330,6 +330,9 @@ export namespace Grids { export type Pager = GridsModule.Pager; export type PagerPageSize = GridsModule.PagerPageSize; export type PagingBase = GridsModule.PagingBase; + export type PredefinedCommands = GridsModule.PredefinedCommands; + export type ResponseStatus = GridsModule.ResponseStatus; + export type ResponseStatusTexts = GridsModule.ResponseStatusTexts; export type RowDragging, TRowData = any, TKey = any> = GridsModule.RowDragging; export type RowDraggingTemplateData = GridsModule.RowDraggingTemplateData; export type RowInsertedInfo = GridsModule.RowInsertedInfo; diff --git a/packages/devextreme-angular/src/ui/data-grid/nested/ai-assistant.ts b/packages/devextreme-angular/src/ui/data-grid/nested/ai-assistant.ts index bf3d005ac860..72d94da8ad8b 100644 --- a/packages/devextreme-angular/src/ui/data-grid/nested/ai-assistant.ts +++ b/packages/devextreme-angular/src/ui/data-grid/nested/ai-assistant.ts @@ -15,6 +15,7 @@ import { import type { AIIntegration } from 'devextreme/common/ai-integration'; +import type { ResponseStatus } from 'devextreme/common/grids'; import type { dxPopupOptions } from 'devextreme/ui/popup'; import { @@ -48,6 +49,22 @@ export class DxoDataGridAIAssistantComponent extends NestedOption implements OnD this._setOption('chat', value); } + @Input() + get customizeResponseText(): any { + return this._getOption('customizeResponseText'); + } + set customizeResponseText(value: any) { + this._setOption('customizeResponseText', value); + } + + @Input() + get customizeResponseTitle(): ((status: ResponseStatus, commandNames: Array) => string) { + return this._getOption('customizeResponseTitle'); + } + set customizeResponseTitle(value: ((status: ResponseStatus, commandNames: Array) => string)) { + this._setOption('customizeResponseTitle', value); + } + @Input() get enabled(): boolean { return this._getOption('enabled'); diff --git a/packages/devextreme-angular/src/ui/tree-list/nested/ai-assistant.ts b/packages/devextreme-angular/src/ui/tree-list/nested/ai-assistant.ts index 1b2722649f16..ee25ab0a350b 100644 --- a/packages/devextreme-angular/src/ui/tree-list/nested/ai-assistant.ts +++ b/packages/devextreme-angular/src/ui/tree-list/nested/ai-assistant.ts @@ -15,6 +15,7 @@ import { import type { AIIntegration } from 'devextreme/common/ai-integration'; +import type { ResponseStatus } from 'devextreme/common/grids'; import type { dxPopupOptions } from 'devextreme/ui/popup'; import { @@ -48,6 +49,22 @@ export class DxoTreeListAIAssistantComponent extends NestedOption implements OnD this._setOption('chat', value); } + @Input() + get customizeResponseText(): any { + return this._getOption('customizeResponseText'); + } + set customizeResponseText(value: any) { + this._setOption('customizeResponseText', value); + } + + @Input() + get customizeResponseTitle(): ((status: ResponseStatus, commandNames: Array) => string) { + return this._getOption('customizeResponseTitle'); + } + set customizeResponseTitle(value: ((status: ResponseStatus, commandNames: Array) => string)) { + this._setOption('customizeResponseTitle', value); + } + @Input() get enabled(): boolean { return this._getOption('enabled'); diff --git a/packages/devextreme-react/src/common/grids.ts b/packages/devextreme-react/src/common/grids.ts index 2cf419615368..7263e75eebbc 100644 --- a/packages/devextreme-react/src/common/grids.ts +++ b/packages/devextreme-react/src/common/grids.ts @@ -55,6 +55,9 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommands, + ResponseStatus, + ResponseStatusTexts, RowDragging, RowDraggingTemplateData, RowInsertedInfo, diff --git a/packages/devextreme-react/src/common/index.ts b/packages/devextreme-react/src/common/index.ts index 1c6fbe7d5a60..ef14c0390611 100644 --- a/packages/devextreme-react/src/common/index.ts +++ b/packages/devextreme-react/src/common/index.ts @@ -275,7 +275,7 @@ export namespace Export { export function Grids(): void {} export namespace Grids { export type AdaptiveDetailRowPreparingInfo = GridsModule.AdaptiveDetailRowPreparingInfo; - export type AIAssistant = GridsModule.AIAssistant; + export type AIAssistant = GridsModule.AIAssistant; export type AIAssistantRequestCreatingInfo = GridsModule.AIAssistantRequestCreatingInfo; export type AIColumnMode = GridsModule.AIColumnMode; export type AIColumnRequestCreatingInfo = GridsModule.AIColumnRequestCreatingInfo; @@ -330,6 +330,9 @@ export namespace Grids { export type Pager = GridsModule.Pager; export type PagerPageSize = GridsModule.PagerPageSize; export type PagingBase = GridsModule.PagingBase; + export type PredefinedCommands = GridsModule.PredefinedCommands; + export type ResponseStatus = GridsModule.ResponseStatus; + export type ResponseStatusTexts = GridsModule.ResponseStatusTexts; export type RowDragging, TRowData = any, TKey = any> = GridsModule.RowDragging; export type RowDraggingTemplateData = GridsModule.RowDraggingTemplateData; export type RowInsertedInfo = GridsModule.RowInsertedInfo; diff --git a/packages/devextreme-react/src/data-grid.ts b/packages/devextreme-react/src/data-grid.ts index 2a989a4eae7e..4d3f2e588751 100644 --- a/packages/devextreme-react/src/data-grid.ts +++ b/packages/devextreme-react/src/data-grid.ts @@ -10,7 +10,7 @@ import { Component as BaseComponent, IHtmlOptions, ComponentRef, NestedComponent import NestedOption from "./core/nested-option"; import type { dxDataGridColumn, AdaptiveDetailRowPreparingEvent, AIAssistantRequestCreatingEvent, AIColumnRequestCreatingEvent, CellClickEvent, CellDblClickEvent, CellPreparedEvent, ContentReadyEvent, ContextMenuPreparingEvent, DataErrorOccurredEvent, DisposingEvent, EditCanceledEvent, EditCancelingEvent, EditingStartEvent, EditorPreparedEvent, EditorPreparingEvent, ExportingEvent, FocusedCellChangingEvent, FocusedRowChangingEvent, InitializedEvent, InitNewRowEvent, KeyDownEvent, RowClickEvent, RowCollapsedEvent, RowCollapsingEvent, RowDblClickEvent, RowExpandedEvent, RowExpandingEvent, RowInsertedEvent, RowInsertingEvent, RowPreparedEvent, RowRemovedEvent, RowRemovingEvent, RowUpdatedEvent, RowUpdatingEvent, RowValidatingEvent, SavedEvent, SavingEvent, ToolbarPreparingEvent, dxDataGridRowObject, DataGridPredefinedColumnButton, ColumnButtonClickEvent, dxDataGridColumnButton, DataGridCommandColumnType, SelectionSensitivity, DataGridPredefinedToolbarItem, DataGridExportFormat, DataGridScrollMode, dxDataGridToolbarItem } from "devextreme/ui/data_grid"; -import type { DataChange, AIColumnMode, DataChangeType, ColumnAIOptions, FilterOperation, FilterType, FixedPosition, ColumnHeaderFilter as GridsColumnHeaderFilter, SelectedFilterOperation, ColumnChooserMode, ColumnChooserSearchConfig, ColumnChooserSelectionConfig, HeaderFilterGroupInterval, ColumnHeaderFilterSearchConfig, HeaderFilterSearchConfig, HeaderFilterTexts, SelectionColumnDisplayMode, GridsEditMode, NewRowPosition, GridsEditRefreshMode, StartEditAction, FilterPanel as GridsFilterPanel, FilterPanelTexts as GridsFilterPanelTexts, ApplyFilterMode, GroupExpandMode, SummaryType, EnterKeyAction, EnterKeyDirection, PagerPageSize, GridBase, DataRenderMode, StateStoreType } from "devextreme/common/grids"; +import type { DataChange, AIColumnMode, ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, FilterType, FixedPosition, ColumnHeaderFilter as GridsColumnHeaderFilter, SelectedFilterOperation, ColumnChooserMode, ColumnChooserSearchConfig, ColumnChooserSelectionConfig, HeaderFilterGroupInterval, ColumnHeaderFilterSearchConfig, HeaderFilterSearchConfig, HeaderFilterTexts, SelectionColumnDisplayMode, GridsEditMode, NewRowPosition, GridsEditRefreshMode, StartEditAction, FilterPanel as GridsFilterPanel, FilterPanelTexts as GridsFilterPanelTexts, ApplyFilterMode, GroupExpandMode, SummaryType, EnterKeyAction, EnterKeyDirection, PagerPageSize, GridBase, DataRenderMode, StateStoreType } from "devextreme/common/grids"; import type { Mode, ValidationRuleType, HorizontalAlignment, VerticalAlignment, template, TextEditorButtonLocation, ButtonStyle, ButtonType, DataType, Format as CommonFormat, SortOrder, SearchMode, ComparisonOperator, SingleMultipleOrNone, SelectAllMode, ToolbarItemLocation, ToolbarItemComponent, TextBoxPredefinedButton, TextEditorButton, LabelMode, MaskMode, EditorStyle, ValidationMessageMode, Position as CommonPosition, ValidationStatus, PositionAlignment, Direction, DisplayMode, DragDirection, DragHighlight, ScrollbarMode, TabsIconPosition, TabsStyle } from "devextreme/common"; import type { ContentReadyEvent as ButtonContentReadyEvent, DisposingEvent as ButtonDisposingEvent, InitializedEvent as ButtonInitializedEvent, dxButtonOptions, ClickEvent, OptionChangedEvent } from "devextreme/ui/button"; import type { ContentReadyEvent as TextBoxContentReadyEvent, DisposingEvent as TextBoxDisposingEvent, InitializedEvent as TextBoxInitializedEvent, KeyDownEvent as TextBoxKeyDownEvent, dxTextBoxOptions, OptionChangedEvent as TextBoxOptionChangedEvent, TextBoxType, ChangeEvent, CopyEvent, CutEvent, EnterKeyEvent, FocusInEvent, FocusOutEvent, InputEvent, KeyUpEvent, PasteEvent, ValueChangedEvent } from "devextreme/ui/text_box"; @@ -244,6 +244,8 @@ const AI = Object.assign(_componentAI, type IAIAssistantProps = React.PropsWithChildren<{ aiIntegration?: AIIntegration; chat?: Record; + customizeResponseText?: any; + customizeResponseTitle?: ((status: ResponseStatus, commandNames: Array) => string); enabled?: boolean; popup?: dxPopupOptions; title?: string; diff --git a/packages/devextreme-react/src/tree-list.ts b/packages/devextreme-react/src/tree-list.ts index 38316b42abb8..1d9479f96650 100644 --- a/packages/devextreme-react/src/tree-list.ts +++ b/packages/devextreme-react/src/tree-list.ts @@ -10,7 +10,7 @@ import { Component as BaseComponent, IHtmlOptions, ComponentRef, NestedComponent import NestedOption from "./core/nested-option"; import type { dxTreeListColumn, AdaptiveDetailRowPreparingEvent, AIAssistantRequestCreatingEvent, AIColumnRequestCreatingEvent, CellClickEvent, CellDblClickEvent, CellPreparedEvent, ContentReadyEvent, ContextMenuPreparingEvent, DataErrorOccurredEvent, DisposingEvent, EditCanceledEvent, EditCancelingEvent, EditingStartEvent, EditorPreparedEvent, EditorPreparingEvent, FocusedCellChangingEvent, FocusedRowChangingEvent, InitializedEvent, InitNewRowEvent, KeyDownEvent, NodesInitializedEvent, RowClickEvent, RowCollapsedEvent, RowCollapsingEvent, RowDblClickEvent, RowExpandedEvent, RowExpandingEvent, RowInsertedEvent, RowInsertingEvent, RowPreparedEvent, RowRemovedEvent, RowRemovingEvent, RowUpdatedEvent, RowUpdatingEvent, RowValidatingEvent, SavedEvent, SavingEvent, ToolbarPreparingEvent, dxTreeListRowObject, TreeListPredefinedColumnButton, ColumnButtonClickEvent, dxTreeListColumnButton, TreeListCommandColumnType, TreeListPredefinedToolbarItem, dxTreeListToolbarItem } from "devextreme/ui/tree_list"; -import type { DataChange, AIColumnMode, DataChangeType, ColumnAIOptions, FilterOperation, FilterType, FixedPosition, ColumnHeaderFilter as GridsColumnHeaderFilter, SelectedFilterOperation, ColumnChooserMode, ColumnChooserSearchConfig, ColumnChooserSelectionConfig, HeaderFilterGroupInterval, ColumnHeaderFilterSearchConfig, GridsEditMode, GridsEditRefreshMode, StartEditAction, FilterPanel as GridsFilterPanel, FilterPanelTexts as GridsFilterPanelTexts, ApplyFilterMode, HeaderFilterSearchConfig, HeaderFilterTexts, EnterKeyAction, EnterKeyDirection, PagerPageSize, GridBase, DataRenderMode, StateStoreType } from "devextreme/common/grids"; +import type { DataChange, AIColumnMode, ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, FilterType, FixedPosition, ColumnHeaderFilter as GridsColumnHeaderFilter, SelectedFilterOperation, ColumnChooserMode, ColumnChooserSearchConfig, ColumnChooserSelectionConfig, HeaderFilterGroupInterval, ColumnHeaderFilterSearchConfig, GridsEditMode, GridsEditRefreshMode, StartEditAction, FilterPanel as GridsFilterPanel, FilterPanelTexts as GridsFilterPanelTexts, ApplyFilterMode, HeaderFilterSearchConfig, HeaderFilterTexts, EnterKeyAction, EnterKeyDirection, PagerPageSize, GridBase, DataRenderMode, StateStoreType } from "devextreme/common/grids"; import type { ContentReadyEvent as ButtonContentReadyEvent, DisposingEvent as ButtonDisposingEvent, InitializedEvent as ButtonInitializedEvent, dxButtonOptions, ClickEvent, OptionChangedEvent } from "devextreme/ui/button"; import type { ContentReadyEvent as TextBoxContentReadyEvent, DisposingEvent as TextBoxDisposingEvent, InitializedEvent as TextBoxInitializedEvent, KeyDownEvent as TextBoxKeyDownEvent, dxTextBoxOptions, OptionChangedEvent as TextBoxOptionChangedEvent, TextBoxType, ChangeEvent, CopyEvent, CutEvent, EnterKeyEvent, FocusInEvent, FocusOutEvent, InputEvent, KeyUpEvent, PasteEvent, ValueChangedEvent } from "devextreme/ui/text_box"; import type { ContentReadyEvent as FilterBuilderContentReadyEvent, DisposingEvent as FilterBuilderDisposingEvent, EditorPreparedEvent as FilterBuilderEditorPreparedEvent, EditorPreparingEvent as FilterBuilderEditorPreparingEvent, InitializedEvent as FilterBuilderInitializedEvent, OptionChangedEvent as FilterBuilderOptionChangedEvent, dxFilterBuilderField, FieldInfo, ValueChangedEvent as FilterBuilderValueChangedEvent, FilterBuilderOperation, dxFilterBuilderCustomOperation, GroupOperation } from "devextreme/ui/filter_builder"; @@ -216,6 +216,8 @@ const AI = Object.assign(_componentAI, type IAIAssistantProps = React.PropsWithChildren<{ aiIntegration?: AIIntegration; chat?: Record; + customizeResponseText?: any; + customizeResponseTitle?: ((status: ResponseStatus, commandNames: Array) => string); enabled?: boolean; popup?: dxPopupOptions; title?: string; diff --git a/packages/devextreme-vue/src/common/grids.ts b/packages/devextreme-vue/src/common/grids.ts index 2cf419615368..7263e75eebbc 100644 --- a/packages/devextreme-vue/src/common/grids.ts +++ b/packages/devextreme-vue/src/common/grids.ts @@ -55,6 +55,9 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommands, + ResponseStatus, + ResponseStatusTexts, RowDragging, RowDraggingTemplateData, RowInsertedInfo, diff --git a/packages/devextreme-vue/src/common/index.ts b/packages/devextreme-vue/src/common/index.ts index 1c6fbe7d5a60..ef14c0390611 100644 --- a/packages/devextreme-vue/src/common/index.ts +++ b/packages/devextreme-vue/src/common/index.ts @@ -275,7 +275,7 @@ export namespace Export { export function Grids(): void {} export namespace Grids { export type AdaptiveDetailRowPreparingInfo = GridsModule.AdaptiveDetailRowPreparingInfo; - export type AIAssistant = GridsModule.AIAssistant; + export type AIAssistant = GridsModule.AIAssistant; export type AIAssistantRequestCreatingInfo = GridsModule.AIAssistantRequestCreatingInfo; export type AIColumnMode = GridsModule.AIColumnMode; export type AIColumnRequestCreatingInfo = GridsModule.AIColumnRequestCreatingInfo; @@ -330,6 +330,9 @@ export namespace Grids { export type Pager = GridsModule.Pager; export type PagerPageSize = GridsModule.PagerPageSize; export type PagingBase = GridsModule.PagingBase; + export type PredefinedCommands = GridsModule.PredefinedCommands; + export type ResponseStatus = GridsModule.ResponseStatus; + export type ResponseStatusTexts = GridsModule.ResponseStatusTexts; export type RowDragging, TRowData = any, TKey = any> = GridsModule.RowDragging; export type RowDraggingTemplateData = GridsModule.RowDraggingTemplateData; export type RowInsertedInfo = GridsModule.RowInsertedInfo; diff --git a/packages/devextreme-vue/src/data-grid.ts b/packages/devextreme-vue/src/data-grid.ts index 6a4958212ebb..ccdf577984f9 100644 --- a/packages/devextreme-vue/src/data-grid.ts +++ b/packages/devextreme-vue/src/data-grid.ts @@ -20,6 +20,7 @@ import { SearchPanel, Sorting, AIColumnMode, + ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, @@ -734,6 +735,8 @@ const DxAIAssistantConfig = { "update:hoveredElement": null, "update:aiIntegration": null, "update:chat": null, + "update:customizeResponseText": null, + "update:customizeResponseTitle": null, "update:enabled": null, "update:popup": null, "update:title": null, @@ -741,6 +744,8 @@ const DxAIAssistantConfig = { props: { aiIntegration: Object as PropType, chat: Object as PropType>, + customizeResponseText: {}, + customizeResponseTitle: Function as PropType<((status: ResponseStatus, commandNames: Array) => string)>, enabled: Boolean, popup: Object as PropType | Record>, title: String diff --git a/packages/devextreme-vue/src/tree-list.ts b/packages/devextreme-vue/src/tree-list.ts index b9a40953fcdf..abc1c8255659 100644 --- a/packages/devextreme-vue/src/tree-list.ts +++ b/packages/devextreme-vue/src/tree-list.ts @@ -20,6 +20,7 @@ import { SearchPanel, Sorting, AIColumnMode, + ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, @@ -723,6 +724,8 @@ const DxAIAssistantConfig = { "update:hoveredElement": null, "update:aiIntegration": null, "update:chat": null, + "update:customizeResponseText": null, + "update:customizeResponseTitle": null, "update:enabled": null, "update:popup": null, "update:title": null, @@ -730,6 +733,8 @@ const DxAIAssistantConfig = { props: { aiIntegration: Object as PropType, chat: Object as PropType>, + customizeResponseText: {}, + customizeResponseTitle: Function as PropType<((status: ResponseStatus, commandNames: Array) => string)>, enabled: Boolean, popup: Object as PropType | Record>, title: String diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/grid_commands.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/grid_commands.ts index 083bad20d2d8..fad7b5718d9b 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/grid_commands.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/grid_commands.ts @@ -61,7 +61,7 @@ export class GridCommands { args: Record, customizeResponseText?: CustomizeResponseText, ): void { - const customMessages = customizeResponseText?.(name, args); + const customMessages = customizeResponseText?.({ name, args }); const customMessage = customMessages?.[result.status]; if (isDefined(customMessage)) { diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts index ef2fe8a5f48b..c294183e07ee 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts @@ -1,4 +1,5 @@ import type { RequestCallbacks } from '@js/common/ai-integration'; +import type { CustomizeResponseText } from '@js/common/grids'; import type { Message } from '@js/ui/chat'; import type { InternalGrid } from '@ts/grids/grid_core/m_types'; import type { z, ZodObject, ZodRawShape } from 'zod'; @@ -65,11 +66,7 @@ export interface CommandMessages { failure: string; } -// TODO: move to d.ts -export type CustomizeResponseText = ( - commandName: string, - commandArgs: Record, -) => Partial | undefined; +export { CustomizeResponseText }; // TODO: move to d.ts export type CustomizeResponseTitle = ( diff --git a/packages/devextreme/js/common/grids.d.ts b/packages/devextreme/js/common/grids.d.ts index 50bb52be6689..3b6e39eb7bc0 100644 --- a/packages/devextreme/js/common/grids.d.ts +++ b/packages/devextreme/js/common/grids.d.ts @@ -80,14 +80,53 @@ import { } from '../ui/widget/ui.widget'; import { PositionConfig } from './core/animation'; import { PagerBase } from '../ui/pagination'; -import { AIIntegration } from './ai-integration'; +import { AIIntegration, ExecuteGridAssistantCommandParams } from './ai-integration'; /** * @docid * @public * @namespace DevExpress.common.grids */ -export type AIAssistant = { +export type ResponseStatus = 'success' | 'failure'; + +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type ResponseStatusTexts = { + success?: string; + failure?: string; +}; + +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export interface PredefinedCommands { + sorting: { + dataField: string; + sortOrder: SortOrder | 'none'; + }; + clearSorting: {}; +} + +export type CommandInfo< + TCommands extends PredefinedCommands = PredefinedCommands, +> = { [K in keyof TCommands]: { name: K; args: TCommands[K] } }[keyof TCommands] + | { name: string; args: Record }; + +export type CustomizeResponseText< + TCommands extends PredefinedCommands = PredefinedCommands, +> = (command: CommandInfo) => ResponseStatusTexts; + +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type AIAssistant = { /** @docid */ aiIntegration?: AIIntegration; /** @@ -110,31 +149,23 @@ export type AIAssistant = { * @default 'AI Assistant' */ title?: string; -}; - -/** - * @docid - * @hidden - * @namespace DevExpress.common.grids - */ -export type AIAssistantRequestCreatingInfo = { /** * @docid - * @type object */ - context: Record; + customizeResponseTitle?: (status: ResponseStatus, commandNames: (keyof TCommands | string)[]) => string; /** * @docid - * @type object */ - responseSchema: Record; - /** - * @docid - * @type object - */ - additionalInfo?: Record; + customizeResponseText?: CustomizeResponseText; }; +/** + * @docid + * @hidden + * @namespace DevExpress.common.grids + */ +export type AIAssistantRequestCreatingInfo = Pick; + /** * @docid * @hidden diff --git a/packages/devextreme/ts/dx.all.d.ts b/packages/devextreme/ts/dx.all.d.ts index 3c8f3a506f4b..a6fef02973ca 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -1226,6 +1226,16 @@ declare module DevExpress.common { }; export type ButtonStyle = 'text' | 'outlined' | 'contained'; export type ButtonType = 'danger' | 'default' | 'normal' | 'success'; + /** + * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. + */ + export type CommandInfo< + TCommands extends DevExpress.common.grids.PredefinedCommands = DevExpress.common.grids.PredefinedCommands + > = + | { + [K in keyof TCommands]: { name: K; args: TCommands[K] }; + }[keyof TCommands] + | { name: string; args: Record }; /** * [descr:CompareRule] */ @@ -1260,6 +1270,14 @@ declare module DevExpress.common { | '===' | '>' | '>='; + /** + * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. + */ + export type CustomizeResponseText< + TCommands extends DevExpress.common.grids.PredefinedCommands = DevExpress.common.grids.PredefinedCommands + > = ( + command: CommandInfo + ) => DevExpress.common.grids.ResponseStatusTexts; /** * [descr:CustomRule] */ @@ -4625,7 +4643,9 @@ declare module DevExpress.common.grids { /** * [descr:AIAssistant] */ - export type AIAssistant = { + export type AIAssistant< + TCommands extends PredefinedCommands = PredefinedCommands + > = { /** * [descr:AIAssistant.aiIntegration] */ @@ -4646,25 +4666,26 @@ declare module DevExpress.common.grids { * [descr:AIAssistant.title] */ title?: string; - }; - /** - * [descr:AIAssistantRequestCreatingInfo] - * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. - */ - export type AIAssistantRequestCreatingInfo = { - /** - * [descr:AIAssistantRequestCreatingInfo.context] - */ - context: Record; /** - * [descr:AIAssistantRequestCreatingInfo.responseSchema] + * [descr:AIAssistant.customizeResponseTitle] */ - responseSchema: Record; + customizeResponseTitle?: ( + status: ResponseStatus, + commandNames: (keyof TCommands | string)[] + ) => string; /** - * [descr:AIAssistantRequestCreatingInfo.additionalInfo] + * [descr:AIAssistant.customizeResponseText] */ - additionalInfo?: Record; + customizeResponseText?: CustomizeResponseText; }; + /** + * [descr:AIAssistantRequestCreatingInfo] + * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. + */ + export type AIAssistantRequestCreatingInfo = Pick< + DevExpress.aiIntegration.ExecuteGridAssistantCommandParams, + 'context' | 'responseSchema' + >; export type AIColumnMode = 'auto' | 'manual'; /** * [descr:AIColumnRequestCreatingInfo] @@ -6489,6 +6510,27 @@ declare module DevExpress.common.grids { */ pageSize?: number; } + /** + * [descr:PredefinedCommands] + */ + export interface PredefinedCommands { + sorting: { + dataField: string; + sortOrder: SortOrder | 'none'; + }; + clearSorting: {}; + } + /** + * [descr:ResponseStatus] + */ + export type ResponseStatus = 'success' | 'failure'; + /** + * [descr:ResponseStatusTexts] + */ + export type ResponseStatusTexts = { + success?: string; + failure?: string; + }; /** * [descr:RowDragging] * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. From 09546c5f9f55895b379bf833190a54dfac1da285 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Thu, 14 May 2026 14:32:45 +0200 Subject: [PATCH 2/9] Grid AI Assistant: extend commands for data grid types --- .../src/common/grids/index.ts | 2 + .../devextreme-angular/src/common/index.ts | 2 + .../src/ui/data-grid/index.ts | 3 + .../src/ui/data-grid/nested/ai-assistant.ts | 6 +- .../src/ui/tree-list/nested/ai-assistant.ts | 6 +- .../make-angular-metadata.ts | 2 + packages/devextreme-react/src/common/grids.ts | 2 + packages/devextreme-react/src/common/index.ts | 2 + packages/devextreme-react/src/data-grid.ts | 8 +- packages/devextreme-react/src/tree-list.ts | 4 +- packages/devextreme-vue/src/common/grids.ts | 2 + packages/devextreme-vue/src/common/index.ts | 2 + packages/devextreme-vue/src/data-grid.ts | 4 +- packages/devextreme-vue/src/tree-list.ts | 4 +- .../grids/grid_core/ai_assistant/types.ts | 4 +- packages/devextreme/js/common/grids.d.ts | 26 +++++-- packages/devextreme/js/ui/data_grid.d.ts | 44 ++++++++++- .../devextreme/js/ui/data_grid_types.d.ts | 5 +- packages/devextreme/js/ui/tree_list.d.ts | 3 + .../devextreme/js/ui/tree_list_types.d.ts | 3 + packages/devextreme/ts/dx.all.d.ts | 78 +++++++++++++------ 21 files changed, 161 insertions(+), 51 deletions(-) diff --git a/packages/devextreme-angular/src/common/grids/index.ts b/packages/devextreme-angular/src/common/grids/index.ts index d7767cbc1885..ffc8b206b7f2 100644 --- a/packages/devextreme-angular/src/common/grids/index.ts +++ b/packages/devextreme-angular/src/common/grids/index.ts @@ -21,6 +21,7 @@ export type { ColumnHeaderFilterSearchConfig, ColumnLookup, ColumnResizeMode, + CommandInfo, DataChange, DataChangeInfo, DataChangeType, @@ -55,6 +56,7 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommandNames, PredefinedCommands, ResponseStatus, ResponseStatusTexts, diff --git a/packages/devextreme-angular/src/common/index.ts b/packages/devextreme-angular/src/common/index.ts index 2df8634d4079..2614ad5c9144 100644 --- a/packages/devextreme-angular/src/common/index.ts +++ b/packages/devextreme-angular/src/common/index.ts @@ -296,6 +296,7 @@ export namespace Grids { export type ColumnHeaderFilterSearchConfig = GridsModule.ColumnHeaderFilterSearchConfig; export type ColumnLookup = GridsModule.ColumnLookup; export type ColumnResizeMode = GridsModule.ColumnResizeMode; + export type CommandInfo = GridsModule.CommandInfo; export type DataChange = GridsModule.DataChange; export type DataChangeInfo = GridsModule.DataChangeInfo; export type DataChangeType = GridsModule.DataChangeType; @@ -330,6 +331,7 @@ export namespace Grids { export type Pager = GridsModule.Pager; export type PagerPageSize = GridsModule.PagerPageSize; export type PagingBase = GridsModule.PagingBase; + export type PredefinedCommandNames = GridsModule.PredefinedCommandNames; export type PredefinedCommands = GridsModule.PredefinedCommands; export type ResponseStatus = GridsModule.ResponseStatus; export type ResponseStatusTexts = GridsModule.ResponseStatusTexts; diff --git a/packages/devextreme-angular/src/ui/data-grid/index.ts b/packages/devextreme-angular/src/ui/data-grid/index.ts index 3bb0dc063bfe..2fd0024629bb 100644 --- a/packages/devextreme-angular/src/ui/data-grid/index.ts +++ b/packages/devextreme-angular/src/ui/data-grid/index.ts @@ -344,7 +344,10 @@ export class DxDataGridComponent extends DxComponent } + /** + * [descr:dxDataGridOptions.aiAssistant] + */ @Input() get aiAssistant(): AIAssistant { return this._getOption('aiAssistant'); diff --git a/packages/devextreme-angular/src/ui/data-grid/nested/ai-assistant.ts b/packages/devextreme-angular/src/ui/data-grid/nested/ai-assistant.ts index 72d94da8ad8b..4b0b7f989dba 100644 --- a/packages/devextreme-angular/src/ui/data-grid/nested/ai-assistant.ts +++ b/packages/devextreme-angular/src/ui/data-grid/nested/ai-assistant.ts @@ -15,7 +15,7 @@ import { import type { AIIntegration } from 'devextreme/common/ai-integration'; -import type { ResponseStatus } from 'devextreme/common/grids'; +import type { CommandInfo, ResponseStatusTexts, ResponseStatus } from 'devextreme/common/grids'; import type { dxPopupOptions } from 'devextreme/ui/popup'; import { @@ -50,10 +50,10 @@ export class DxoDataGridAIAssistantComponent extends NestedOption implements OnD } @Input() - get customizeResponseText(): any { + get customizeResponseText(): ((command: CommandInfo) => ResponseStatusTexts) { return this._getOption('customizeResponseText'); } - set customizeResponseText(value: any) { + set customizeResponseText(value: ((command: CommandInfo) => ResponseStatusTexts)) { this._setOption('customizeResponseText', value); } diff --git a/packages/devextreme-angular/src/ui/tree-list/nested/ai-assistant.ts b/packages/devextreme-angular/src/ui/tree-list/nested/ai-assistant.ts index ee25ab0a350b..0058780ef257 100644 --- a/packages/devextreme-angular/src/ui/tree-list/nested/ai-assistant.ts +++ b/packages/devextreme-angular/src/ui/tree-list/nested/ai-assistant.ts @@ -15,7 +15,7 @@ import { import type { AIIntegration } from 'devextreme/common/ai-integration'; -import type { ResponseStatus } from 'devextreme/common/grids'; +import type { CommandInfo, ResponseStatusTexts, ResponseStatus } from 'devextreme/common/grids'; import type { dxPopupOptions } from 'devextreme/ui/popup'; import { @@ -50,10 +50,10 @@ export class DxoTreeListAIAssistantComponent extends NestedOption implements OnD } @Input() - get customizeResponseText(): any { + get customizeResponseText(): ((command: CommandInfo) => ResponseStatusTexts) { return this._getOption('customizeResponseText'); } - set customizeResponseText(value: any) { + set customizeResponseText(value: ((command: CommandInfo) => ResponseStatusTexts)) { this._setOption('customizeResponseText', value); } diff --git a/packages/devextreme-metadata/make-angular-metadata.ts b/packages/devextreme-metadata/make-angular-metadata.ts index e485f2b84f48..439724a65439 100644 --- a/packages/devextreme-metadata/make-angular-metadata.ts +++ b/packages/devextreme-metadata/make-angular-metadata.ts @@ -3,6 +3,7 @@ import { cleanArtifacts, types } from './common'; import { commonSmdCollectionItems } from './common/smd'; import { NG_SMD_FILE, PATHS } from './common/paths'; import { replaceTypesMutations } from './common-smd-mutations'; +import { dxDataGridOptions } from 'devextreme/js/ui/data_grid'; cleanArtifacts(NG_SMD_FILE, 'NgSmdGenerator.cfg.json'); @@ -48,6 +49,7 @@ Ng.makeMetadata({ removeMembers(/\/grids:ColumnBase.ai/), removeMembers(/\/grids:GridBaseOptions.aiAssistant/), + removeMembers(/\/grids:AIAssistant/), removeMembers(/\/calendar:dxCalendarOptions.todayButtonText/), removeMembers(/\/card_view:/), removeMembers(/\/chat:TextMessage.attachments/), diff --git a/packages/devextreme-react/src/common/grids.ts b/packages/devextreme-react/src/common/grids.ts index 7263e75eebbc..f7828733db6e 100644 --- a/packages/devextreme-react/src/common/grids.ts +++ b/packages/devextreme-react/src/common/grids.ts @@ -21,6 +21,7 @@ export type { ColumnHeaderFilterSearchConfig, ColumnLookup, ColumnResizeMode, + CommandInfo, DataChange, DataChangeInfo, DataChangeType, @@ -55,6 +56,7 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommandNames, PredefinedCommands, ResponseStatus, ResponseStatusTexts, diff --git a/packages/devextreme-react/src/common/index.ts b/packages/devextreme-react/src/common/index.ts index ef14c0390611..8f913f434f06 100644 --- a/packages/devextreme-react/src/common/index.ts +++ b/packages/devextreme-react/src/common/index.ts @@ -296,6 +296,7 @@ export namespace Grids { export type ColumnHeaderFilterSearchConfig = GridsModule.ColumnHeaderFilterSearchConfig; export type ColumnLookup = GridsModule.ColumnLookup; export type ColumnResizeMode = GridsModule.ColumnResizeMode; + export type CommandInfo = GridsModule.CommandInfo; export type DataChange = GridsModule.DataChange; export type DataChangeInfo = GridsModule.DataChangeInfo; export type DataChangeType = GridsModule.DataChangeType; @@ -330,6 +331,7 @@ export namespace Grids { export type Pager = GridsModule.Pager; export type PagerPageSize = GridsModule.PagerPageSize; export type PagingBase = GridsModule.PagingBase; + export type PredefinedCommandNames = GridsModule.PredefinedCommandNames; export type PredefinedCommands = GridsModule.PredefinedCommands; export type ResponseStatus = GridsModule.ResponseStatus; export type ResponseStatusTexts = GridsModule.ResponseStatusTexts; diff --git a/packages/devextreme-react/src/data-grid.ts b/packages/devextreme-react/src/data-grid.ts index 4d3f2e588751..a48623591c38 100644 --- a/packages/devextreme-react/src/data-grid.ts +++ b/packages/devextreme-react/src/data-grid.ts @@ -10,7 +10,7 @@ import { Component as BaseComponent, IHtmlOptions, ComponentRef, NestedComponent import NestedOption from "./core/nested-option"; import type { dxDataGridColumn, AdaptiveDetailRowPreparingEvent, AIAssistantRequestCreatingEvent, AIColumnRequestCreatingEvent, CellClickEvent, CellDblClickEvent, CellPreparedEvent, ContentReadyEvent, ContextMenuPreparingEvent, DataErrorOccurredEvent, DisposingEvent, EditCanceledEvent, EditCancelingEvent, EditingStartEvent, EditorPreparedEvent, EditorPreparingEvent, ExportingEvent, FocusedCellChangingEvent, FocusedRowChangingEvent, InitializedEvent, InitNewRowEvent, KeyDownEvent, RowClickEvent, RowCollapsedEvent, RowCollapsingEvent, RowDblClickEvent, RowExpandedEvent, RowExpandingEvent, RowInsertedEvent, RowInsertingEvent, RowPreparedEvent, RowRemovedEvent, RowRemovingEvent, RowUpdatedEvent, RowUpdatingEvent, RowValidatingEvent, SavedEvent, SavingEvent, ToolbarPreparingEvent, dxDataGridRowObject, DataGridPredefinedColumnButton, ColumnButtonClickEvent, dxDataGridColumnButton, DataGridCommandColumnType, SelectionSensitivity, DataGridPredefinedToolbarItem, DataGridExportFormat, DataGridScrollMode, dxDataGridToolbarItem } from "devextreme/ui/data_grid"; -import type { DataChange, AIColumnMode, ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, FilterType, FixedPosition, ColumnHeaderFilter as GridsColumnHeaderFilter, SelectedFilterOperation, ColumnChooserMode, ColumnChooserSearchConfig, ColumnChooserSelectionConfig, HeaderFilterGroupInterval, ColumnHeaderFilterSearchConfig, HeaderFilterSearchConfig, HeaderFilterTexts, SelectionColumnDisplayMode, GridsEditMode, NewRowPosition, GridsEditRefreshMode, StartEditAction, FilterPanel as GridsFilterPanel, FilterPanelTexts as GridsFilterPanelTexts, ApplyFilterMode, GroupExpandMode, SummaryType, EnterKeyAction, EnterKeyDirection, PagerPageSize, GridBase, DataRenderMode, StateStoreType } from "devextreme/common/grids"; +import type { DataChange, AIColumnMode, CommandInfo, ResponseStatusTexts, ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, FilterType, FixedPosition, ColumnHeaderFilter as GridsColumnHeaderFilter, SelectedFilterOperation, ColumnChooserMode, ColumnChooserSearchConfig, ColumnChooserSelectionConfig, HeaderFilterGroupInterval, ColumnHeaderFilterSearchConfig, HeaderFilterSearchConfig, HeaderFilterTexts, SelectionColumnDisplayMode, GridsEditMode, NewRowPosition, GridsEditRefreshMode, StartEditAction, FilterPanel as GridsFilterPanel, FilterPanelTexts as GridsFilterPanelTexts, ApplyFilterMode, GroupExpandMode, SummaryType, EnterKeyAction, EnterKeyDirection, PagerPageSize, GridBase, DataRenderMode, StateStoreType } from "devextreme/common/grids"; import type { Mode, ValidationRuleType, HorizontalAlignment, VerticalAlignment, template, TextEditorButtonLocation, ButtonStyle, ButtonType, DataType, Format as CommonFormat, SortOrder, SearchMode, ComparisonOperator, SingleMultipleOrNone, SelectAllMode, ToolbarItemLocation, ToolbarItemComponent, TextBoxPredefinedButton, TextEditorButton, LabelMode, MaskMode, EditorStyle, ValidationMessageMode, Position as CommonPosition, ValidationStatus, PositionAlignment, Direction, DisplayMode, DragDirection, DragHighlight, ScrollbarMode, TabsIconPosition, TabsStyle } from "devextreme/common"; import type { ContentReadyEvent as ButtonContentReadyEvent, DisposingEvent as ButtonDisposingEvent, InitializedEvent as ButtonInitializedEvent, dxButtonOptions, ClickEvent, OptionChangedEvent } from "devextreme/ui/button"; import type { ContentReadyEvent as TextBoxContentReadyEvent, DisposingEvent as TextBoxDisposingEvent, InitializedEvent as TextBoxInitializedEvent, KeyDownEvent as TextBoxKeyDownEvent, dxTextBoxOptions, OptionChangedEvent as TextBoxOptionChangedEvent, TextBoxType, ChangeEvent, CopyEvent, CutEvent, EnterKeyEvent, FocusInEvent, FocusOutEvent, InputEvent, KeyUpEvent, PasteEvent, ValueChangedEvent } from "devextreme/ui/text_box"; @@ -131,7 +131,7 @@ const DataGrid = memo( } ), []); - const subscribableOptions = useMemo(() => (["columns","editing","editing.changes","editing.editColumnName","editing.editRowKey","filterValue","focusedColumnIndex","focusedRowIndex","focusedRowKey","groupPanel","groupPanel.visible","paging","paging.pageIndex","paging.pageSize","selectedRowKeys","selectionFilter","filterBuilder.value","filterBuilderPopup.height","filterBuilderPopup.position","filterBuilderPopup.visible","filterBuilderPopup.width","filterPanel.filterEnabled","editing.form.formData","editing.popup.height","aIAssistant.popup.height","editing.popup.position","aIAssistant.popup.position","editing.popup.visible","aIAssistant.popup.visible","editing.popup.width","aIAssistant.popup.width","searchPanel.text"]), []); + const subscribableOptions = useMemo(() => (["columns","editing","editing.changes","editing.editColumnName","editing.editRowKey","filterValue","focusedColumnIndex","focusedRowIndex","focusedRowKey","groupPanel","groupPanel.visible","paging","paging.pageIndex","paging.pageSize","selectedRowKeys","selectionFilter","filterBuilder.value","filterBuilderPopup.height","filterBuilderPopup.position","filterBuilderPopup.visible","filterBuilderPopup.width","filterPanel.filterEnabled","editing.form.formData","aIAssistant.popup.height","editing.popup.height","aIAssistant.popup.position","editing.popup.position","aIAssistant.popup.visible","editing.popup.visible","aIAssistant.popup.width","editing.popup.width","searchPanel.text"]), []); const independentEvents = useMemo(() => (["onAdaptiveDetailRowPreparing","onAIAssistantRequestCreating","onAIColumnRequestCreating","onCellClick","onCellDblClick","onCellPrepared","onContentReady","onContextMenuPreparing","onDataErrorOccurred","onDisposing","onEditCanceled","onEditCanceling","onEditingStart","onEditorPrepared","onEditorPreparing","onExporting","onFocusedCellChanging","onFocusedRowChanging","onInitialized","onInitNewRow","onKeyDown","onRowClick","onRowCollapsed","onRowCollapsing","onRowDblClick","onRowExpanded","onRowExpanding","onRowInserted","onRowInserting","onRowPrepared","onRowRemoved","onRowRemoving","onRowUpdated","onRowUpdating","onRowValidating","onSaved","onSaving","onToolbarPreparing"]), []); const defaults = useMemo(() => ({ @@ -244,7 +244,7 @@ const AI = Object.assign(_componentAI, type IAIAssistantProps = React.PropsWithChildren<{ aiIntegration?: AIIntegration; chat?: Record; - customizeResponseText?: any; + customizeResponseText?: ((command: CommandInfo) => ResponseStatusTexts); customizeResponseTitle?: ((status: ResponseStatus, commandNames: Array) => string); enabled?: boolean; popup?: dxPopupOptions; @@ -2847,8 +2847,8 @@ const PatternRule = Object.assign | { diff --git a/packages/devextreme-react/src/tree-list.ts b/packages/devextreme-react/src/tree-list.ts index 1d9479f96650..25f39e2e97da 100644 --- a/packages/devextreme-react/src/tree-list.ts +++ b/packages/devextreme-react/src/tree-list.ts @@ -10,7 +10,7 @@ import { Component as BaseComponent, IHtmlOptions, ComponentRef, NestedComponent import NestedOption from "./core/nested-option"; import type { dxTreeListColumn, AdaptiveDetailRowPreparingEvent, AIAssistantRequestCreatingEvent, AIColumnRequestCreatingEvent, CellClickEvent, CellDblClickEvent, CellPreparedEvent, ContentReadyEvent, ContextMenuPreparingEvent, DataErrorOccurredEvent, DisposingEvent, EditCanceledEvent, EditCancelingEvent, EditingStartEvent, EditorPreparedEvent, EditorPreparingEvent, FocusedCellChangingEvent, FocusedRowChangingEvent, InitializedEvent, InitNewRowEvent, KeyDownEvent, NodesInitializedEvent, RowClickEvent, RowCollapsedEvent, RowCollapsingEvent, RowDblClickEvent, RowExpandedEvent, RowExpandingEvent, RowInsertedEvent, RowInsertingEvent, RowPreparedEvent, RowRemovedEvent, RowRemovingEvent, RowUpdatedEvent, RowUpdatingEvent, RowValidatingEvent, SavedEvent, SavingEvent, ToolbarPreparingEvent, dxTreeListRowObject, TreeListPredefinedColumnButton, ColumnButtonClickEvent, dxTreeListColumnButton, TreeListCommandColumnType, TreeListPredefinedToolbarItem, dxTreeListToolbarItem } from "devextreme/ui/tree_list"; -import type { DataChange, AIColumnMode, ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, FilterType, FixedPosition, ColumnHeaderFilter as GridsColumnHeaderFilter, SelectedFilterOperation, ColumnChooserMode, ColumnChooserSearchConfig, ColumnChooserSelectionConfig, HeaderFilterGroupInterval, ColumnHeaderFilterSearchConfig, GridsEditMode, GridsEditRefreshMode, StartEditAction, FilterPanel as GridsFilterPanel, FilterPanelTexts as GridsFilterPanelTexts, ApplyFilterMode, HeaderFilterSearchConfig, HeaderFilterTexts, EnterKeyAction, EnterKeyDirection, PagerPageSize, GridBase, DataRenderMode, StateStoreType } from "devextreme/common/grids"; +import type { DataChange, AIColumnMode, CommandInfo, ResponseStatusTexts, ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, FilterType, FixedPosition, ColumnHeaderFilter as GridsColumnHeaderFilter, SelectedFilterOperation, ColumnChooserMode, ColumnChooserSearchConfig, ColumnChooserSelectionConfig, HeaderFilterGroupInterval, ColumnHeaderFilterSearchConfig, GridsEditMode, GridsEditRefreshMode, StartEditAction, FilterPanel as GridsFilterPanel, FilterPanelTexts as GridsFilterPanelTexts, ApplyFilterMode, HeaderFilterSearchConfig, HeaderFilterTexts, EnterKeyAction, EnterKeyDirection, PagerPageSize, GridBase, DataRenderMode, StateStoreType } from "devextreme/common/grids"; import type { ContentReadyEvent as ButtonContentReadyEvent, DisposingEvent as ButtonDisposingEvent, InitializedEvent as ButtonInitializedEvent, dxButtonOptions, ClickEvent, OptionChangedEvent } from "devextreme/ui/button"; import type { ContentReadyEvent as TextBoxContentReadyEvent, DisposingEvent as TextBoxDisposingEvent, InitializedEvent as TextBoxInitializedEvent, KeyDownEvent as TextBoxKeyDownEvent, dxTextBoxOptions, OptionChangedEvent as TextBoxOptionChangedEvent, TextBoxType, ChangeEvent, CopyEvent, CutEvent, EnterKeyEvent, FocusInEvent, FocusOutEvent, InputEvent, KeyUpEvent, PasteEvent, ValueChangedEvent } from "devextreme/ui/text_box"; import type { ContentReadyEvent as FilterBuilderContentReadyEvent, DisposingEvent as FilterBuilderDisposingEvent, EditorPreparedEvent as FilterBuilderEditorPreparedEvent, EditorPreparingEvent as FilterBuilderEditorPreparingEvent, InitializedEvent as FilterBuilderInitializedEvent, OptionChangedEvent as FilterBuilderOptionChangedEvent, dxFilterBuilderField, FieldInfo, ValueChangedEvent as FilterBuilderValueChangedEvent, FilterBuilderOperation, dxFilterBuilderCustomOperation, GroupOperation } from "devextreme/ui/filter_builder"; @@ -216,7 +216,7 @@ const AI = Object.assign(_componentAI, type IAIAssistantProps = React.PropsWithChildren<{ aiIntegration?: AIIntegration; chat?: Record; - customizeResponseText?: any; + customizeResponseText?: ((command: CommandInfo) => ResponseStatusTexts); customizeResponseTitle?: ((status: ResponseStatus, commandNames: Array) => string); enabled?: boolean; popup?: dxPopupOptions; diff --git a/packages/devextreme-vue/src/common/grids.ts b/packages/devextreme-vue/src/common/grids.ts index 7263e75eebbc..f7828733db6e 100644 --- a/packages/devextreme-vue/src/common/grids.ts +++ b/packages/devextreme-vue/src/common/grids.ts @@ -21,6 +21,7 @@ export type { ColumnHeaderFilterSearchConfig, ColumnLookup, ColumnResizeMode, + CommandInfo, DataChange, DataChangeInfo, DataChangeType, @@ -55,6 +56,7 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommandNames, PredefinedCommands, ResponseStatus, ResponseStatusTexts, diff --git a/packages/devextreme-vue/src/common/index.ts b/packages/devextreme-vue/src/common/index.ts index ef14c0390611..8f913f434f06 100644 --- a/packages/devextreme-vue/src/common/index.ts +++ b/packages/devextreme-vue/src/common/index.ts @@ -296,6 +296,7 @@ export namespace Grids { export type ColumnHeaderFilterSearchConfig = GridsModule.ColumnHeaderFilterSearchConfig; export type ColumnLookup = GridsModule.ColumnLookup; export type ColumnResizeMode = GridsModule.ColumnResizeMode; + export type CommandInfo = GridsModule.CommandInfo; export type DataChange = GridsModule.DataChange; export type DataChangeInfo = GridsModule.DataChangeInfo; export type DataChangeType = GridsModule.DataChangeType; @@ -330,6 +331,7 @@ export namespace Grids { export type Pager = GridsModule.Pager; export type PagerPageSize = GridsModule.PagerPageSize; export type PagingBase = GridsModule.PagingBase; + export type PredefinedCommandNames = GridsModule.PredefinedCommandNames; export type PredefinedCommands = GridsModule.PredefinedCommands; export type ResponseStatus = GridsModule.ResponseStatus; export type ResponseStatusTexts = GridsModule.ResponseStatusTexts; diff --git a/packages/devextreme-vue/src/data-grid.ts b/packages/devextreme-vue/src/data-grid.ts index ccdf577984f9..ca6626cf5e2e 100644 --- a/packages/devextreme-vue/src/data-grid.ts +++ b/packages/devextreme-vue/src/data-grid.ts @@ -20,6 +20,8 @@ import { SearchPanel, Sorting, AIColumnMode, + CommandInfo, + ResponseStatusTexts, ResponseStatus, DataChangeType, ColumnAIOptions, @@ -744,7 +746,7 @@ const DxAIAssistantConfig = { props: { aiIntegration: Object as PropType, chat: Object as PropType>, - customizeResponseText: {}, + customizeResponseText: Function as PropType<((command: CommandInfo) => ResponseStatusTexts)>, customizeResponseTitle: Function as PropType<((status: ResponseStatus, commandNames: Array) => string)>, enabled: Boolean, popup: Object as PropType | Record>, diff --git a/packages/devextreme-vue/src/tree-list.ts b/packages/devextreme-vue/src/tree-list.ts index abc1c8255659..a411b5c757d7 100644 --- a/packages/devextreme-vue/src/tree-list.ts +++ b/packages/devextreme-vue/src/tree-list.ts @@ -20,6 +20,8 @@ import { SearchPanel, Sorting, AIColumnMode, + CommandInfo, + ResponseStatusTexts, ResponseStatus, DataChangeType, ColumnAIOptions, @@ -733,7 +735,7 @@ const DxAIAssistantConfig = { props: { aiIntegration: Object as PropType, chat: Object as PropType>, - customizeResponseText: {}, + customizeResponseText: Function as PropType<((command: CommandInfo) => ResponseStatusTexts)>, customizeResponseTitle: Function as PropType<((status: ResponseStatus, commandNames: Array) => string)>, enabled: Boolean, popup: Object as PropType | Record>, diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts index c294183e07ee..ee0c5c6322ac 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts @@ -1,5 +1,5 @@ import type { RequestCallbacks } from '@js/common/ai-integration'; -import type { CustomizeResponseText } from '@js/common/grids'; +import type { AIAssistant } from '@js/common/grids'; import type { Message } from '@js/ui/chat'; import type { InternalGrid } from '@ts/grids/grid_core/m_types'; import type { z, ZodObject, ZodRawShape } from 'zod'; @@ -66,7 +66,7 @@ export interface CommandMessages { failure: string; } -export { CustomizeResponseText }; +export type CustomizeResponseText = AIAssistant['customizeResponseText']; // TODO: move to d.ts export type CustomizeResponseTitle = ( diff --git a/packages/devextreme/js/common/grids.d.ts b/packages/devextreme/js/common/grids.d.ts index 3b6e39eb7bc0..2a114190a804 100644 --- a/packages/devextreme/js/common/grids.d.ts +++ b/packages/devextreme/js/common/grids.d.ts @@ -100,30 +100,38 @@ export type ResponseStatusTexts = { }; /** - * @docid + * @docid GridBasePredefinedCommands * @public * @namespace DevExpress.common.grids */ -export interface PredefinedCommands { +export type PredefinedCommands = { sorting: { dataField: string; sortOrder: SortOrder | 'none'; }; clearSorting: {}; -} +}; +/** + * @docid + * @namespace DevExpress.common.grids + */ export type CommandInfo< TCommands extends PredefinedCommands = PredefinedCommands, > = { [K in keyof TCommands]: { name: K; args: TCommands[K] } }[keyof TCommands] | { name: string; args: Record }; -export type CustomizeResponseText< - TCommands extends PredefinedCommands = PredefinedCommands, -> = (command: CommandInfo) => ResponseStatusTexts; +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type PredefinedCommandNames = keyof PredefinedCommands; /** * @docid * @public + * @type object * @namespace DevExpress.common.grids */ export type AIAssistant = { @@ -152,11 +160,13 @@ export type AIAssistant string; + customizeResponseTitle?: (status: ResponseStatus, commandNames: (keyof TCommands)[]) => string; /** * @docid + * @type_function_param1 command:CommandInfo + * @type_function_return ResponseStatusTexts */ - customizeResponseText?: CustomizeResponseText; + customizeResponseText?: (command: CommandInfo) => ResponseStatusTexts; }; /** diff --git a/packages/devextreme/js/ui/data_grid.d.ts b/packages/devextreme/js/ui/data_grid.d.ts index 45ebe3c527b7..db9e66103bc3 100644 --- a/packages/devextreme/js/ui/data_grid.d.ts +++ b/packages/devextreme/js/ui/data_grid.d.ts @@ -82,6 +82,10 @@ import { ToolbarPreparingInfo, AIColumnRequestCreatingInfo, AIAssistantRequestCreatingInfo, + AIAssistant as BaseAIAssistant, + PredefinedCommands as BasePredefinedCommands, + CommandInfo as BaseCommandInfo, + ResponseStatusTexts, } from '../common/grids'; export { @@ -101,7 +105,6 @@ export { } from '../common'; export { - AIAssistant, ApplyFilterMode, ColumnChooser, ColumnChooserMode, @@ -146,6 +149,7 @@ export { StateStoreType, StateStoring, SummaryType, + ResponseStatusTexts, } from '../common/grids'; export { @@ -1170,7 +1174,7 @@ export type DataRowTemplateData = { readonly isExpanded?: boolean; }; -type OverriddenKeys = 'columns' | 'customizeColumns' | 'dataRowTemplate' | 'editing' | 'export' | 'grouping' | 'groupPanel' | 'keyExpr' | 'masterDetail' | 'onCellClick' | 'onCellDblClick' | 'onCellHoverChanged' | 'onCellPrepared' | 'onContextMenuPreparing' | 'onEditingStart' | 'onEditorPrepared' | 'onEditorPreparing' | 'onExporting' | 'onFocusedCellChanged' | 'onFocusedCellChanging' | 'onFocusedRowChanged' | 'onFocusedRowChanging' | 'onRowClick' | 'onRowDblClick' | 'onRowPrepared' | 'remoteOperations' | 'rowTemplate' | 'scrolling' | 'selection' | 'selectionFilter' | 'sortByGroupSummaryInfo' | 'summary' | 'toolbar'; +type OverriddenKeys = 'columns' | 'customizeColumns' | 'dataRowTemplate' | 'editing' | 'export' | 'grouping' | 'groupPanel' | 'keyExpr' | 'masterDetail' | 'onCellClick' | 'onCellDblClick' | 'onCellHoverChanged' | 'onCellPrepared' | 'onContextMenuPreparing' | 'onEditingStart' | 'onEditorPrepared' | 'onEditorPreparing' | 'onExporting' | 'onFocusedCellChanged' | 'onFocusedCellChanging' | 'onFocusedRowChanged' | 'onFocusedRowChanging' | 'onRowClick' | 'onRowDblClick' | 'onRowPrepared' | 'remoteOperations' | 'rowTemplate' | 'scrolling' | 'selection' | 'selectionFilter' | 'sortByGroupSummaryInfo' | 'summary' | 'toolbar' | 'aiAssistant'; /** * @deprecated use Properties instead @@ -1180,6 +1184,11 @@ type OverriddenKeys = 'columns' | 'customizeColumns' | 'dataRowTemplate' | 'edit * @type object */ export type dxDataGridOptions = Omit, TRowData, TKey>, OverriddenKeys> & { + /** + * @docid + * @public + */ + aiAssistant?: AIAssistant; /** * @docid * @type Array @@ -1932,6 +1941,37 @@ export type Toolbar = { disabled?: boolean; }; +/** + * @docid + * @public + * @inherits GridBasePredefinedCommands + */ +export type PredefinedCommands = BasePredefinedCommands & { + grouping: { + dataField: string; + groupIndex: number; + }; + clearGrouping: {}; +}; + +/** + * @docid + * @hidden + */ +export type GridCommandInfo = BaseCommandInfo; + +/** + * @docid + * @public + */ +export type PredefinedCommandNames = keyof PredefinedCommands; + +/** + * @docid + * @public + */ +export type AIAssistant = BaseAIAssistant; + /** * @namespace DevExpress.ui * @deprecated Use Editing instead diff --git a/packages/devextreme/js/ui/data_grid_types.d.ts b/packages/devextreme/js/ui/data_grid_types.d.ts index fcf7ed3db4b7..00f34a368799 100644 --- a/packages/devextreme/js/ui/data_grid_types.d.ts +++ b/packages/devextreme/js/ui/data_grid_types.d.ts @@ -12,7 +12,6 @@ export { Sortable, SortOrder, ToolbarItemLocation, - AIAssistant, ApplyFilterMode, ColumnChooser, ColumnChooserMode, @@ -57,6 +56,7 @@ export { StateStoreType, StateStoring, SummaryType, + ResponseStatusTexts, DataGridCommandColumnType, DataGridExportFormat, DataGridScrollMode, @@ -142,6 +142,9 @@ export { SummaryTexts, ToolbarItem, Toolbar, + PredefinedCommands, + PredefinedCommandNames, + AIAssistant, Editing, EditingTexts, Scrolling, diff --git a/packages/devextreme/js/ui/tree_list.d.ts b/packages/devextreme/js/ui/tree_list.d.ts index 3374ac0af524..640f15b5583d 100644 --- a/packages/devextreme/js/ui/tree_list.d.ts +++ b/packages/devextreme/js/ui/tree_list.d.ts @@ -116,6 +116,9 @@ export { export { AIAssistant, + PredefinedCommands, + PredefinedCommandNames, + ResponseStatusTexts, ApplyFilterMode, ColumnChooser, ColumnChooserMode, diff --git a/packages/devextreme/js/ui/tree_list_types.d.ts b/packages/devextreme/js/ui/tree_list_types.d.ts index 308ad89a0370..a8cbe5c0c36b 100644 --- a/packages/devextreme/js/ui/tree_list_types.d.ts +++ b/packages/devextreme/js/ui/tree_list_types.d.ts @@ -2,6 +2,9 @@ export { DisplayMode, SearchMode, AIAssistant, + PredefinedCommands, + PredefinedCommandNames, + ResponseStatusTexts, ApplyFilterMode, ColumnChooser, ColumnChooserMode, diff --git a/packages/devextreme/ts/dx.all.d.ts b/packages/devextreme/ts/dx.all.d.ts index a6fef02973ca..4d0853600b5e 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -1226,16 +1226,6 @@ declare module DevExpress.common { }; export type ButtonStyle = 'text' | 'outlined' | 'contained'; export type ButtonType = 'danger' | 'default' | 'normal' | 'success'; - /** - * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. - */ - export type CommandInfo< - TCommands extends DevExpress.common.grids.PredefinedCommands = DevExpress.common.grids.PredefinedCommands - > = - | { - [K in keyof TCommands]: { name: K; args: TCommands[K] }; - }[keyof TCommands] - | { name: string; args: Record }; /** * [descr:CompareRule] */ @@ -1270,14 +1260,6 @@ declare module DevExpress.common { | '===' | '>' | '>='; - /** - * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. - */ - export type CustomizeResponseText< - TCommands extends DevExpress.common.grids.PredefinedCommands = DevExpress.common.grids.PredefinedCommands - > = ( - command: CommandInfo - ) => DevExpress.common.grids.ResponseStatusTexts; /** * [descr:CustomRule] */ @@ -4671,12 +4653,14 @@ declare module DevExpress.common.grids { */ customizeResponseTitle?: ( status: ResponseStatus, - commandNames: (keyof TCommands | string)[] + commandNames: (keyof TCommands)[] ) => string; /** * [descr:AIAssistant.customizeResponseText] */ - customizeResponseText?: CustomizeResponseText; + customizeResponseText?: ( + command: CommandInfo + ) => ResponseStatusTexts; }; /** * [descr:AIAssistantRequestCreatingInfo] @@ -5257,6 +5241,17 @@ declare module DevExpress.common.grids { calculateCellValue?: (rowData: any) => any; }; export type ColumnResizeMode = 'nextColumn' | 'widget'; + /** + * [descr:CommandInfo] + * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. + */ + export type CommandInfo< + TCommands extends PredefinedCommands = PredefinedCommands + > = + | { + [K in keyof TCommands]: { name: K; args: TCommands[K] }; + }[keyof TCommands] + | { name: string; args: Record }; /** * [descr:DataChange] */ @@ -6511,15 +6506,19 @@ declare module DevExpress.common.grids { pageSize?: number; } /** - * [descr:PredefinedCommands] + * [descr:PredefinedCommandNames] */ - export interface PredefinedCommands { + export type PredefinedCommandNames = keyof PredefinedCommands; + /** + * [descr:GridBasePredefinedCommands] + */ + export type PredefinedCommands = { sorting: { dataField: string; sortOrder: SortOrder | 'none'; }; clearSorting: {}; - } + }; /** * [descr:ResponseStatus] */ @@ -12429,6 +12428,11 @@ declare module DevExpress.ui { TKey = any > = DevExpress.common.core.events.EventInfo> & DevExpress.common.grids.AdaptiveDetailRowPreparingInfo; + /** + * [descr:AIAssistant] + */ + export type AIAssistant = + DevExpress.common.grids.AIAssistant; /** * [descr:_ui_data_grid_AIAssistantRequestCreatingEvent] */ @@ -13366,6 +13370,12 @@ declare module DevExpress.ui { */ readonly rows: Array>; }; + /** + * [descr:GridCommandInfo] + * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. + */ + export type GridCommandInfo = + DevExpress.common.grids.CommandInfo; /** * [descr:GroupData] */ @@ -13563,8 +13573,24 @@ declare module DevExpress.ui { | 'selectionFilter' | 'sortByGroupSummaryInfo' | 'summary' - | 'toolbar'; + | 'toolbar' + | 'aiAssistant'; export type Paging = DevExpress.common.grids.PagingBase; + /** + * [descr:PredefinedCommandNames] + */ + export type PredefinedCommandNames = keyof PredefinedCommands; + /** + * [descr:PredefinedCommands] + */ + export type PredefinedCommands = + DevExpress.common.grids.PredefinedCommands & { + grouping: { + dataField: string; + groupIndex: number; + }; + clearGrouping: {}; + }; export type Properties = dxDataGridOptions< TRowData, TKey @@ -14343,6 +14369,10 @@ declare module DevExpress.ui { >, DevExpress.ui.dxDataGrid.OverriddenKeys > & { + /** + * [descr:dxDataGridOptions.aiAssistant] + */ + aiAssistant?: DevExpress.ui.dxDataGrid.AIAssistant; /** * [descr:dxDataGridOptions.columns] */ From ae9ab46e60ffe4bf0f32de3ef1fae32653371d39 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Thu, 14 May 2026 14:50:14 +0200 Subject: [PATCH 3/9] rebase --- .../grid_core/ai_assistant/ai_assistant_controller.ts | 9 ++++----- .../js/__internal/grids/grid_core/ai_assistant/types.ts | 7 +------ packages/devextreme/js/common/grids.d.ts | 2 +- packages/devextreme/ts/dx.all.d.ts | 4 ++-- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts index b0659b70718b..51851cecd89d 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts @@ -4,6 +4,7 @@ import type { } from '@js/common/ai-integration'; import messageLocalization from '@js/common/core/localization/message'; import { ArrayStore } from '@js/common/data'; +import type { ResponseStatus } from '@js/common/grids'; import Guid from '@js/core/guid'; import { captionize } from '@js/core/utils/inflector'; import { isFunction, isString } from '@js/core/utils/type'; @@ -18,8 +19,6 @@ import { GridCommands } from './grid_commands'; import type { AIMessage, CommandResult, - CustomizeResponseText, - CustomizeResponseTitle, GridCommand, } from './types'; import { getMessageStatus, isAIMessage } from './utils'; @@ -38,7 +37,7 @@ export class AIAssistantController extends Controller { commandNames: string[], ): string { // TODO: remove type description, it should be got from d.ts - const customizeResponseTitle = this.option('aiAssistant.customizeResponseTitle') as CustomizeResponseTitle | undefined; + const customizeResponseTitle = this.option('aiAssistant.customizeResponseTitle'); if (!commandNames.length) { return messageLocalization.format('dxDataGrid-aiAssistantErrorMessage'); @@ -46,7 +45,7 @@ export class AIAssistantController extends Controller { if (customizeResponseTitle && isFunction(customizeResponseTitle)) { // TODO: add type description to d.ts - return customizeResponseTitle(status, commandNames); + return customizeResponseTitle(status as ResponseStatus, commandNames); } if (commandNames.length === 1) { @@ -93,7 +92,7 @@ export class AIAssistantController extends Controller { } // TODO: add type description to d.ts - const customizeResponseText = this.option('aiAssistant.customizeResponseText') as CustomizeResponseText | undefined; + const customizeResponseText = this.option('aiAssistant.customizeResponseText'); return this.gridCommands?.executeCommands(response.actions, customizeResponseText) ?? Promise.reject(new Error('Grid commands not initialized')); diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts index ee0c5c6322ac..961ed0dbdccc 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts @@ -67,12 +67,7 @@ export interface CommandMessages { } export type CustomizeResponseText = AIAssistant['customizeResponseText']; - -// TODO: move to d.ts -export type CustomizeResponseTitle = ( - status: MessageStatus, - commandNames: string[], -) => string; +export type CustomizeResponseTitle = AIAssistant['customizeResponseTitle']; export type AIAssistantRequestCallbacks = RequestCallbacks & { onAbort?: () => void; diff --git a/packages/devextreme/js/common/grids.d.ts b/packages/devextreme/js/common/grids.d.ts index 2a114190a804..6aed45362ed5 100644 --- a/packages/devextreme/js/common/grids.d.ts +++ b/packages/devextreme/js/common/grids.d.ts @@ -160,7 +160,7 @@ export type AIAssistant string; + customizeResponseTitle?: (status: ResponseStatus, commandNames: (keyof TCommands | string)[]) => string; /** * @docid * @type_function_param1 command:CommandInfo diff --git a/packages/devextreme/ts/dx.all.d.ts b/packages/devextreme/ts/dx.all.d.ts index 4d0853600b5e..f7ccfc0b5388 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -4653,7 +4653,7 @@ declare module DevExpress.common.grids { */ customizeResponseTitle?: ( status: ResponseStatus, - commandNames: (keyof TCommands)[] + commandNames: (keyof TCommands | string)[] ) => string; /** * [descr:AIAssistant.customizeResponseText] @@ -4668,7 +4668,7 @@ declare module DevExpress.common.grids { */ export type AIAssistantRequestCreatingInfo = Pick< DevExpress.aiIntegration.ExecuteGridAssistantCommandParams, - 'context' | 'responseSchema' + 'context' | 'responseSchema' | 'additionalInfo' >; export type AIColumnMode = 'auto' | 'manual'; /** From df6e8ccdf40002328b15eef9997fe21f8e788868 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Thu, 14 May 2026 16:25:49 +0200 Subject: [PATCH 4/9] remove string commandName from types --- .../__tests__/grid_commands.test.ts | 12 ++++++------ .../ai_assistant/ai_assistant_controller.ts | 17 +++++++---------- .../grid_core/ai_assistant/grid_commands.ts | 12 ++++++++---- .../grids/grid_core/ai_assistant/types.ts | 7 +------ .../grids/grid_core/ai_assistant/utils.ts | 9 +++++---- packages/devextreme/js/common/grids.d.ts | 5 ++--- packages/devextreme/ts/dx.all.d.ts | 10 ++++------ 7 files changed, 33 insertions(+), 39 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/grid_commands.test.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/grid_commands.test.ts index 7e371b76287b..ba9c329b77f0 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/grid_commands.test.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/grid_commands.test.ts @@ -1046,7 +1046,7 @@ describe('GridCommands', () => { }); it('should call customizeResponseText once per executed command with correct args', async () => { - const customizeSpy = jest.fn(() => undefined); + const customizeSpy = jest.fn(() => ({})); const command = createMockCommand('test'); const gridCommands = new GridCommands(createMockComponent(), [command]); @@ -1059,8 +1059,8 @@ describe('GridCommands', () => { ); expect(customizeSpy).toHaveBeenCalledTimes(2); - expect(customizeSpy).toHaveBeenNthCalledWith(1, 'test', { key: 'val1' }); - expect(customizeSpy).toHaveBeenNthCalledWith(2, 'test', { key: 'val2' }); + expect(customizeSpy).toHaveBeenNthCalledWith(1, { name: 'test', args: { key: 'val1' } }); + expect(customizeSpy).toHaveBeenNthCalledWith(2, { name: 'test', args: { key: 'val2' } }); }); it('should replace both messages when returning { success, failure }', async () => { @@ -1129,7 +1129,7 @@ describe('GridCommands', () => { }); it('should leave default message when customizeResponseText returns undefined', async () => { - const customizeResponseText: CustomizeResponseText = () => undefined; + const customizeResponseText: CustomizeResponseText = () => ({}); const command = createMockCommand('test', { execute: (_comp, { success }) => (): Promise => Promise.resolve(success('original')), @@ -1171,12 +1171,12 @@ describe('GridCommands', () => { ); expect(customizeSpy).toHaveBeenCalledTimes(1); - expect(customizeSpy).toHaveBeenCalledWith('abort', {}); + expect(customizeSpy).toHaveBeenCalledWith({ name: 'abort', args: {} }); expect(results[1].status).toBe('aborted'); }); it('should not call customizeResponseText when no commands are executed', async () => { - const customizeSpy = jest.fn(() => undefined); + const customizeSpy = jest.fn(() => ({})); const gridCommands = new GridCommands(createMockComponent(), []); await gridCommands.executeCommands([], customizeSpy); diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts index 51851cecd89d..a9d0356b16bb 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts @@ -4,7 +4,7 @@ import type { } from '@js/common/ai-integration'; import messageLocalization from '@js/common/core/localization/message'; import { ArrayStore } from '@js/common/data'; -import type { ResponseStatus } from '@js/common/grids'; +import type { PredefinedCommandNames, ResponseStatus } from '@js/common/grids'; import Guid from '@js/core/guid'; import { captionize } from '@js/core/utils/inflector'; import { isFunction, isString } from '@js/core/utils/type'; @@ -33,10 +33,9 @@ export class AIAssistantController extends Controller { private processing = false; private getCustomizedResponseTitle( - status: MessageStatus, - commandNames: string[], + status: ResponseStatus, + commandNames: PredefinedCommandNames[], ): string { - // TODO: remove type description, it should be got from d.ts const customizeResponseTitle = this.option('aiAssistant.customizeResponseTitle'); if (!commandNames.length) { @@ -44,8 +43,7 @@ export class AIAssistantController extends Controller { } if (customizeResponseTitle && isFunction(customizeResponseTitle)) { - // TODO: add type description to d.ts - return customizeResponseTitle(status as ResponseStatus, commandNames); + return customizeResponseTitle(status, commandNames); } if (commandNames.length === 1) { @@ -58,8 +56,8 @@ export class AIAssistantController extends Controller { ].join(' and '); } - private getCommandNames(actions: ExecuteGridAssistantAction[]): string[] { - const commandNames = actions.map(({ name }) => name); + private getCommandNames(actions: ExecuteGridAssistantAction[]): PredefinedCommandNames[] { + const commandNames = actions.map(({ name }) => name as PredefinedCommandNames); const uniqueCommandNameSet = new Set(commandNames); return Array.from(uniqueCommandNameSet); @@ -91,7 +89,6 @@ export class AIAssistantController extends Controller { return Promise.reject(new Error('Received invalid commands')); } - // TODO: add type description to d.ts const customizeResponseText = this.option('aiAssistant.customizeResponseText'); return this.gridCommands?.executeCommands(response.actions, customizeResponseText) @@ -126,7 +123,7 @@ export class AIAssistantController extends Controller { private completeAIMessage( messageId: string, commands: CommandResult[], - commandNames: string[], + commandNames: PredefinedCommandNames[], ): void { const messageStatus = getMessageStatus(commands); diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/grid_commands.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/grid_commands.ts index fad7b5718d9b..7068dc7c34e2 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/grid_commands.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/grid_commands.ts @@ -1,5 +1,6 @@ import type { ExecuteGridAssistantAction } from '@js/common/ai-integration'; import messageLocalization from '@js/common/core/localization/message'; +import type { CommandInfo } from '@js/common/grids'; import { isDefined, isObject } from '@js/core/utils/type'; import { logger } from '@ts/core/utils/m_console'; import { @@ -57,11 +58,10 @@ export class GridCommands { private static applyCustomizedResponseText( result: CommandResult, - name: string, - args: Record, + command: CommandInfo, customizeResponseText?: CustomizeResponseText, ): void { - const customMessages = customizeResponseText?.({ name, args }); + const customMessages = customizeResponseText?.(command); const customMessage = customMessages?.[result.status]; if (isDefined(customMessage)) { @@ -224,7 +224,11 @@ export class GridCommands { // eslint-disable-next-line no-await-in-loop const result = await this.executeCommand(command, args, callbacks); - GridCommands.applyCustomizedResponseText(result, name, args, customizeResponseText); + GridCommands.applyCustomizedResponseText( + result, + { name, args } as CommandInfo, + customizeResponseText, + ); results.push(result); } } finally { diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts index 961ed0dbdccc..3eec26dd9406 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts @@ -61,12 +61,7 @@ export interface GridCommand< ) => CommandExecutor>; } -export interface CommandMessages { - success: string; - failure: string; -} - -export type CustomizeResponseText = AIAssistant['customizeResponseText']; +export type CustomizeResponseText = NonNullable; export type CustomizeResponseTitle = AIAssistant['customizeResponseTitle']; export type AIAssistantRequestCallbacks = RequestCallbacks & { diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/utils.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/utils.ts index acf42b829d3d..b265de1c2fc4 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/utils.ts @@ -1,7 +1,8 @@ +import type { ResponseStatus } from '@js/common/grids'; import { isObject } from '@js/core/utils/type'; import type { Message } from '@js/ui/chat'; -import { AI_ASSISTANT_AUTHOR_ID, MessageStatus } from './const'; +import { AI_ASSISTANT_AUTHOR_ID } from './const'; import type { AIMessage, CommandResult, JsonSchema } from './types'; export const isAIMessage = ( @@ -33,12 +34,12 @@ export const hasAbortedCommands = ( commands: CommandResult[] | undefined, ): boolean => !!commands?.some(({ status }) => status === 'aborted'); -export const getMessageStatus = (commands: CommandResult[]): MessageStatus => { +export const getMessageStatus = (commands: CommandResult[]): ResponseStatus => { if (hasCommandErrors(commands) || hasAbortedCommands(commands)) { - return MessageStatus.Failure; + return 'failure'; } - return MessageStatus.Success; + return 'success'; }; /** diff --git a/packages/devextreme/js/common/grids.d.ts b/packages/devextreme/js/common/grids.d.ts index 6aed45362ed5..e0054d145ff0 100644 --- a/packages/devextreme/js/common/grids.d.ts +++ b/packages/devextreme/js/common/grids.d.ts @@ -118,8 +118,7 @@ export type PredefinedCommands = { */ export type CommandInfo< TCommands extends PredefinedCommands = PredefinedCommands, -> = { [K in keyof TCommands]: { name: K; args: TCommands[K] } }[keyof TCommands] - | { name: string; args: Record }; +> = { [K in keyof TCommands]: { name: K; args: TCommands[K] } }[keyof TCommands]; /** * @docid @@ -160,7 +159,7 @@ export type AIAssistant string; + customizeResponseTitle?: (status: ResponseStatus, commandNames: (keyof TCommands)[]) => string; /** * @docid * @type_function_param1 command:CommandInfo diff --git a/packages/devextreme/ts/dx.all.d.ts b/packages/devextreme/ts/dx.all.d.ts index f7ccfc0b5388..e5d634f1a7e6 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -4653,7 +4653,7 @@ declare module DevExpress.common.grids { */ customizeResponseTitle?: ( status: ResponseStatus, - commandNames: (keyof TCommands | string)[] + commandNames: (keyof TCommands)[] ) => string; /** * [descr:AIAssistant.customizeResponseText] @@ -5247,11 +5247,9 @@ declare module DevExpress.common.grids { */ export type CommandInfo< TCommands extends PredefinedCommands = PredefinedCommands - > = - | { - [K in keyof TCommands]: { name: K; args: TCommands[K] }; - }[keyof TCommands] - | { name: string; args: Record }; + > = { + [K in keyof TCommands]: { name: K; args: TCommands[K] }; + }[keyof TCommands]; /** * [descr:DataChange] */ From a4f7cfb31b666f85d55f3d32ca5a7d9aabbf99fe Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Thu, 14 May 2026 16:29:06 +0200 Subject: [PATCH 5/9] remove string commandName from types --- .../grid_core/ai_assistant/__tests__/utils.test.ts | 12 ++++++------ .../__internal/grids/grid_core/ai_assistant/types.ts | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts index 7529fb0e96d9..3803b88c8706 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts @@ -3,7 +3,7 @@ import { } from '@jest/globals'; import type { Message } from '@js/ui/chat'; -import { AI_ASSISTANT_AUTHOR_ID, MessageStatus } from '../const'; +import { AI_ASSISTANT_AUTHOR_ID } from '../const'; import type { JsonSchema } from '../types'; import { expandTypeArraysToAnyOf, @@ -224,7 +224,7 @@ describe('getMessageStatus', () => { { status: 'success' as const, message: 'Filtered' }, ]; - expect(getMessageStatus(commands)).toBe(MessageStatus.Success); + expect(getMessageStatus(commands)).toBe('success'); }); it('should return Failure when commands contain errors', () => { @@ -233,7 +233,7 @@ describe('getMessageStatus', () => { { status: 'failure' as const, message: 'Failed to filter' }, ]; - expect(getMessageStatus(commands)).toBe(MessageStatus.Failure); + expect(getMessageStatus(commands)).toBe('failure'); }); it('should return Failure when commands contain aborted items', () => { @@ -242,7 +242,7 @@ describe('getMessageStatus', () => { { status: 'aborted' as const, message: 'Filter was aborted' }, ]; - expect(getMessageStatus(commands)).toBe(MessageStatus.Failure); + expect(getMessageStatus(commands)).toBe('failure'); }); it('should return Failure when commands contain both errors and aborted items', () => { @@ -251,11 +251,11 @@ describe('getMessageStatus', () => { { status: 'aborted' as const, message: 'Aborted' }, ]; - expect(getMessageStatus(commands)).toBe(MessageStatus.Failure); + expect(getMessageStatus(commands)).toBe('failure'); }); it('should return Success when commands array is empty', () => { - expect(getMessageStatus([])).toBe(MessageStatus.Success); + expect(getMessageStatus([])).toBe('success'); }); }); diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts index 3eec26dd9406..c5e084fd08e0 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts @@ -62,7 +62,6 @@ export interface GridCommand< } export type CustomizeResponseText = NonNullable; -export type CustomizeResponseTitle = AIAssistant['customizeResponseTitle']; export type AIAssistantRequestCallbacks = RequestCallbacks & { onAbort?: () => void; From a86182cdb0b0ca923d10072c041e24d50b273d80 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Fri, 15 May 2026 12:58:57 +0200 Subject: [PATCH 6/9] adjust names for components --- packages/devextreme/js/common/grids.d.ts | 6 +-- packages/devextreme/js/ui/data_grid.d.ts | 19 ++++--- .../devextreme/js/ui/data_grid_types.d.ts | 5 +- packages/devextreme/ts/dx.all.d.ts | 51 +++++++++---------- 4 files changed, 39 insertions(+), 42 deletions(-) diff --git a/packages/devextreme/js/common/grids.d.ts b/packages/devextreme/js/common/grids.d.ts index e0054d145ff0..24743a8ac14f 100644 --- a/packages/devextreme/js/common/grids.d.ts +++ b/packages/devextreme/js/common/grids.d.ts @@ -100,7 +100,7 @@ export type ResponseStatusTexts = { }; /** - * @docid GridBasePredefinedCommands + * @docid * @public * @namespace DevExpress.common.grids */ @@ -114,6 +114,7 @@ export type PredefinedCommands = { /** * @docid + * @public * @namespace DevExpress.common.grids */ export type CommandInfo< @@ -130,7 +131,6 @@ export type PredefinedCommandNames = keyof PredefinedCommands; /** * @docid * @public - * @type object * @namespace DevExpress.common.grids */ export type AIAssistant = { @@ -162,8 +162,6 @@ export type AIAssistant string; /** * @docid - * @type_function_param1 command:CommandInfo - * @type_function_return ResponseStatusTexts */ customizeResponseText?: (command: CommandInfo) => ResponseStatusTexts; }; diff --git a/packages/devextreme/js/ui/data_grid.d.ts b/packages/devextreme/js/ui/data_grid.d.ts index db9e66103bc3..f7f1dc093041 100644 --- a/packages/devextreme/js/ui/data_grid.d.ts +++ b/packages/devextreme/js/ui/data_grid.d.ts @@ -83,9 +83,8 @@ import { AIColumnRequestCreatingInfo, AIAssistantRequestCreatingInfo, AIAssistant as BaseAIAssistant, - PredefinedCommands as BasePredefinedCommands, - CommandInfo as BaseCommandInfo, - ResponseStatusTexts, + PredefinedCommands, + CommandInfo, } from '../common/grids'; export { @@ -1174,7 +1173,7 @@ export type DataRowTemplateData = { readonly isExpanded?: boolean; }; -type OverriddenKeys = 'columns' | 'customizeColumns' | 'dataRowTemplate' | 'editing' | 'export' | 'grouping' | 'groupPanel' | 'keyExpr' | 'masterDetail' | 'onCellClick' | 'onCellDblClick' | 'onCellHoverChanged' | 'onCellPrepared' | 'onContextMenuPreparing' | 'onEditingStart' | 'onEditorPrepared' | 'onEditorPreparing' | 'onExporting' | 'onFocusedCellChanged' | 'onFocusedCellChanging' | 'onFocusedRowChanged' | 'onFocusedRowChanging' | 'onRowClick' | 'onRowDblClick' | 'onRowPrepared' | 'remoteOperations' | 'rowTemplate' | 'scrolling' | 'selection' | 'selectionFilter' | 'sortByGroupSummaryInfo' | 'summary' | 'toolbar' | 'aiAssistant'; +type OverriddenKeys = 'aiAssistant' | 'columns' | 'customizeColumns' | 'dataRowTemplate' | 'editing' | 'export' | 'grouping' | 'groupPanel' | 'keyExpr' | 'masterDetail' | 'onCellClick' | 'onCellDblClick' | 'onCellHoverChanged' | 'onCellPrepared' | 'onContextMenuPreparing' | 'onEditingStart' | 'onEditorPrepared' | 'onEditorPreparing' | 'onExporting' | 'onFocusedCellChanged' | 'onFocusedCellChanging' | 'onFocusedRowChanged' | 'onFocusedRowChanging' | 'onRowClick' | 'onRowDblClick' | 'onRowPrepared' | 'remoteOperations' | 'rowTemplate' | 'scrolling' | 'selection' | 'selectionFilter' | 'sortByGroupSummaryInfo' | 'summary' | 'toolbar'; /** * @deprecated use Properties instead @@ -1944,9 +1943,9 @@ export type Toolbar = { /** * @docid * @public - * @inherits GridBasePredefinedCommands + * @inherits PredefinedCommands */ -export type PredefinedCommands = BasePredefinedCommands & { +export type DataGridPredefinedCommands = PredefinedCommands & { grouping: { dataField: string; groupIndex: number; @@ -1956,21 +1955,21 @@ export type PredefinedCommands = BasePredefinedCommands & { /** * @docid - * @hidden + * @public */ -export type GridCommandInfo = BaseCommandInfo; +export type DataGridCommandInfo = CommandInfo; /** * @docid * @public */ -export type PredefinedCommandNames = keyof PredefinedCommands; +export type DataGridPredefinedCommandNames = keyof DataGridPredefinedCommands; /** * @docid * @public */ -export type AIAssistant = BaseAIAssistant; +export type AIAssistant = BaseAIAssistant; /** * @namespace DevExpress.ui diff --git a/packages/devextreme/js/ui/data_grid_types.d.ts b/packages/devextreme/js/ui/data_grid_types.d.ts index 00f34a368799..987f6b881a96 100644 --- a/packages/devextreme/js/ui/data_grid_types.d.ts +++ b/packages/devextreme/js/ui/data_grid_types.d.ts @@ -142,8 +142,9 @@ export { SummaryTexts, ToolbarItem, Toolbar, - PredefinedCommands, - PredefinedCommandNames, + DataGridPredefinedCommands, + DataGridCommandInfo, + DataGridPredefinedCommandNames, AIAssistant, Editing, EditingTexts, diff --git a/packages/devextreme/ts/dx.all.d.ts b/packages/devextreme/ts/dx.all.d.ts index e5d634f1a7e6..699292b63f3d 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -5243,7 +5243,6 @@ declare module DevExpress.common.grids { export type ColumnResizeMode = 'nextColumn' | 'widget'; /** * [descr:CommandInfo] - * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. */ export type CommandInfo< TCommands extends PredefinedCommands = PredefinedCommands @@ -6508,7 +6507,7 @@ declare module DevExpress.common.grids { */ export type PredefinedCommandNames = keyof PredefinedCommands; /** - * [descr:GridBasePredefinedCommands] + * [descr:PredefinedCommands] */ export type PredefinedCommands = { sorting: { @@ -12430,7 +12429,7 @@ declare module DevExpress.ui { * [descr:AIAssistant] */ export type AIAssistant = - DevExpress.common.grids.AIAssistant; + DevExpress.common.grids.AIAssistant; /** * [descr:_ui_data_grid_AIAssistantRequestCreatingEvent] */ @@ -12848,6 +12847,11 @@ declare module DevExpress.ui { | 'groupExpand' | 'selection' | 'drag'; + /** + * [descr:DataGridCommandInfo] + */ + export type DataGridCommandInfo = + DevExpress.common.grids.CommandInfo; export type DataGridExportFormat = 'pdf' | 'xlsx'; export type DataGridPredefinedColumnButton = | 'cancel' @@ -12855,6 +12859,22 @@ declare module DevExpress.ui { | 'edit' | 'save' | 'undelete'; + /** + * [descr:DataGridPredefinedCommandNames] + */ + export type DataGridPredefinedCommandNames = + keyof DataGridPredefinedCommands; + /** + * [descr:DataGridPredefinedCommands] + */ + export type DataGridPredefinedCommands = + DevExpress.common.grids.PredefinedCommands & { + grouping: { + dataField: string; + groupIndex: number; + }; + clearGrouping: {}; + }; export type DataGridPredefinedToolbarItem = | 'addRowButton' | 'applyFilterButton' @@ -13368,12 +13388,6 @@ declare module DevExpress.ui { */ readonly rows: Array>; }; - /** - * [descr:GridCommandInfo] - * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. - */ - export type GridCommandInfo = - DevExpress.common.grids.CommandInfo; /** * [descr:GroupData] */ @@ -13539,6 +13553,7 @@ declare module DevExpress.ui { * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. */ type OverriddenKeys = + | 'aiAssistant' | 'columns' | 'customizeColumns' | 'dataRowTemplate' @@ -13571,24 +13586,8 @@ declare module DevExpress.ui { | 'selectionFilter' | 'sortByGroupSummaryInfo' | 'summary' - | 'toolbar' - | 'aiAssistant'; + | 'toolbar'; export type Paging = DevExpress.common.grids.PagingBase; - /** - * [descr:PredefinedCommandNames] - */ - export type PredefinedCommandNames = keyof PredefinedCommands; - /** - * [descr:PredefinedCommands] - */ - export type PredefinedCommands = - DevExpress.common.grids.PredefinedCommands & { - grouping: { - dataField: string; - groupIndex: number; - }; - clearGrouping: {}; - }; export type Properties = dxDataGridOptions< TRowData, TKey From a50f5e6acd04f8684b96f5368a8f3dca6b4e2918 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Fri, 15 May 2026 13:50:41 +0200 Subject: [PATCH 7/9] add types for remaining commands --- .../src/common/grids/index.ts | 5 + .../devextreme-angular/src/common/index.ts | 5 + packages/devextreme-react/src/common/grids.ts | 5 + packages/devextreme-react/src/common/index.ts | 5 + packages/devextreme-vue/src/common/grids.ts | 5 + packages/devextreme-vue/src/common/index.ts | 5 + packages/devextreme/js/common/grids.d.ts | 101 ++++++++++++++++ packages/devextreme/js/ui/data_grid.d.ts | 24 ++++ .../devextreme/js/ui/data_grid_types.d.ts | 2 + packages/devextreme/ts/dx.all.d.ts | 113 ++++++++++++++++++ 10 files changed, 270 insertions(+) diff --git a/packages/devextreme-angular/src/common/grids/index.ts b/packages/devextreme-angular/src/common/grids/index.ts index ffc8b206b7f2..cc9f2595b51f 100644 --- a/packages/devextreme-angular/src/common/grids/index.ts +++ b/packages/devextreme-angular/src/common/grids/index.ts @@ -6,6 +6,7 @@ export type { AIColumnRequestCreatingInfo, ApplyChangesMode, ApplyFilterMode, + BasicFilterExprObj, ColumnAIOptions, ColumnBase, ColumnButtonBase, @@ -21,7 +22,9 @@ export type { ColumnHeaderFilterSearchConfig, ColumnLookup, ColumnResizeMode, + CombinedFilterExprObj, CommandInfo, + CompositeKeyPair, DataChange, DataChangeInfo, DataChangeType, @@ -31,6 +34,7 @@ export type { EditingTextsBase, EnterKeyAction, EnterKeyDirection, + FilterExprObj, FilterOperation, FilterPanel, FilterPanelTexts, @@ -51,6 +55,7 @@ export type { KeyboardNavigation, KeyDownInfo, LoadPanel, + NegatedFilterExprObj, NewRowInfo, NewRowPosition, Pager, diff --git a/packages/devextreme-angular/src/common/index.ts b/packages/devextreme-angular/src/common/index.ts index 2614ad5c9144..6267639283ab 100644 --- a/packages/devextreme-angular/src/common/index.ts +++ b/packages/devextreme-angular/src/common/index.ts @@ -281,6 +281,7 @@ export namespace Grids { export type AIColumnRequestCreatingInfo = GridsModule.AIColumnRequestCreatingInfo; export type ApplyChangesMode = GridsModule.ApplyChangesMode; export type ApplyFilterMode = GridsModule.ApplyFilterMode; + export type BasicFilterExprObj = GridsModule.BasicFilterExprObj; export type ColumnAIOptions = GridsModule.ColumnAIOptions; export type ColumnBase = GridsModule.ColumnBase; export type ColumnButtonBase = GridsModule.ColumnButtonBase; @@ -296,7 +297,9 @@ export namespace Grids { export type ColumnHeaderFilterSearchConfig = GridsModule.ColumnHeaderFilterSearchConfig; export type ColumnLookup = GridsModule.ColumnLookup; export type ColumnResizeMode = GridsModule.ColumnResizeMode; + export type CombinedFilterExprObj = GridsModule.CombinedFilterExprObj; export type CommandInfo = GridsModule.CommandInfo; + export type CompositeKeyPair = GridsModule.CompositeKeyPair; export type DataChange = GridsModule.DataChange; export type DataChangeInfo = GridsModule.DataChangeInfo; export type DataChangeType = GridsModule.DataChangeType; @@ -306,6 +309,7 @@ export namespace Grids { export type EditingTextsBase = GridsModule.EditingTextsBase; export type EnterKeyAction = GridsModule.EnterKeyAction; export type EnterKeyDirection = GridsModule.EnterKeyDirection; + export type FilterExprObj = GridsModule.FilterExprObj; export type FilterOperation = GridsModule.FilterOperation; export type FilterPanel = GridsModule.FilterPanel; export type FilterPanelTexts = GridsModule.FilterPanelTexts; @@ -326,6 +330,7 @@ export namespace Grids { export type KeyboardNavigation = GridsModule.KeyboardNavigation; export type KeyDownInfo = GridsModule.KeyDownInfo; export type LoadPanel = GridsModule.LoadPanel; + export type NegatedFilterExprObj = GridsModule.NegatedFilterExprObj; export type NewRowInfo = GridsModule.NewRowInfo; export type NewRowPosition = GridsModule.NewRowPosition; export type Pager = GridsModule.Pager; diff --git a/packages/devextreme-react/src/common/grids.ts b/packages/devextreme-react/src/common/grids.ts index f7828733db6e..f1df9258b1ea 100644 --- a/packages/devextreme-react/src/common/grids.ts +++ b/packages/devextreme-react/src/common/grids.ts @@ -6,6 +6,7 @@ export type { AIColumnRequestCreatingInfo, ApplyChangesMode, ApplyFilterMode, + BasicFilterExprObj, ColumnAIOptions, ColumnBase, ColumnButtonBase, @@ -21,7 +22,9 @@ export type { ColumnHeaderFilterSearchConfig, ColumnLookup, ColumnResizeMode, + CombinedFilterExprObj, CommandInfo, + CompositeKeyPair, DataChange, DataChangeInfo, DataChangeType, @@ -31,6 +34,7 @@ export type { EditingTextsBase, EnterKeyAction, EnterKeyDirection, + FilterExprObj, FilterOperation, FilterPanel, FilterPanelTexts, @@ -51,6 +55,7 @@ export type { KeyboardNavigation, KeyDownInfo, LoadPanel, + NegatedFilterExprObj, NewRowInfo, NewRowPosition, Pager, diff --git a/packages/devextreme-react/src/common/index.ts b/packages/devextreme-react/src/common/index.ts index 8f913f434f06..cb837f030608 100644 --- a/packages/devextreme-react/src/common/index.ts +++ b/packages/devextreme-react/src/common/index.ts @@ -281,6 +281,7 @@ export namespace Grids { export type AIColumnRequestCreatingInfo = GridsModule.AIColumnRequestCreatingInfo; export type ApplyChangesMode = GridsModule.ApplyChangesMode; export type ApplyFilterMode = GridsModule.ApplyFilterMode; + export type BasicFilterExprObj = GridsModule.BasicFilterExprObj; export type ColumnAIOptions = GridsModule.ColumnAIOptions; export type ColumnBase = GridsModule.ColumnBase; export type ColumnButtonBase = GridsModule.ColumnButtonBase; @@ -296,7 +297,9 @@ export namespace Grids { export type ColumnHeaderFilterSearchConfig = GridsModule.ColumnHeaderFilterSearchConfig; export type ColumnLookup = GridsModule.ColumnLookup; export type ColumnResizeMode = GridsModule.ColumnResizeMode; + export type CombinedFilterExprObj = GridsModule.CombinedFilterExprObj; export type CommandInfo = GridsModule.CommandInfo; + export type CompositeKeyPair = GridsModule.CompositeKeyPair; export type DataChange = GridsModule.DataChange; export type DataChangeInfo = GridsModule.DataChangeInfo; export type DataChangeType = GridsModule.DataChangeType; @@ -306,6 +309,7 @@ export namespace Grids { export type EditingTextsBase = GridsModule.EditingTextsBase; export type EnterKeyAction = GridsModule.EnterKeyAction; export type EnterKeyDirection = GridsModule.EnterKeyDirection; + export type FilterExprObj = GridsModule.FilterExprObj; export type FilterOperation = GridsModule.FilterOperation; export type FilterPanel = GridsModule.FilterPanel; export type FilterPanelTexts = GridsModule.FilterPanelTexts; @@ -326,6 +330,7 @@ export namespace Grids { export type KeyboardNavigation = GridsModule.KeyboardNavigation; export type KeyDownInfo = GridsModule.KeyDownInfo; export type LoadPanel = GridsModule.LoadPanel; + export type NegatedFilterExprObj = GridsModule.NegatedFilterExprObj; export type NewRowInfo = GridsModule.NewRowInfo; export type NewRowPosition = GridsModule.NewRowPosition; export type Pager = GridsModule.Pager; diff --git a/packages/devextreme-vue/src/common/grids.ts b/packages/devextreme-vue/src/common/grids.ts index f7828733db6e..f1df9258b1ea 100644 --- a/packages/devextreme-vue/src/common/grids.ts +++ b/packages/devextreme-vue/src/common/grids.ts @@ -6,6 +6,7 @@ export type { AIColumnRequestCreatingInfo, ApplyChangesMode, ApplyFilterMode, + BasicFilterExprObj, ColumnAIOptions, ColumnBase, ColumnButtonBase, @@ -21,7 +22,9 @@ export type { ColumnHeaderFilterSearchConfig, ColumnLookup, ColumnResizeMode, + CombinedFilterExprObj, CommandInfo, + CompositeKeyPair, DataChange, DataChangeInfo, DataChangeType, @@ -31,6 +34,7 @@ export type { EditingTextsBase, EnterKeyAction, EnterKeyDirection, + FilterExprObj, FilterOperation, FilterPanel, FilterPanelTexts, @@ -51,6 +55,7 @@ export type { KeyboardNavigation, KeyDownInfo, LoadPanel, + NegatedFilterExprObj, NewRowInfo, NewRowPosition, Pager, diff --git a/packages/devextreme-vue/src/common/index.ts b/packages/devextreme-vue/src/common/index.ts index 8f913f434f06..cb837f030608 100644 --- a/packages/devextreme-vue/src/common/index.ts +++ b/packages/devextreme-vue/src/common/index.ts @@ -281,6 +281,7 @@ export namespace Grids { export type AIColumnRequestCreatingInfo = GridsModule.AIColumnRequestCreatingInfo; export type ApplyChangesMode = GridsModule.ApplyChangesMode; export type ApplyFilterMode = GridsModule.ApplyFilterMode; + export type BasicFilterExprObj = GridsModule.BasicFilterExprObj; export type ColumnAIOptions = GridsModule.ColumnAIOptions; export type ColumnBase = GridsModule.ColumnBase; export type ColumnButtonBase = GridsModule.ColumnButtonBase; @@ -296,7 +297,9 @@ export namespace Grids { export type ColumnHeaderFilterSearchConfig = GridsModule.ColumnHeaderFilterSearchConfig; export type ColumnLookup = GridsModule.ColumnLookup; export type ColumnResizeMode = GridsModule.ColumnResizeMode; + export type CombinedFilterExprObj = GridsModule.CombinedFilterExprObj; export type CommandInfo = GridsModule.CommandInfo; + export type CompositeKeyPair = GridsModule.CompositeKeyPair; export type DataChange = GridsModule.DataChange; export type DataChangeInfo = GridsModule.DataChangeInfo; export type DataChangeType = GridsModule.DataChangeType; @@ -306,6 +309,7 @@ export namespace Grids { export type EditingTextsBase = GridsModule.EditingTextsBase; export type EnterKeyAction = GridsModule.EnterKeyAction; export type EnterKeyDirection = GridsModule.EnterKeyDirection; + export type FilterExprObj = GridsModule.FilterExprObj; export type FilterOperation = GridsModule.FilterOperation; export type FilterPanel = GridsModule.FilterPanel; export type FilterPanelTexts = GridsModule.FilterPanelTexts; @@ -326,6 +330,7 @@ export namespace Grids { export type KeyboardNavigation = GridsModule.KeyboardNavigation; export type KeyDownInfo = GridsModule.KeyDownInfo; export type LoadPanel = GridsModule.LoadPanel; + export type NegatedFilterExprObj = GridsModule.NegatedFilterExprObj; export type NewRowInfo = GridsModule.NewRowInfo; export type NewRowPosition = GridsModule.NewRowPosition; export type Pager = GridsModule.Pager; diff --git a/packages/devextreme/js/common/grids.d.ts b/packages/devextreme/js/common/grids.d.ts index 24743a8ac14f..651038ff6077 100644 --- a/packages/devextreme/js/common/grids.d.ts +++ b/packages/devextreme/js/common/grids.d.ts @@ -29,6 +29,7 @@ import { import { DataSource, DataSourceOptions, + SearchOperation, } from './data'; import { DataSourceLike } from '../data/data_source'; @@ -99,12 +100,112 @@ export type ResponseStatusTexts = { failure?: string; }; +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type BasicFilterExprObj = { + type: 'basic'; + field: string; + operator: SearchOperation; + value: string | number | boolean | null; +}; + +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type CombinedFilterExprObj = { + type: 'combined'; + left: FilterExprObj; + combiner: 'and' | 'or'; + right: FilterExprObj; +}; + +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type NegatedFilterExprObj = { + type: 'negated'; + expression: FilterExprObj; +}; + +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type FilterExprObj = BasicFilterExprObj | CombinedFilterExprObj | NegatedFilterExprObj; + +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type CompositeKeyPair = { + field: string; + value: string | number; +}; + /** * @docid * @public * @namespace DevExpress.common.grids */ export type PredefinedCommands = { + columnsVisibility: { + dataField: string; + visible: boolean; + }; + columnsReorder: { + dataField: string; + visibleIndex: boolean; + }; + columnsPinning: { + dataField: string; + fixed: boolean; + fixedPosition?: 'left' | 'right'; + }; + columnsResize: { + dataField: string; + width: number | string; + }; + filterValue: { + expression: FilterExprObj | null; + }; + clearFilter: {}; + focusRowByKey: { + key: string | number | Array; + }; + focusRowByIndex: { + index: number; + }; + paging: { + enabled: boolean; + }; + pageSize: { + pageSize: number; + }; + pageIndex: { + pageIndex: number; + }; + searching: { + text: string; + }; + selectByKeys: { + keys: Array>; + preserve: boolean; + }; + selectByIndexes: { + indexes: number[] + }; + selectAll: {}; + deselectAll: {}; + clearSelection: {}; sorting: { dataField: string; sortOrder: SortOrder | 'none'; diff --git a/packages/devextreme/js/ui/data_grid.d.ts b/packages/devextreme/js/ui/data_grid.d.ts index f7f1dc093041..5c22fc1fae81 100644 --- a/packages/devextreme/js/ui/data_grid.d.ts +++ b/packages/devextreme/js/ui/data_grid.d.ts @@ -1940,6 +1940,24 @@ export type Toolbar = { disabled?: boolean; }; +/** + * @docid + * @public + */ +export type SummaryCommandTotalItem = Pick & { + column: string; + summaryType: SummaryType; +}; + +/** + * @docid + * @public + */ +export type SummaryCommandGroupItem = Pick & { + column: string; + summaryType: SummaryType; +}; + /** * @docid * @public @@ -1951,6 +1969,12 @@ export type DataGridPredefinedCommands = PredefinedCommands & { groupIndex: number; }; clearGrouping: {}; + summary: { + totalItems: Array; + groupItems: Array; + + }; + clearSummary: {}; }; /** diff --git a/packages/devextreme/js/ui/data_grid_types.d.ts b/packages/devextreme/js/ui/data_grid_types.d.ts index 987f6b881a96..a50cb5dad7f0 100644 --- a/packages/devextreme/js/ui/data_grid_types.d.ts +++ b/packages/devextreme/js/ui/data_grid_types.d.ts @@ -142,6 +142,8 @@ export { SummaryTexts, ToolbarItem, Toolbar, + SummaryCommandTotalItem, + SummaryCommandGroupItem, DataGridPredefinedCommands, DataGridCommandInfo, DataGridPredefinedCommandNames, diff --git a/packages/devextreme/ts/dx.all.d.ts b/packages/devextreme/ts/dx.all.d.ts index 699292b63f3d..abd4a55bd987 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -4699,6 +4699,15 @@ declare module DevExpress.common.grids { }; export type ApplyChangesMode = 'instantly' | 'onDemand'; export type ApplyFilterMode = 'auto' | 'onClick'; + /** + * [descr:BasicFilterExprObj] + */ + export type BasicFilterExprObj = { + type: 'basic'; + field: string; + operator: DevExpress.common.data.SearchOperation; + value: string | number | boolean | null; + }; /** * [descr:ColumnAIOptions] */ @@ -5241,6 +5250,15 @@ declare module DevExpress.common.grids { calculateCellValue?: (rowData: any) => any; }; export type ColumnResizeMode = 'nextColumn' | 'widget'; + /** + * [descr:CombinedFilterExprObj] + */ + export type CombinedFilterExprObj = { + type: 'combined'; + left: FilterExprObj; + combiner: 'and' | 'or'; + right: FilterExprObj; + }; /** * [descr:CommandInfo] */ @@ -5249,6 +5267,13 @@ declare module DevExpress.common.grids { > = { [K in keyof TCommands]: { name: K; args: TCommands[K] }; }[keyof TCommands]; + /** + * [descr:CompositeKeyPair] + */ + export type CompositeKeyPair = { + field: string; + value: string | number; + }; /** * [descr:DataChange] */ @@ -5424,6 +5449,13 @@ declare module DevExpress.common.grids { } export type EnterKeyAction = 'startEdit' | 'moveFocus'; export type EnterKeyDirection = 'none' | 'column' | 'row'; + /** + * [descr:FilterExprObj] + */ + export type FilterExprObj = + | BasicFilterExprObj + | CombinedFilterExprObj + | NegatedFilterExprObj; export type FilterOperation = | '=' | '<>' @@ -6448,6 +6480,13 @@ declare module DevExpress.common.grids { */ width?: number | string; }; + /** + * [descr:NegatedFilterExprObj] + */ + export type NegatedFilterExprObj = { + type: 'negated'; + expression: FilterExprObj; + }; /** * [descr:NewRowInfo] * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. @@ -6510,6 +6549,55 @@ declare module DevExpress.common.grids { * [descr:PredefinedCommands] */ export type PredefinedCommands = { + columnsVisibility: { + dataField: string; + visible: boolean; + }; + columnsReorder: { + dataField: string; + visibleIndex: boolean; + }; + columnsPinning: { + dataField: string; + fixed: boolean; + fixedPosition?: 'left' | 'right'; + }; + columnsResize: { + dataField: string; + width: number | string; + }; + filterValue: { + expression: FilterExprObj | null; + }; + clearFilter: {}; + focusRowByKey: { + key: string | number | Array; + }; + focusRowByIndex: { + index: number; + }; + paging: { + enabled: boolean; + }; + pageSize: { + pageSize: number; + }; + pageIndex: { + pageIndex: number; + }; + searching: { + text: string; + }; + selectByKeys: { + keys: Array>; + preserve: boolean; + }; + selectByIndexes: { + indexes: number[]; + }; + selectAll: {}; + deselectAll: {}; + clearSelection: {}; sorting: { dataField: string; sortOrder: SortOrder | 'none'; @@ -12874,6 +12962,11 @@ declare module DevExpress.ui { groupIndex: number; }; clearGrouping: {}; + summary: { + totalItems: Array; + groupItems: Array; + }; + clearSummary: {}; }; export type DataGridPredefinedToolbarItem = | 'addRowButton' @@ -14063,6 +14156,26 @@ declare module DevExpress.ui { */ totalItems?: Array | undefined; }; + /** + * [descr:SummaryCommandGroupItem] + */ + export type SummaryCommandGroupItem = Pick< + SummaryGroupItem, + 'showInColumn' | 'displayFormat' | 'showInGroupFooter' | 'alignByColumn' + > & { + column: string; + summaryType: DevExpress.common.grids.SummaryType; + }; + /** + * [descr:SummaryCommandTotalItem] + */ + export type SummaryCommandTotalItem = Pick< + SummaryTotalItem, + 'showInColumn' | 'displayFormat' + > & { + column: string; + summaryType: DevExpress.common.grids.SummaryType; + }; /** * [descr:SummaryGroupItem] */ From adaf7d315b9f24d8ec8b8ef375d208f84aca9732 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Fri, 15 May 2026 13:58:50 +0200 Subject: [PATCH 8/9] remove duplicated internal types --- .../ai_assistant_integration_controller.integration.test.ts | 2 +- .../grids/grid_core/ai_assistant/__tests__/utils.test.ts | 4 +--- .../__internal/grids/grid_core/ai_assistant/commands/utils.ts | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/ai_assistant_integration_controller.integration.test.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/ai_assistant_integration_controller.integration.test.ts index fa5ee6123755..6e75f77f5b45 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/ai_assistant_integration_controller.integration.test.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/ai_assistant_integration_controller.integration.test.ts @@ -873,7 +873,7 @@ describe('AIAssistantIntegrationController', () => { { dataField: 'name', caption: 'Name', dataType: 'string' }, ], aiIntegration, - } as unknown as Properties); + } as Properties); const controller = new AIAssistantIntegrationController(instance); controller.init(); diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts index 3803b88c8706..6f75da2cbce8 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts @@ -1,6 +1,4 @@ -import { - describe, expect, it, -} from '@jest/globals'; +import { describe, expect, it } from '@jest/globals'; import type { Message } from '@js/ui/chat'; import { AI_ASSISTANT_AUTHOR_ID } from '../const'; diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/commands/utils.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/commands/utils.ts index 54a407b3af44..cb5b7bd84923 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/commands/utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/commands/utils.ts @@ -1,10 +1,9 @@ +import type { CompositeKeyPair } from '@js/common/grids'; import { isString } from '@js/core/utils/type'; import { z } from 'zod'; type RowKey = string | number | Record; -interface CompositeKeyPair { field: string; value: string | number } - export const compositeKeyPairSchema = z.object({ field: z.string(), value: z.union([z.string(), z.number()]), From fe005d30e253f3948ad1540de8460b1d72d29003 Mon Sep 17 00:00:00 2001 From: "anna.shakhova" Date: Fri, 15 May 2026 14:46:25 +0200 Subject: [PATCH 9/9] minor fixes --- packages/devextreme-metadata/make-angular-metadata.ts | 1 - .../ai_assistant/__tests__/grid_commands.test.ts | 8 ++++---- .../js/__internal/grids/grid_core/ai_assistant/types.ts | 5 ++--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/devextreme-metadata/make-angular-metadata.ts b/packages/devextreme-metadata/make-angular-metadata.ts index 439724a65439..8c54818cd81a 100644 --- a/packages/devextreme-metadata/make-angular-metadata.ts +++ b/packages/devextreme-metadata/make-angular-metadata.ts @@ -3,7 +3,6 @@ import { cleanArtifacts, types } from './common'; import { commonSmdCollectionItems } from './common/smd'; import { NG_SMD_FILE, PATHS } from './common/paths'; import { replaceTypesMutations } from './common-smd-mutations'; -import { dxDataGridOptions } from 'devextreme/js/ui/data_grid'; cleanArtifacts(NG_SMD_FILE, 'NgSmdGenerator.cfg.json'); diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/grid_commands.test.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/grid_commands.test.ts index ba9c329b77f0..fce7f97fab3c 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/grid_commands.test.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/grid_commands.test.ts @@ -261,7 +261,7 @@ describe('GridCommands', () => { const command = createMockCommand('test'); const gridCommands = new GridCommands(createMockComponent(), [command]); - const schema = gridCommands.buildResponseSchema() as Record; + const schema = gridCommands.buildResponseSchema(); expect(schema.anyOf).toBeUndefined(); expect(schema.oneOf).toBeUndefined(); @@ -338,7 +338,7 @@ describe('GridCommands', () => { }); const gridCommands = new GridCommands(createMockComponent(), [command]); - const schema = gridCommands.buildResponseSchema() as Record; + const schema = gridCommands.buildResponseSchema(); // $defs should exist at root level expect(schema.$defs).toBeDefined(); @@ -380,7 +380,7 @@ describe('GridCommands', () => { }); const gridCommands = new GridCommands(createMockComponent(), [command]); - const schema = gridCommands.buildResponseSchema() as Record; + const schema = gridCommands.buildResponseSchema(); expect(schema.$defs).toBeUndefined(); }); @@ -1128,7 +1128,7 @@ describe('GridCommands', () => { expect(results[0].message).toBe('default success'); }); - it('should leave default message when customizeResponseText returns undefined', async () => { + it('should leave default message when customizeResponseText returns empty object', async () => { const customizeResponseText: CustomizeResponseText = () => ({}); const command = createMockCommand('test', { diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts index c5e084fd08e0..673fad51aa1f 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/types.ts @@ -1,4 +1,4 @@ -import type { RequestCallbacks } from '@js/common/ai-integration'; +import type { ExecuteGridAssistantCommandParams, RequestCallbacks } from '@js/common/ai-integration'; import type { AIAssistant } from '@js/common/grids'; import type { Message } from '@js/ui/chat'; import type { InternalGrid } from '@ts/grids/grid_core/m_types'; @@ -6,8 +6,7 @@ import type { z, ZodObject, ZodRawShape } from 'zod'; import type { MessageStatus } from './const'; -/** JSON Schema object sent to the LLM. */ -export type JsonSchema = Record; +export type JsonSchema = ExecuteGridAssistantCommandParams['responseSchema']; export interface ResponseSchemaBranch { commandName: string;