diff --git a/packages/devextreme/js/__internal/grids/data_grid/module_not_extended/toast.ts b/packages/devextreme/js/__internal/grids/data_grid/module_not_extended/toast.ts index c3360325a447..2234997a6104 100644 --- a/packages/devextreme/js/__internal/grids/data_grid/module_not_extended/toast.ts +++ b/packages/devextreme/js/__internal/grids/data_grid/module_not_extended/toast.ts @@ -1,5 +1,5 @@ -import { ToastViewController } from '@ts/grids/grid_core/toast/m_toast_controller'; -import { ToastView } from '@ts/grids/grid_core/toast/m_toast_view'; +import { ToastViewController } from '@ts/grids/grid_core/toast/toast_controller'; +import { ToastView } from '@ts/grids/grid_core/toast/toast_view'; import gridCore from '../m_core'; diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_column_cache_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_column_cache_controller.ts similarity index 100% rename from packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_column_cache_controller.ts rename to packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_column_cache_controller.ts diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_column_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_column_controller.ts similarity index 95% rename from packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_column_controller.ts rename to packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_column_controller.ts index 2328ef50f36b..297b41f63461 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_column_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_column_controller.ts @@ -14,7 +14,18 @@ import type { RowKey } from '../../m_types'; import gridCoreUtils from '../../m_utils'; import type { InternalRequestCallbacks } from '../types'; import { getAICommandColumnDefaultOptions, isAIColumnAutoMode, isPromptOption } from '../utils'; -import { AIColumnIntegrationController } from './m_ai_column_integration_controller'; +import { AIColumnIntegrationController } from './ai_column_integration_controller'; + +const getDefaultCellValue = ( + column: Column, + cellValue: string | undefined, +): string | null => { + if (cellValue === undefined) { + return column.ai?.emptyText ?? null; + } + + return column.ai?.noDataText ?? null; +}; export class AIColumnController extends Controller { private dataController!: DataController; @@ -53,14 +64,6 @@ export class AIColumnController extends Controller { public aiRequestRejected!: Callback; - private getDefaultCellValue(column: Column, cellValue: string | undefined): string | null { - if (cellValue === undefined) { - return column.ai?.emptyText ?? null; - } - - return column.ai?.noDataText ?? null; - } - private _endCustomLoadingIfNoPendingRequests(): void { if (!this.aiColumnIntegrationController.isAnyRequestAwaitingCompletion()) { this.dataController.endCustomLoading(); @@ -68,15 +71,17 @@ export class AIColumnController extends Controller { } private addAICommandColumn(): void { - const that = this; - const { dataSourceController, aiColumnIntegrationController } = this; + const { + dataSourceController, + aiColumnIntegrationController, + } = this; this.columnsController.addCommandColumn({ ...getAICommandColumnDefaultOptions(), calculateCellValue(data: RawItemData) { const key = dataSourceController.keyOf(data); const cellValue = aiColumnIntegrationController.getAIColumnText(this.name, key); - const defaultValue = that.getDefaultCellValue(this, cellValue); + const defaultValue = getDefaultCellValue(this, cellValue); // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing return cellValue || defaultValue; @@ -282,7 +287,7 @@ export class AIColumnController extends Controller { // API methods - public publicMethods() { + public publicMethods(): string[] { return [ 'abortAIColumnRequest', 'sendAIColumnRequest', diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_column_integration_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_column_integration_controller.ts similarity index 98% rename from packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_column_integration_controller.ts rename to packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_column_integration_controller.ts index a82985bf1c18..b471477b4125 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_column_integration_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_column_integration_controller.ts @@ -15,7 +15,7 @@ import { Controller } from '../../m_modules'; import type { RowKey } from '../../m_types'; import type { InternalRequestCallbacks } from '../types'; import { getDataFromRowItems, isKeyMissingInData, reduceDataCachedKeys } from '../utils'; -import { AIColumnCacheController } from './m_ai_column_cache_controller'; +import { AIColumnCacheController } from './ai_column_cache_controller'; export class AIColumnIntegrationController extends Controller { private aborts: Record void) | undefined> = { }; diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_prompt_editor_view_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_prompt_editor_view_controller.ts similarity index 88% rename from packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_prompt_editor_view_controller.ts rename to packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_prompt_editor_view_controller.ts index 917232df34c0..e15ee024f242 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/m_ai_prompt_editor_view_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_column/controllers/ai_prompt_editor_view_controller.ts @@ -1,7 +1,7 @@ import type { Column } from '@ts/grids/grid_core/columns_controller/types'; import { ViewController } from '../../m_modules'; -import type { AIPromptEditorView } from '../views/m_ai_prompt_editor_view'; +import type { AIPromptEditorView } from '../views/ai_prompt_editor_view'; export class AIPromptEditorViewController extends ViewController { private aiPromptEditorView!: AIPromptEditorView; diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_column/index.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_column/index.ts index bbb95345a557..f00a4c6f6211 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_column/index.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_column/index.ts @@ -1,4 +1,4 @@ -export { AIColumnController } from './controllers/m_ai_column_controller'; -export { AIPromptEditorViewController } from './controllers/m_ai_prompt_editor_view_controller'; -export { columnHeadersViewExtender } from './views/m_ai_column_view'; -export { AIPromptEditorView } from './views/m_ai_prompt_editor_view'; +export { AIColumnController } from './controllers/ai_column_controller'; +export { AIPromptEditorViewController } from './controllers/ai_prompt_editor_view_controller'; +export { columnHeadersViewExtender } from './views/ai_column_view'; +export { AIPromptEditorView } from './views/ai_prompt_editor_view'; diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_column_view.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_column_view.ts similarity index 89% rename from packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_column_view.ts rename to packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_column_view.ts index 54d4a0983e35..127c951109d3 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_column_view.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_column_view.ts @@ -8,9 +8,10 @@ import type { Column } from '@ts/grids/grid_core/columns_controller/types'; import type { ColumnHeadersView } from '../../column_headers/m_column_headers'; import type { ColumnsResizerViewController } from '../../columns_resizing_reordering/m_columns_resizing_reordering'; import type { ModuleType } from '../../m_types'; +import type { ColumnViewTemplate } from '../../views/types'; import { AI_COLUMN_NAME, CLASSES, ICON_NAMES } from '../const'; -import type { AIColumnController } from '../controllers/m_ai_column_controller'; -import type { AIPromptEditorViewController } from '../controllers/m_ai_prompt_editor_view_controller'; +import type { AIColumnController } from '../controllers/ai_column_controller'; +import type { AIPromptEditorViewController } from '../controllers/ai_prompt_editor_view_controller'; import { createAIHeaderContainer, createChatSparkleOutlineIcon } from '../dom'; import { isAIColumnHeader, @@ -20,7 +21,7 @@ import { export const columnHeadersViewExtender = ( Base: ModuleType, -) => class AIColumnHeadersViewExtender extends Base { +): ModuleType => class AIColumnHeadersViewExtender extends Base { private aiColumnController!: AIColumnController; private aiPromptEditorController!: AIPromptEditorViewController; @@ -29,7 +30,9 @@ export const columnHeadersViewExtender = ( private activeDropDownButtonInstance!: DropDownButton | null; - private aiColumnOptionChangedHandler!: (column: Column, optionName: string, value: unknown) => void; + private aiColumnOptionChangedHandler!: ( + column: Column, optionName: string, value: unknown, + ) => void; private getDropDownButtonItems(column: Column): Item[] { return [ @@ -75,6 +78,7 @@ export const columnHeadersViewExtender = ( // eslint-disable-next-line default-case switch (actionName) { case 'autoFill': + // eslint-disable-next-line @typescript-eslint/no-floating-promises this.aiPromptEditorController.show($container[0], column); break; case 'regenerate': @@ -138,16 +142,17 @@ export const columnHeadersViewExtender = ( super.getHeaderDefaultTemplate($container, options); } - protected _processTemplate(template, options) { + protected _processTemplate(template, options): ColumnViewTemplate { const renderingTemplate = super._processTemplate(template, options); + const { column } = options; const needToRenderHeaderDropDownButton = isAIColumnHeader(options.column, options.rowType) && isHeaderDropDownButtonVisible(options.column); if (renderingTemplate && needToRenderHeaderDropDownButton) { return { - render: (args) => { + render: (args): void => { renderingTemplate.render(args); - this.renderHeaderDropDownButton(args.model.column, $(args.container)); + this.renderHeaderDropDownButton(column, $(args.container)); }, }; } @@ -180,7 +185,9 @@ export const columnHeadersViewExtender = ( * when the cell resize is initiated. * Calling this method is necessary to fix bug T252661. */ + // eslint-disable-next-line @typescript-eslint/no-floating-promises this.activeDropDownButtonInstance?.close(); + // eslint-disable-next-line @typescript-eslint/no-floating-promises this.aiPromptEditorController.hide(); }); diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_prompt_editor_view.test.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_prompt_editor_view.test.ts similarity index 99% rename from packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_prompt_editor_view.test.ts rename to packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_prompt_editor_view.test.ts index 545a6e9038f3..930456862bf5 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_prompt_editor_view.test.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_prompt_editor_view.test.ts @@ -16,7 +16,7 @@ import { AIPromptEditorModel } from '@ts/grids/grid_core/__tests__/__mock__/mode import type { Column } from '@ts/grids/grid_core/columns_controller/types'; import { AIPromptEditor } from '../../ai_prompt_editor/ai_prompt_editor'; -import { AIPromptEditorView } from './m_ai_prompt_editor_view'; +import { AIPromptEditorView } from './ai_prompt_editor_view'; jest.mock('../../ai_prompt_editor/ai_prompt_editor', (): any => { const original = jest.requireActual('../../ai_prompt_editor/ai_prompt_editor'); diff --git a/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_prompt_editor_view.ts b/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_prompt_editor_view.ts similarity index 97% rename from packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_prompt_editor_view.ts rename to packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_prompt_editor_view.ts index 9309f4ed8b3d..d81e1ce30188 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/m_ai_prompt_editor_view.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/ai_column/views/ai_prompt_editor_view.ts @@ -8,7 +8,7 @@ import type { ColumnsController } from '../../columns_controller/m_columns_contr import { getColumnHeaderCellSelector } from '../../columns_controller/m_columns_controller_utils'; import { View } from '../../m_modules'; import { AI_COLUMN_NAME } from '../const'; -import type { AIColumnController } from '../controllers/m_ai_column_controller'; +import type { AIColumnController } from '../controllers/ai_column_controller'; import { isAIColumnAutoMode, isEditorOptions, @@ -85,7 +85,7 @@ export class AIPromptEditorView extends View { } } - private ensureAIPromptEditorVisibility() { + private ensureAIPromptEditorVisibility(): void { const aiColumns = this.aiColumnController.getAIColumns(); const aiColumnsWithVisiblePopup = aiColumns.filter((column) => column.ai?.popup?.visible); if (aiColumnsWithVisiblePopup.length > 0) { diff --git a/packages/devextreme/js/__internal/grids/grid_core/column_headers/m_column_headers.ts b/packages/devextreme/js/__internal/grids/grid_core/column_headers/m_column_headers.ts index 5dca9395492f..197b3b2f753b 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/column_headers/m_column_headers.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/column_headers/m_column_headers.ts @@ -16,6 +16,7 @@ import { CLASSES as REORDERING_CLASSES } from '../columns_resizing_reordering/co import type { HeadersKeyboardNavigationController } from '../keyboard_navigation/m_headers_keyboard_navigation'; import { registerKeyboardAction } from '../m_accessibility'; import { ColumnsView } from '../views/m_columns_view'; +import type { ColumnViewTemplate } from '../views/types'; import { CLASSES } from './const'; const HEADERS_CLASS = 'headers'; @@ -197,7 +198,7 @@ export class ColumnHeadersView extends ColumnContextMenuMixin(ColumnsView) { }; } - protected _processTemplate(template, options) { + protected _processTemplate(template, options): ColumnViewTemplate { const that = this; let resultTemplate; const { column } = options; diff --git a/packages/devextreme/js/__internal/grids/grid_core/error_handling/error_handling_view_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/error_handling/error_handling_view_controller.ts index 1fe00c811a8e..e91d834088ed 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/error_handling/error_handling_view_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/error_handling/error_handling_view_controller.ts @@ -11,7 +11,7 @@ import type { DataChange } from '@ts/grids/grid_core/data_controller/types'; import type { EditingController } from '@ts/grids/grid_core/editing/m_editing'; import modules from '@ts/grids/grid_core/m_modules'; import type { OptionChanged } from '@ts/grids/grid_core/m_types'; -import type { ToastViewController } from '@ts/grids/grid_core/toast/m_toast_controller'; +import type { ToastViewController } from '@ts/grids/grid_core/toast/toast_controller'; import type { ResizingController } from '@ts/grids/grid_core/views/m_grid_view'; import type { RowsView } from '@ts/grids/grid_core/views/m_rows_view'; diff --git a/packages/devextreme/js/__internal/grids/grid_core/filter_sync/extenders/filter_sync_data_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/filter_sync/extenders/filter_sync_data_controller.ts index 63ae555ae37d..6a7f2055129c 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/filter_sync/extenders/filter_sync_data_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/filter_sync/extenders/filter_sync_data_controller.ts @@ -1,7 +1,7 @@ import type { DeferredObj } from '@js/core/utils/deferred'; import { Deferred } from '@js/core/utils/deferred'; import type { DataController } from '@ts/grids/grid_core/data_controller/data_controller'; -import type { FilterSyncController } from '@ts/grids/grid_core/filter_sync/m_filter_sync'; +import type { FilterSyncController } from '@ts/grids/grid_core/filter_sync/filter_sync'; import type { ModuleType, OptionChanged } from '@ts/grids/grid_core/m_types'; export const filterSyncDataControllerExtender = ( diff --git a/packages/devextreme/js/__internal/grids/grid_core/filter_sync/m_filter_sync.ts b/packages/devextreme/js/__internal/grids/grid_core/filter_sync/filter_sync.ts similarity index 100% rename from packages/devextreme/js/__internal/grids/grid_core/filter_sync/m_filter_sync.ts rename to packages/devextreme/js/__internal/grids/grid_core/filter_sync/filter_sync.ts diff --git a/packages/devextreme/js/__internal/grids/grid_core/filter_sync/filter_sync_module.ts b/packages/devextreme/js/__internal/grids/grid_core/filter_sync/filter_sync_module.ts index dc3ee7dd096f..409da206157d 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/filter_sync/filter_sync_module.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/filter_sync/filter_sync_module.ts @@ -2,7 +2,7 @@ import type { InternalGridOptions } from '@ts/grids/grid_core/m_types'; import { filterSyncColumnHeadersViewExtender } from './extenders/filter_sync_column_headers_view'; import { filterSyncDataControllerExtender } from './extenders/filter_sync_data_controller'; -import { FilterSyncController } from './m_filter_sync'; +import { FilterSyncController } from './filter_sync'; export const filterSyncModule = { defaultOptions(): Pick { diff --git a/packages/devextreme/js/__internal/grids/grid_core/focus/m_focus_utils.ts b/packages/devextreme/js/__internal/grids/grid_core/focus/focus_utils.ts similarity index 50% rename from packages/devextreme/js/__internal/grids/grid_core/focus/m_focus_utils.ts rename to packages/devextreme/js/__internal/grids/grid_core/focus/focus_utils.ts index a8ca40d74d0b..c6ecaef8b274 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/focus/m_focus_utils.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/focus/focus_utils.ts @@ -1,22 +1,26 @@ import dateSerialization from '@js/core/utils/date_serialization'; -import { isDate, isFunction } from '@js/core/utils/type'; +import { isDate } from '@js/core/utils/type'; +import type { OrderingDescriptor } from '@js/data/data.types'; + +import type { RawItemData } from '../data_source_adapter/types'; +import type { SortFilterValue, SortFilterValueOptions, ValueGetter } from './types'; // TODO Vinogradov: Move it to ts and cover with unit tests. const getSortFilterValue = ( - sortInfo, - rowData, + sortInfo: OrderingDescriptor, + rowData: RawItemData, { isRemoteFiltering, dateSerializationFormat, getSelector, - }, -) => { + }: SortFilterValueOptions, +): SortFilterValue => { const { selector } = sortInfo; - const getter = isFunction(selector) + const getter: ValueGetter = typeof selector === 'function' ? selector - : getSelector(selector); + : getSelector(selector) ?? ((data): unknown => data[selector]); + const rawValue = getter(rowData); - const rawValue = getter ? getter(rowData) : rowData[selector]; const safeValue = isRemoteFiltering && isDate(rawValue) ? dateSerialization.serializeDate(rawValue, dateSerializationFormat) : rawValue; diff --git a/packages/devextreme/js/__internal/grids/grid_core/focus/m_focus.ts b/packages/devextreme/js/__internal/grids/grid_core/focus/m_focus.ts index 754449697f86..d551189b5924 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/focus/m_focus.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/focus/m_focus.ts @@ -22,7 +22,7 @@ import gridCoreUtils from '../m_utils'; import type { RowsView } from '../views/m_rows_view'; import type { VirtualScrollingDataControllerExtension } from '../virtual_scrolling/index'; import type { FocusDataSourceControllerExtension } from './extenders/focus_data_source_controller'; -import { UiGridCoreFocusUtils } from './m_focus_utils'; +import { UiGridCoreFocusUtils } from './focus_utils'; import type { FocusDataControllerExtension } from './types'; const ROW_FOCUSED_CLASS = 'dx-row-focused'; @@ -824,7 +824,7 @@ export const focusDataControllerExtender = ( private _generateOperationFilterByKey(key, rowData, useGroup) { const dateSerializationFormat = this.option('dateSerializationFormat'); const remoteOperations = this.dataSourceController.remoteOperations(); - const isRemoteFiltering = remoteOperations.filtering; + const isRemoteFiltering = Boolean(remoteOperations.filtering); const isRemoteSorting = remoteOperations.sorting; let filter = this._generateFilterByKey(key, '<'); diff --git a/packages/devextreme/js/__internal/grids/grid_core/focus/types.ts b/packages/devextreme/js/__internal/grids/grid_core/focus/types.ts index 016e6bae7052..eb316648657e 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/focus/types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/focus/types.ts @@ -1,9 +1,24 @@ import type { Callback } from '@js/core/utils/callbacks'; import type { DataChange } from '../data_controller/types'; +import type { RawItemData } from '../data_source_adapter/types'; export interface FocusDataControllerExtension { _updatePageIndexes: () => void; afterChanged: Callback<[DataChange]>; getLastChange: () => DataChange | undefined; } + +export type ValueGetter = (data: RawItemData) => unknown; + +export interface SortFilterValueOptions { + isRemoteFiltering: boolean; + dateSerializationFormat: string | undefined; + getSelector: (selector: string) => ValueGetter | undefined; +} + +export interface SortFilterValue { + getter: ValueGetter; + rawValue: unknown; + safeValue: unknown; +} diff --git a/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_column_focus_dispatcher.ts b/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/column_focus_dispatcher.ts similarity index 100% rename from packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_column_focus_dispatcher.ts rename to packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/column_focus_dispatcher.ts diff --git a/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_column_keyboard_navigation_core.ts b/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_column_keyboard_navigation_core.ts index 8d02ff6c4998..fc217d37ea71 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_column_keyboard_navigation_core.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_column_keyboard_navigation_core.ts @@ -1,8 +1,8 @@ import { isDefined, isEmptyObject } from '@js/core/utils/type'; import type { Column } from '@ts/grids/grid_core/columns_controller/types'; +import type { ColumnFocusDispatcher } from './column_focus_dispatcher'; import { Direction } from './const'; -import type { ColumnFocusDispatcher } from './m_column_focus_dispatcher'; import { KeyboardNavigationController as KeyboardNavigationControllerCore } from './m_keyboard_navigation_core'; export class ColumnKeyboardNavigationController extends KeyboardNavigationControllerCore { diff --git a/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_headers_keyboard_navigation.ts b/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_headers_keyboard_navigation.ts index 9ceff9618e61..f5ff04dee6c1 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_headers_keyboard_navigation.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/keyboard_navigation/m_headers_keyboard_navigation.ts @@ -11,8 +11,8 @@ import type { Views } from '../m_types'; import { StickyPosition } from '../sticky_columns/const'; import { GridCoreStickyColumnsDom } from '../sticky_columns/dom'; import { getColumnFixedPosition } from '../sticky_columns/utils'; +import { ColumnFocusDispatcher } from './column_focus_dispatcher'; import { Direction } from './const'; -import { ColumnFocusDispatcher } from './m_column_focus_dispatcher'; import { ColumnKeyboardNavigationController } from './m_column_keyboard_navigation_core'; export class HeadersKeyboardNavigationController extends ColumnKeyboardNavigationController { diff --git a/packages/devextreme/js/__internal/grids/grid_core/m_types.ts b/packages/devextreme/js/__internal/grids/grid_core/m_types.ts index aa81da74f7f2..d1b2fd738230 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/m_types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/m_types.ts @@ -214,12 +214,12 @@ export interface Controllers { errorHandling: import('./error_handling/error_handling_view_controller').ErrorHandlingViewController; export: import('../data_grid/export/m_export').ExportController; filter: import('./filter/filter_controller').FilterController; - filterSync: import('./filter_sync/m_filter_sync').FilterSyncController; + filterSync: import('./filter_sync/filter_sync').FilterSyncController; filterBuilder: import('./filter_builder/m_filter_builder').FilterBuilderController; focus: import('./focus/m_focus').FocusController; headerFilter: import('./header_filter/m_header_filter').HeaderFilterController; keyboardNavigation: import('./keyboard_navigation/m_keyboard_navigation').KeyboardNavigationController; - columnFocusDispatcher: import('./keyboard_navigation/m_column_focus_dispatcher').ColumnFocusDispatcher; + columnFocusDispatcher: import('./keyboard_navigation/column_focus_dispatcher').ColumnFocusDispatcher; headersKeyboardNavigation: import('./keyboard_navigation/m_headers_keyboard_navigation').HeadersKeyboardNavigationController; groupPanelKeyboardNavigation: import('../data_grid/keyboard_navigation/m_group_panel_keyboard_navigation').GroupPanelKeyboardNavigationController; resizing: import('./views/m_grid_view').ResizingController; @@ -229,9 +229,9 @@ export interface Controllers { stateStoring: import('./state_storing/state_storing_controller_core').StateStoringController; synchronizeScrolling: import('./views/m_grid_view').SynchronizeScrollingController; tablePosition: import('./columns_resizing_reordering/m_columns_resizing_reordering').TablePositionViewController; - toastViewController: import('./toast/m_toast_controller').ToastViewController; - aiColumn: import('./ai_column/controllers/m_ai_column_controller').AIColumnController; - aiPromptEditor: import('./ai_column/controllers/m_ai_prompt_editor_view_controller').AIPromptEditorViewController; + toastViewController: import('./toast/toast_controller').ToastViewController; + aiColumn: import('./ai_column/controllers/ai_column_controller').AIColumnController; + aiPromptEditor: import('./ai_column/controllers/ai_prompt_editor_view_controller').AIPromptEditorViewController; aiAssistant: import('./ai_assistant/ai_assistant_controller').AIAssistantController; aiAssistantViewController: import('./ai_assistant/ai_assistant_view_controller').AIAssistantViewController; } @@ -256,8 +256,8 @@ export interface Views { gridView: import('./views/m_grid_view').GridView; filterBuilderView: import('./filter_builder/m_filter_builder').FilterBuilderView; filterPanelView: import('./filter_panel/m_filter_panel').FilterPanelView; - toastView: import('./toast/m_toast_view').ToastView; - aiPromptEditorView: import('./ai_column/views/m_ai_prompt_editor_view').AIPromptEditorView; + toastView: import('./toast/toast_view').ToastView; + aiPromptEditorView: import('./ai_column/views/ai_prompt_editor_view').AIPromptEditorView; aiAssistantView: import('./ai_assistant/ai_assistant_view').AIAssistantView; } diff --git a/packages/devextreme/js/__internal/grids/grid_core/master_detail/m_master_detail.integration.test.ts b/packages/devextreme/js/__internal/grids/grid_core/master_detail/master_detail.integration.test.ts similarity index 92% rename from packages/devextreme/js/__internal/grids/grid_core/master_detail/m_master_detail.integration.test.ts rename to packages/devextreme/js/__internal/grids/grid_core/master_detail/master_detail.integration.test.ts index 4b681f5a204d..80fc32afd352 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/master_detail/m_master_detail.integration.test.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/master_detail/master_detail.integration.test.ts @@ -19,6 +19,7 @@ describe('GridCore master_detail', () => { describe('master detail container', () => { it('container is td element', async () => { + // eslint-disable-next-line @typescript-eslint/init-declarations let containerElement: HTMLElement | undefined; await createDataGrid({ @@ -38,6 +39,7 @@ describe('GridCore master_detail', () => { }); it('container is div element when sticky columns enabled', async () => { + // eslint-disable-next-line @typescript-eslint/init-declarations let containerElement: HTMLElement | undefined; await createDataGrid({ diff --git a/packages/devextreme/js/__internal/grids/grid_core/state_storing/state_storing_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/state_storing/state_storing_controller.ts index 6cd4058632c7..9bba7a7fcbdc 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/state_storing/state_storing_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/state_storing/state_storing_controller.ts @@ -2,7 +2,7 @@ import { equalByValue, getKeyHash } from '@js/core/utils/common'; import { isDefined } from '@js/core/utils/type'; import { extend } from '@ts/core/utils/m_extend'; import type { DataController } from '@ts/grids/grid_core/data_controller/data_controller'; -import type { FilterSyncController } from '@ts/grids/grid_core/filter_sync/m_filter_sync'; +import type { FilterSyncController } from '@ts/grids/grid_core/filter_sync/filter_sync'; import type { InternalGridOptions } from '@ts/grids/grid_core/m_types'; import type { StateStoringDataControllerExtension } from './extenders/state_storing_data_controller'; diff --git a/packages/devextreme/js/__internal/grids/grid_core/toast/m_toast_controller.ts b/packages/devextreme/js/__internal/grids/grid_core/toast/toast_controller.ts similarity index 92% rename from packages/devextreme/js/__internal/grids/grid_core/toast/m_toast_controller.ts rename to packages/devextreme/js/__internal/grids/grid_core/toast/toast_controller.ts index 1f8e85878061..7c47bcdda1df 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/toast/m_toast_controller.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/toast/toast_controller.ts @@ -1,7 +1,7 @@ import type { Properties as ToastProperties } from '@js/ui/toast'; import { ViewController } from '../m_modules'; -import type { ToastView } from './m_toast_view'; +import type { ToastView } from './toast_view'; export class ToastViewController extends ViewController { private _toastView: ToastView | null = null; diff --git a/packages/devextreme/js/__internal/grids/grid_core/toast/m_toast_view.ts b/packages/devextreme/js/__internal/grids/grid_core/toast/toast_view.ts similarity index 100% rename from packages/devextreme/js/__internal/grids/grid_core/toast/m_toast_view.ts rename to packages/devextreme/js/__internal/grids/grid_core/toast/toast_view.ts diff --git a/packages/devextreme/js/__internal/grids/grid_core/views/m_columns_view.ts b/packages/devextreme/js/__internal/grids/grid_core/views/m_columns_view.ts index 9b0e0569b24b..54748aa2ca25 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/views/m_columns_view.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/views/m_columns_view.ts @@ -40,6 +40,7 @@ import type { DataController } from '../data_controller/data_controller'; import modules from '../m_modules'; import gridCoreUtils from '../m_utils'; import { CLASSES } from './const'; +import type { ColumnViewTemplate } from './types'; const SCROLL_CONTAINER_CLASS = 'scroll-container'; const SCROLLABLE_SIMULATED_CLASS = 'scrollable-simulated'; @@ -604,7 +605,7 @@ export class ColumnsView extends ColumnStateMixin(modules.View) { } } - protected _processTemplate(template, options?) { + protected _processTemplate(template, options?): ColumnViewTemplate { const that = this; let renderingTemplate; diff --git a/packages/devextreme/js/__internal/grids/grid_core/views/types.ts b/packages/devextreme/js/__internal/grids/grid_core/views/types.ts index 485c13a4f5ed..a7688501498e 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/views/types.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/views/types.ts @@ -1,3 +1,5 @@ +import type { dxElementWrapper } from '@js/core/renderer'; +import type { DeferredObj } from '@js/core/utils/deferred'; import type { ScrollEventInfo } from '@js/ui/scroll_view/ui.scrollable'; import type dxScrollable from '@js/ui/scroll_view/ui.scrollable'; @@ -8,3 +10,16 @@ export type RowsViewScrollEvent = Partial> & { }; export type ColumnWidth = number | string | undefined; + +export interface ColumnViewTemplateOptions { + container: dxElementWrapper; + model: unknown; + deferred?: DeferredObj; + onRendered?: () => void; + change?: unknown; +} + +export interface ColumnViewTemplate { + allowRenderToDetachedContainer?: boolean; + render: (options: ColumnViewTemplateOptions) => void; +} diff --git a/packages/devextreme/js/__internal/grids/tree_list/module_not_extended/toast.ts b/packages/devextreme/js/__internal/grids/tree_list/module_not_extended/toast.ts index 628ca0c8051d..79d10e390a30 100644 --- a/packages/devextreme/js/__internal/grids/tree_list/module_not_extended/toast.ts +++ b/packages/devextreme/js/__internal/grids/tree_list/module_not_extended/toast.ts @@ -1,5 +1,5 @@ -import { ToastViewController } from '@ts/grids/grid_core/toast/m_toast_controller'; -import { ToastView } from '@ts/grids/grid_core/toast/m_toast_view'; +import { ToastViewController } from '@ts/grids/grid_core/toast/toast_controller'; +import { ToastView } from '@ts/grids/grid_core/toast/toast_view'; import gridCore from '../m_core';