diff --git a/packages/devextreme-angular/src/common/grids/index.ts b/packages/devextreme-angular/src/common/grids/index.ts index 03696c47816d..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,10 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommandNames, + 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..2614ad5c9144 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; @@ -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,10 @@ 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; 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/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 bf3d005ac860..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,6 +15,7 @@ import { import type { AIIntegration } from 'devextreme/common/ai-integration'; +import type { CommandInfo, ResponseStatusTexts, 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(): ((command: CommandInfo) => ResponseStatusTexts) { + return this._getOption('customizeResponseText'); + } + set customizeResponseText(value: ((command: CommandInfo) => ResponseStatusTexts)) { + 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..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,6 +15,7 @@ import { import type { AIIntegration } from 'devextreme/common/ai-integration'; +import type { CommandInfo, ResponseStatusTexts, 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(): ((command: CommandInfo) => ResponseStatusTexts) { + return this._getOption('customizeResponseText'); + } + set customizeResponseText(value: ((command: CommandInfo) => ResponseStatusTexts)) { + 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-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 2cf419615368..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,10 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommandNames, + 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..8f913f434f06 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; @@ -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,10 @@ 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; 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..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, 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,6 +244,8 @@ const AI = Object.assign(_componentAI, type IAIAssistantProps = React.PropsWithChildren<{ aiIntegration?: AIIntegration; chat?: Record; + customizeResponseText?: ((command: CommandInfo) => ResponseStatusTexts); + customizeResponseTitle?: ((status: ResponseStatus, commandNames: Array) => string); enabled?: boolean; popup?: dxPopupOptions; title?: string; @@ -2845,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 38316b42abb8..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, 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,6 +216,8 @@ const AI = Object.assign(_componentAI, type IAIAssistantProps = React.PropsWithChildren<{ aiIntegration?: AIIntegration; chat?: Record; + customizeResponseText?: ((command: CommandInfo) => ResponseStatusTexts); + 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..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,10 @@ export type { Pager, PagerPageSize, PagingBase, + PredefinedCommandNames, + 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..8f913f434f06 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; @@ -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,10 @@ 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; 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..ca6626cf5e2e 100644 --- a/packages/devextreme-vue/src/data-grid.ts +++ b/packages/devextreme-vue/src/data-grid.ts @@ -20,6 +20,9 @@ import { SearchPanel, Sorting, AIColumnMode, + CommandInfo, + ResponseStatusTexts, + ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, @@ -734,6 +737,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 +746,8 @@ const DxAIAssistantConfig = { props: { aiIntegration: Object as PropType, chat: Object as PropType>, + customizeResponseText: Function as PropType<((command: CommandInfo) => ResponseStatusTexts)>, + 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..a411b5c757d7 100644 --- a/packages/devextreme-vue/src/tree-list.ts +++ b/packages/devextreme-vue/src/tree-list.ts @@ -20,6 +20,9 @@ import { SearchPanel, Sorting, AIColumnMode, + CommandInfo, + ResponseStatusTexts, + ResponseStatus, DataChangeType, ColumnAIOptions, FilterOperation, @@ -723,6 +726,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 +735,8 @@ const DxAIAssistantConfig = { props: { aiIntegration: Object as PropType, chat: Object as PropType>, + customizeResponseText: Function as PropType<((command: CommandInfo) => ResponseStatusTexts)>, + 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/__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 72af1f8a0778..11a637eb676e 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 @@ -78,8 +78,7 @@ const createController = async ( { dataField: 'name', caption: 'Name', dataType: 'string' }, ], ...options, - // TODO: remove when d.ts is ready - } as unknown as Properties); + }); const controller = new AIAssistantIntegrationController(instance); controller.init(); 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 e10bb06864e3..f90aa5b42616 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 @@ -961,7 +961,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]); @@ -974,8 +974,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 () => { @@ -1044,7 +1044,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 }) => async () => success('original'), @@ -1086,12 +1086,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/__tests__/utils.test.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/__tests__/utils.test.ts index 7b59661006b3..68a0cfcbaba6 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 { getMessageStatus, hasAbortedCommands, @@ -183,7 +183,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', () => { @@ -192,7 +192,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', () => { @@ -201,7 +201,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', () => { @@ -210,10 +210,10 @@ 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/ai_assistant_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_assistant/ai_assistant_controller.ts index e35eb20bec68..d3fd3ad83d46 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 { 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'; @@ -19,8 +20,6 @@ import { GridCommands } from './grid_commands'; import type { AIMessage, CommandResult, - CustomizeResponseText, - CustomizeResponseTitle, GridCommand, } from './types'; import { getMessageStatus, isAIMessage } from './utils'; @@ -35,18 +34,16 @@ 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') as CustomizeResponseTitle | undefined; + const customizeResponseTitle = this.option('aiAssistant.customizeResponseTitle'); if (!commandNames.length) { return messageLocalization.format('dxDataGrid-aiAssistantErrorMessage'); } if (customizeResponseTitle && isFunction(customizeResponseTitle)) { - // TODO: add type description to d.ts return customizeResponseTitle(status, commandNames); } @@ -60,8 +57,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); @@ -93,8 +90,7 @@ 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') as CustomizeResponseText | undefined; + const customizeResponseText = this.option('aiAssistant.customizeResponseText'); return this.gridCommands?.executeCommands(response.actions, customizeResponseText) ?? Promise.reject(new Error('Grid commands not initialized')); @@ -128,7 +124,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 9dc0f0735bfc..15b6265be221 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 { @@ -55,11 +56,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)) { @@ -191,7 +191,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 4952accc565b..3be8c4e467ae 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 { 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'; @@ -49,22 +50,7 @@ export interface GridCommand< ) => CommandExecutor>; } -export interface CommandMessages { - success: string; - failure: string; -} - -// TODO: move to d.ts -export type CustomizeResponseText = ( - commandName: string, - commandArgs: Record, -) => Partial | undefined; - -// TODO: move to d.ts -export type CustomizeResponseTitle = ( - status: MessageStatus, - commandNames: string[], -) => string; +export type CustomizeResponseText = NonNullable; export type AIAssistantRequestCallbacks = RequestCallbacks & { onAbort?: () => void; 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 ccf7c7bf5a3d..8c72796ca277 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 } from './types'; export const isAIMessage = ( @@ -28,10 +29,10 @@ 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 50bb52be6689..e0054d145ff0 100644 --- a/packages/devextreme/js/common/grids.d.ts +++ b/packages/devextreme/js/common/grids.d.ts @@ -80,14 +80,60 @@ 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 GridBasePredefinedCommands + * @public + * @namespace DevExpress.common.grids + */ +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]; + +/** + * @docid + * @public + * @namespace DevExpress.common.grids + */ +export type PredefinedCommandNames = keyof PredefinedCommands; + +/** + * @docid + * @public + * @type object + * @namespace DevExpress.common.grids + */ +export type AIAssistant = { /** @docid */ aiIntegration?: AIIntegration; /** @@ -110,31 +156,25 @@ 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; /** * @docid - * @type object + * @type_function_param1 command:CommandInfo + * @type_function_return ResponseStatusTexts */ - responseSchema: Record; - /** - * @docid - * @type object - */ - additionalInfo?: Record; + customizeResponseText?: (command: CommandInfo) => ResponseStatusTexts; }; +/** + * @docid + * @hidden + * @namespace DevExpress.common.grids + */ +export type AIAssistantRequestCreatingInfo = Pick; + /** * @docid * @hidden 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 aa9da9125d22..729ca280ca8c 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 1ea95a61a974..e3b56e4caa4a 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 2072c91d8338..f502c536f965 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -4625,7 +4625,9 @@ declare module DevExpress.common.grids { /** * [descr:AIAssistant] */ - export type AIAssistant = { + export type AIAssistant< + TCommands extends PredefinedCommands = PredefinedCommands + > = { /** * [descr:AIAssistant.aiIntegration] */ @@ -4646,25 +4648,28 @@ 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] + * [descr:AIAssistant.customizeResponseTitle] */ - context: Record; - /** - * [descr:AIAssistantRequestCreatingInfo.responseSchema] - */ - responseSchema: Record; + customizeResponseTitle?: ( + status: ResponseStatus, + commandNames: (keyof TCommands)[] + ) => string; /** - * [descr:AIAssistantRequestCreatingInfo.additionalInfo] + * [descr:AIAssistant.customizeResponseText] */ - additionalInfo?: Record; + customizeResponseText?: ( + command: CommandInfo + ) => ResponseStatusTexts; }; + /** + * [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' | 'additionalInfo' + >; export type AIColumnMode = 'auto' | 'manual'; /** * [descr:AIColumnRequestCreatingInfo] @@ -5236,6 +5241,15 @@ 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]; /** * [descr:DataChange] */ @@ -6489,6 +6503,31 @@ declare module DevExpress.common.grids { */ pageSize?: number; } + /** + * [descr:PredefinedCommandNames] + */ + export type PredefinedCommandNames = keyof PredefinedCommands; + /** + * [descr:GridBasePredefinedCommands] + */ + export type 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. @@ -12387,6 +12426,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] */ @@ -13324,6 +13368,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] */ @@ -13521,8 +13571,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 @@ -14301,6 +14367,10 @@ declare module DevExpress.ui { >, DevExpress.ui.dxDataGrid.OverriddenKeys > & { + /** + * [descr:dxDataGridOptions.aiAssistant] + */ + aiAssistant?: DevExpress.ui.dxDataGrid.AIAssistant; /** * [descr:dxDataGridOptions.columns] */