From 5da3fb25dffbbf08dea9273300b009251d0d0a91 Mon Sep 17 00:00:00 2001 From: Roman Semenov Date: Wed, 9 Apr 2025 13:31:38 +0400 Subject: [PATCH 1/2] refactor --- .../devextreme/js/__internal/core/di/index.ts | 2 +- .../column_chooser/controller.test.ts | 34 +++++--------- .../grid_core/data_controller/options.test.ts | 14 ++---- .../data_controller/public_methods.test.ts | 13 +++--- .../grids/new/grid_core/di.test_utils.ts | 18 ++++++++ .../js/__internal/grids/new/grid_core/di.ts | 44 +++++++++++++++++++ .../header_filter/controller.test.ts | 27 +++--------- .../items_controller/items_controller.test.ts | 26 +++-------- .../grids/new/grid_core/pager/view.test.ts | 16 +++---- .../new/grid_core/search/controller.test.ts | 11 +++-- .../grid_core/selection/controller.test.ts | 32 +++----------- .../new/grid_core/selection/options.test.ts | 32 +++----------- .../new/grid_core/toolbar/controller.test.ts | 22 ++++------ .../new/grid_core/toolbar/options.test.ts | 34 +++++++------- .../__internal/grids/new/grid_core/widget.ts | 27 +----------- 15 files changed, 146 insertions(+), 206 deletions(-) create mode 100644 packages/devextreme/js/__internal/grids/new/grid_core/di.test_utils.ts create mode 100644 packages/devextreme/js/__internal/grids/new/grid_core/di.ts diff --git a/packages/devextreme/js/__internal/core/di/index.ts b/packages/devextreme/js/__internal/core/di/index.ts index 51a22bb7227d..20f8700496f1 100644 --- a/packages/devextreme/js/__internal/core/di/index.ts +++ b/packages/devextreme/js/__internal/core/di/index.ts @@ -50,7 +50,7 @@ export class DIContext { return instance; } - throw new Error('DI item is not registered'); + throw new Error(`DI item is not registered: ${id}`); } public tryGet( diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/column_chooser/controller.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/column_chooser/controller.test.ts index e8b3fd765864..10e69cf64f7f 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/column_chooser/controller.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/column_chooser/controller.test.ts @@ -3,29 +3,19 @@ import { describe, expect, it } from '@jest/globals'; import type { SelectionChangedEvent } from '@js/ui/tree_view'; import { ColumnsController } from '../columns_controller'; +import { getContext } from '../di.test_utils'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller/options_controller.mock'; import { ColumnChooserController } from './controller'; import { expectColumnVisibility } from './test-utils'; -const createColumnChooserController = (options?: Options): { - controller: ColumnChooserController; - columnsController: ColumnsController; - optionsController: OptionsControllerMock; -} => { - const optionsController = new OptionsControllerMock(options ?? { - columnChooser: { - enabled: true, - }, - }); - const columnsController = new ColumnsController(optionsController); - - const columnChooserController = new ColumnChooserController(columnsController, optionsController); +const setup = (options: Options) => { + const context = getContext(options); return { - controller: columnChooserController, - columnsController, - optionsController, + controller: context.get(ColumnChooserController), + columnsController: context.get(ColumnsController), + optionsController: context.get(OptionsControllerMock), }; }; @@ -44,7 +34,7 @@ describe('ColumnChooser', () => { }; it('is correct', () => { - const { controller } = createColumnChooserController({ + const { controller } = setup({ columns: [ { dataField: 'A Column' }, { dataField: 'B Column' }, @@ -55,7 +45,7 @@ describe('ColumnChooser', () => { }); it('is correct when a column has showInColumnChooser=false', () => { - const { controller } = createColumnChooserController({ + const { controller } = setup({ columns: [ { dataField: 'A Column' }, { dataField: 'B Column', showInColumnChooser: false }, @@ -67,7 +57,7 @@ describe('ColumnChooser', () => { }); it('is correct when sortOrder is set', () => { - const { controller, optionsController } = createColumnChooserController({ + const { controller, optionsController } = setup({ columns: [ { dataField: 'C Column' }, { dataField: 'A Column' }, @@ -88,7 +78,7 @@ describe('ColumnChooser', () => { describe('items state', () => { it('is correct', () => { - const { controller } = createColumnChooserController({ + const { controller } = setup({ columns: [ { dataField: 'A Column' }, { dataField: 'B Column', caption: 'B Caption' }, @@ -108,7 +98,7 @@ describe('ColumnChooser', () => { }); it('updated when column option changed on select mode', () => { - const { columnsController, controller } = createColumnChooserController({ + const { columnsController, controller } = setup({ columns: ['Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5'], columnChooser: { enabled: true, @@ -155,7 +145,7 @@ describe('ColumnChooser', () => { }); it('onSelectionChanged', () => { - const { controller, columnsController } = createColumnChooserController({ + const { controller, columnsController } = setup({ columns: [ { dataField: 'A Column' }, { dataField: 'B Column' }, diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/data_controller/options.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/data_controller/options.test.ts index abbc6756a997..91f215ae81db 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/data_controller/options.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/data_controller/options.test.ts @@ -9,11 +9,9 @@ import DataSource from '@js/data/data_source'; import { logger } from '@ts/core/utils/m_console'; import ArrayStore from '@ts/data/m_array_store'; -import { ColumnsController } from '../columns_controller'; -import { FilterController } from '../filtering'; +import { getContext } from '../di.test_utils'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller/options_controller.mock'; -import { SortingController } from '../sorting_controller'; import { DataController } from './data_controller'; beforeAll(() => { @@ -24,15 +22,11 @@ afterAll(() => { }); const setup = (options: Options) => { - const optionsController = new OptionsControllerMock(options); - const filterController = new FilterController(optionsController); - const columnsController = new ColumnsController(optionsController); - const sortingController = new SortingController(optionsController, columnsController); - const dataController = new DataController(optionsController, sortingController, filterController); + const context = getContext(options); return { - optionsController, - dataController, + optionsController: context.get(OptionsControllerMock), + dataController: context.get(DataController), }; }; diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/data_controller/public_methods.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/data_controller/public_methods.test.ts index deb1e09c45ce..4dcca10d0c4d 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/data_controller/public_methods.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/data_controller/public_methods.test.ts @@ -4,20 +4,17 @@ import { } from '@jest/globals'; import ArrayStore from '@ts/data/m_array_store'; -import { ColumnsController } from '../columns_controller'; -import { FilterController } from '../filtering'; +import { getContext } from '../di.test_utils'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller/options_controller.mock'; -import { SortingController } from '../sorting_controller'; import { DataController } from './data_controller'; import { PublicMethods } from './public_methods'; const setup = (options: Options) => { - const optionsController = new OptionsControllerMock(options); - const filterController = new FilterController(optionsController); - const columnsController = new ColumnsController(optionsController); - const sortingController = new SortingController(optionsController, columnsController); - const dataController = new DataController(optionsController, sortingController, filterController); + const context = getContext(options); + + const optionsController = context.get(OptionsControllerMock); + const dataController = context.get(DataController); // @ts-expect-error const gridCore = new (PublicMethods(class { diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/di.test_utils.ts b/packages/devextreme/js/__internal/grids/new/grid_core/di.test_utils.ts new file mode 100644 index 000000000000..edc0040ae32f --- /dev/null +++ b/packages/devextreme/js/__internal/grids/new/grid_core/di.test_utils.ts @@ -0,0 +1,18 @@ +/* eslint-disable spellcheck/spell-checker */ +import { DIContext } from '@ts/core/di'; + +import { register } from './di'; +import type { Options } from './options'; +import { OptionsController } from './options_controller/options_controller'; +import { OptionsControllerMock } from './options_controller/options_controller.mock'; + +export function getContext(config: Options): DIContext { + const diContext = new DIContext(); + register(diContext); + + const options = new OptionsControllerMock(config); + diContext.registerInstance(OptionsController, options); + diContext.registerInstance(OptionsControllerMock, options); + + return diContext; +} diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/di.ts b/packages/devextreme/js/__internal/grids/new/grid_core/di.ts new file mode 100644 index 000000000000..00e58a0d69b1 --- /dev/null +++ b/packages/devextreme/js/__internal/grids/new/grid_core/di.ts @@ -0,0 +1,44 @@ +/* eslint-disable spellcheck/spell-checker */ +import type { DIContext } from '@ts/core/di/index'; +import { SearchView } from '@ts/grids/new/grid_core/search/view'; + +import * as ColumnChooserModule from './column_chooser/index'; +import * as ColumnsControllerModule from './columns_controller/index'; +import * as DataControllerModule from './data_controller/index'; +import { ErrorController } from './error_controller/error_controller'; +import { FilterPanelView } from './filtering/filter_panel/view'; +import { + HeaderFilterController, + HeaderFilterPopupView, +} from './filtering/header_filter/index'; +import * as FilterControllerModule from './filtering/index'; +import { ItemsController } from './items_controller/items_controller'; +import { PagerView } from './pager/view'; +import { SearchController } from './search/controller'; +import * as SelectionControllerModule from './selection/index'; +import * as SortingControllerModule from './sorting_controller/index'; +import { ToolbarController } from './toolbar/controller'; +import { ToolbarView } from './toolbar/view'; + +export function register(diContext: DIContext): void { + diContext.register(DataControllerModule.DataController); + diContext.register(DataControllerModule.CompatibilityDataController); + diContext.register(ItemsController); + diContext.register(ColumnsControllerModule.ColumnsController); + diContext.register(SelectionControllerModule.Controller); + diContext.register(ColumnsControllerModule.CompatibilityColumnsController); + diContext.register(SortingControllerModule.SortingController); + diContext.register(ToolbarController); + diContext.register(ToolbarView); + diContext.register(PagerView); + diContext.register(SearchController); + diContext.register(SearchView); + diContext.register(ColumnChooserModule.ColumnChooserController); + diContext.register(ColumnChooserModule.ColumnChooserView); + diContext.register(FilterControllerModule.FilterController); + diContext.register(FilterControllerModule.FilterPanelView); + diContext.register(FilterPanelView); + diContext.register(HeaderFilterController); + diContext.register(HeaderFilterPopupView); + diContext.register(ErrorController); +} diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/controller.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/controller.test.ts index bbaccdeeb383..21978749daf0 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/controller.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/filtering/header_filter/controller.test.ts @@ -2,30 +2,17 @@ import { describe, expect, it } from '@jest/globals'; import { ColumnsController } from '@ts/grids/new/grid_core/columns_controller'; import type { Column } from '@ts/grids/new/grid_core/columns_controller/types'; -import { DataController } from '@ts/grids/new/grid_core/data_controller'; -import { FilterController } from '@ts/grids/new/grid_core/filtering'; import { HeaderFilterController } from '@ts/grids/new/grid_core/filtering/header_filter/controller'; import type { HeaderFilterColumnOptions } from '@ts/grids/new/grid_core/filtering/header_filter/types'; -import type { Options } from '@ts/grids/new/grid_core/options'; -import { OptionsControllerMock } from '@ts/grids/new/grid_core/options_controller/options_controller.mock'; - -import { SortingController } from '../../sorting_controller/sorting_controller'; - -const setup = (config: Options = {}) => { - const options = new OptionsControllerMock(config); - const filterController = new FilterController(options); - const columnsController = new ColumnsController(options); - const sortingController = new SortingController(options, columnsController); - const dataController = new DataController(options, sortingController, filterController); - const headerFilterController = new HeaderFilterController( - options, - dataController, - columnsController, - ); + +import { getContext } from '../../di.test_utils'; + +const setup = (options = {}) => { + const context = getContext(options); return { - headerFilterController, - columnsController, + headerFilterController: context.get(HeaderFilterController), + columnsController: context.get(ColumnsController), }; }; diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/items_controller/items_controller.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/items_controller/items_controller.test.ts index 34c6a954dcc5..6f14de0d48da 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/items_controller/items_controller.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/items_controller/items_controller.test.ts @@ -1,33 +1,21 @@ /* eslint-disable spellcheck/spell-checker */ import { describe, expect, it } from '@jest/globals'; -import { SearchController } from '@ts/grids/new/grid_core/search'; import { ColumnsController } from '../columns_controller/columns_controller'; import { DataController } from '../data_controller'; -import { FilterController } from '../filtering'; +import { getContext } from '../di.test_utils'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller/options_controller.mock'; -import { SortingController } from '../sorting_controller'; import { ItemsController } from './items_controller'; -const setup = (config: Options = {}) => { - const options = new OptionsControllerMock(config); - const columnsController = new ColumnsController(options); - const filterController = new FilterController(options); - const sortingController = new SortingController(options, columnsController); - const searchController = new SearchController(options); - const dataController = new DataController(options, sortingController, filterController); - const itemsController = new ItemsController( - dataController, - columnsController, - searchController, - ); +const setup = (options: Options = {}) => { + const context = getContext(options); return { - options, - dataController, - columnsController, - itemsController, + options: context.get(OptionsControllerMock), + dataController: context.get(DataController), + columnsController: context.get(ColumnsController), + itemsController: context.get(ItemsController), }; }; diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/pager/view.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/pager/view.test.ts index 6b126cc23c4e..7c7bcdcaddf9 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/pager/view.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/pager/view.test.ts @@ -1,28 +1,22 @@ import { describe, expect, it } from '@jest/globals'; -import { ColumnsController } from '../columns_controller'; -import { DataController } from '../data_controller/data_controller'; -import { FilterController } from '../filtering'; +import { getContext } from '../di.test_utils'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller/options_controller.mock'; -import { SortingController } from '../sorting_controller'; import { PagerView } from './view'; const createPagerView = (options?: Options) => { - const rootElement = document.createElement('div'); - const optionsController = new OptionsControllerMock(options ?? { + const context = getContext(options ?? { dataSource: [], pager: { visible: true, }, }); - const filterController = new FilterController(optionsController); - const columnsController = new ColumnsController(optionsController); - const sortingController = new SortingController(optionsController, columnsController); - const dataController = new DataController(optionsController, sortingController, filterController); + const rootElement = document.createElement('div'); - const pager = new PagerView(dataController, optionsController); + const pager = context.get(PagerView); + const optionsController = context.get(OptionsControllerMock); pager.render(rootElement); diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/search/controller.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/search/controller.test.ts index 1b172a94e653..78ee3fc4df30 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/search/controller.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/search/controller.test.ts @@ -3,10 +3,11 @@ import { afterEach, describe, expect, it, jest, } from '@jest/globals'; -import { OptionsControllerMock } from '@ts/grids/new/card_view/options_controller.mock'; import type { Options } from '@ts/grids/new/grid_core/options'; +import { OptionsControllerMock } from '@ts/grids/new/grid_core/options_controller/options_controller.mock'; import { splitHighlightedText } from '@ts/grids/new/grid_core/search/utils'; +import { getContext } from '../di.test_utils'; import { SearchController } from './controller'; jest.mock('@ts/grids/new/grid_core/search/utils', () => ({ @@ -14,10 +15,12 @@ jest.mock('@ts/grids/new/grid_core/search/utils', () => ({ })); const setup = (config: Options = {}) => { - const options = new OptionsControllerMock(config); - const controller = new SearchController(options); + const context = getContext(config); - return { options, controller }; + return { + options: context.get(OptionsControllerMock), + controller: context.get(SearchController), + }; }; describe('SearchController', () => { diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts index fbed51d7649f..fc4f9a3900ee 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/controller.test.ts @@ -3,19 +3,14 @@ import { describe, expect, it, jest, } from '@jest/globals'; -import { ColumnsController } from '../columns_controller/columns_controller'; -import { DataController } from '../data_controller'; -import { FilterController } from '../filtering/filter_controller'; +import { getContext } from '../di.test_utils'; import { ItemsController } from '../items_controller/items_controller'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller/options_controller.mock'; -import { SearchController } from '../search/controller'; -import { SortingController } from '../sorting_controller/sorting_controller'; -import { ToolbarController } from '../toolbar/controller'; import { SelectionController } from './controller'; const setup = (config: Options = {}) => { - const optionsController = new OptionsControllerMock({ + const context = getContext({ selection: { mode: 'single', }, @@ -23,27 +18,10 @@ const setup = (config: Options = {}) => { ...config, }); - const filterController = new FilterController(optionsController); - const columnsController = new ColumnsController(optionsController); - const sortingController = new SortingController(optionsController, columnsController); - - const dataController = new DataController(optionsController, sortingController, filterController); - - const searchController = new SearchController(optionsController); - const itemsController = new ItemsController(dataController, columnsController, searchController); - const toolbarController = new ToolbarController(optionsController); - - const selectionController = new SelectionController( - optionsController, - dataController, - itemsController, - toolbarController, - ); - return { - optionsController, - selectionController, - itemsController, + optionsController: context.get(OptionsControllerMock), + selectionController: context.get(SelectionController), + itemsController: context.get(ItemsController), }; }; diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/selection/options.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/selection/options.test.ts index 2b763c0f86b7..4481e3ab77bd 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/selection/options.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/selection/options.test.ts @@ -1,46 +1,24 @@ /* eslint-disable spellcheck/spell-checker */ import { describe, expect, it } from '@jest/globals'; -import { ColumnsController } from '../columns_controller/columns_controller'; -import { DataController } from '../data_controller'; -import { FilterController } from '../filtering/filter_controller'; +import { getContext } from '../di.test_utils'; import { ItemsController } from '../items_controller/items_controller'; import type { Options } from '../options'; -import { OptionsControllerMock } from '../options_controller/options_controller.mock'; -import { SearchController } from '../search/controller'; -import { SortingController } from '../sorting_controller/sorting_controller'; import { ToolbarController } from '../toolbar/controller'; import { SelectionController } from './controller'; const setup = (config: Options = {}) => { - const optionsController = new OptionsControllerMock({ + const context = getContext({ selection: { mode: 'single', }, ...config, }); - const filterController = new FilterController(optionsController); - const columnsController = new ColumnsController(optionsController); - const sortingController = new SortingController(optionsController, columnsController); - - const dataController = new DataController(optionsController, sortingController, filterController); - - const searchController = new SearchController(optionsController); - const itemsController = new ItemsController(dataController, columnsController, searchController); - const toolbarController = new ToolbarController(optionsController); - - const selectionController = new SelectionController( - optionsController, - dataController, - itemsController, - toolbarController, - ); - return { - selectionController, - itemsController, - toolbarController, + selectionController: context.get(SelectionController), + itemsController: context.get(ItemsController), + toolbarController: context.get(ToolbarController), }; }; diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/toolbar/controller.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/toolbar/controller.test.ts index 046fbdfcd269..b2a35115b3d8 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/toolbar/controller.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/toolbar/controller.test.ts @@ -3,25 +3,21 @@ import { describe, expect, it } from '@jest/globals'; import { state } from '@ts/core/reactive'; +import { getContext } from '../di.test_utils'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller/options_controller.mock'; import { ToolbarController } from './controller'; -const createToolbarController = (options?: Options): { - toolbarController: ToolbarController; - optionsController: OptionsControllerMock; -} => { - const optionsController = new OptionsControllerMock(options ?? { +const setup = (config?: Options) => { + const context = getContext(config ?? { toolbar: { visible: true, }, }); - const toolbarController = new ToolbarController(optionsController); - return { - toolbarController, - optionsController, + toolbarController: context.get(ToolbarController), + optionsController: context.get(OptionsControllerMock), }; }; @@ -29,7 +25,7 @@ describe('ToolbarController', () => { describe('items', () => { describe('when user items are specified', () => { it('should contain processed toolbar items', () => { - const { toolbarController } = createToolbarController({ + const { toolbarController } = setup({ toolbar: { items: [{ location: 'before' }], }, @@ -41,7 +37,7 @@ describe('ToolbarController', () => { describe('when default items and user items are specified', () => { it('should contain processed toolbar items', () => { - const { toolbarController } = createToolbarController({ + const { toolbarController } = setup({ toolbar: { items: ['searchPanel', { location: 'before' }], }, @@ -59,7 +55,7 @@ describe('ToolbarController', () => { describe('addDefaultItem', () => { it('should add new default item to items', () => { - const { toolbarController } = createToolbarController(); + const { toolbarController } = setup(); toolbarController.addDefaultItem({ name: 'searchPanel', location: 'after' }); @@ -69,7 +65,7 @@ describe('ToolbarController', () => { }); it('item should toggle default item when needUpdate changes', () => { - const { toolbarController } = createToolbarController(); + const { toolbarController } = setup(); const needRender = state(true); toolbarController.addDefaultItem({ name: 'searchPanel', location: 'after' }, needRender); diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/toolbar/options.test.ts b/packages/devextreme/js/__internal/grids/new/grid_core/toolbar/options.test.ts index 060c8769fb57..023a13bb0f04 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/toolbar/options.test.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/toolbar/options.test.ts @@ -1,25 +1,21 @@ -/* eslint-disable spellcheck/spell-checker */ -/* eslint-disable @typescript-eslint/dot-notation */ import { describe, expect, it } from '@jest/globals'; +import { getContext } from '../di.test_utils'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller/options_controller.mock'; -import { ToolbarController } from './controller'; import { ToolbarView } from './view'; -const createToolbarView = (options?: Options): { - rootElement: HTMLElement; - optionsController: OptionsControllerMock; -} => { - const rootElement = document.createElement('div'); - const optionsController = new OptionsControllerMock(options ?? { +const setup = (config?: Options) => { + const context = getContext(config ?? { toolbar: { visible: true, }, }); - const toolbarController = new ToolbarController(optionsController); - const toolbar = new ToolbarView(toolbarController, optionsController); + const rootElement = document.createElement('div'); + const optionsController = context.get(OptionsControllerMock); + + const toolbar = context.get(ToolbarView); toolbar.render(rootElement); @@ -33,7 +29,7 @@ describe('Options', () => { describe('visilbe', () => { describe('when it is \'true\'', () => { it('Toolbar should be visible', () => { - const { rootElement } = createToolbarView({ + const { rootElement } = setup({ toolbar: { visible: true, }, @@ -45,7 +41,7 @@ describe('Options', () => { describe('when it is \'false\'', () => { it('Toolbar should be hidden', () => { - const { rootElement } = createToolbarView({ + const { rootElement } = setup({ toolbar: { visible: false, }, @@ -57,7 +53,7 @@ describe('Options', () => { describe('when changing it to \'false\' at runtime', () => { it('Toolbar should be hidden', () => { - const { rootElement, optionsController } = createToolbarView({ + const { rootElement, optionsController } = setup({ toolbar: { visible: true, }, @@ -71,7 +67,7 @@ describe('Options', () => { describe('when changing it to \'true\' at runtime', () => { it('Toolbar should be visible', () => { - const { rootElement, optionsController } = createToolbarView({ + const { rootElement, optionsController } = setup({ toolbar: { visible: false, }, @@ -87,7 +83,7 @@ describe('Options', () => { describe('items', () => { describe('when these are not set', () => { it('Toolbar should be hidden', () => { - const { rootElement } = createToolbarView({ + const { rootElement } = setup({ toolbar: { items: [], }, @@ -99,7 +95,7 @@ describe('Options', () => { describe('when these are set', () => { it('Toolbar should be visible', () => { - const { rootElement } = createToolbarView({ + const { rootElement } = setup({ toolbar: { items: [{ location: 'before', @@ -125,7 +121,7 @@ describe('Options', () => { describe('disabled', () => { describe('when it is \'true\'', () => { it('Toolbar should be disabled', () => { - const { rootElement } = createToolbarView({ + const { rootElement } = setup({ toolbar: { visible: true, disabled: true, @@ -138,7 +134,7 @@ describe('Options', () => { describe('when it is \'false\'', () => { it('Toolbar should not be disabled', () => { - const { rootElement } = createToolbarView({ + const { rootElement } = setup({ toolbar: { visible: true, disabled: false, diff --git a/packages/devextreme/js/__internal/grids/new/grid_core/widget.ts b/packages/devextreme/js/__internal/grids/new/grid_core/widget.ts index cf168d3afb54..e47d18411911 100644 --- a/packages/devextreme/js/__internal/grids/new/grid_core/widget.ts +++ b/packages/devextreme/js/__internal/grids/new/grid_core/widget.ts @@ -13,12 +13,8 @@ import * as ColumnChooserModule from './column_chooser/index'; import { CompatibilityColumnsController } from './columns_controller/compatibility'; import * as ColumnsControllerModule from './columns_controller/index'; import * as DataControllerModule from './data_controller/index'; +import * as di from './di'; import { ErrorController } from './error_controller/error_controller'; -import { FilterPanelView } from './filtering/filter_panel/view'; -import { - HeaderFilterController, - HeaderFilterPopupView, -} from './filtering/header_filter/index'; import * as FilterControllerModule from './filtering/index'; import { ItemsController } from './items_controller/items_controller'; import { MainView } from './main_view'; @@ -71,26 +67,7 @@ export class GridCoreNewBase< protected _registerDIContext(): void { this.diContext = new DIContext(); - this.diContext.register(DataControllerModule.DataController); - this.diContext.register(DataControllerModule.CompatibilityDataController); - this.diContext.register(ItemsController); - this.diContext.register(ColumnsControllerModule.ColumnsController); - this.diContext.register(SelectionControllerModule.Controller); - this.diContext.register(ColumnsControllerModule.CompatibilityColumnsController); - this.diContext.register(SortingControllerModule.SortingController); - this.diContext.register(ToolbarController); - this.diContext.register(ToolbarView); - this.diContext.register(PagerView); - this.diContext.register(SearchController); - this.diContext.register(SearchView); - this.diContext.register(ColumnChooserModule.ColumnChooserController); - this.diContext.register(ColumnChooserModule.ColumnChooserView); - this.diContext.register(FilterControllerModule.FilterController); - this.diContext.register(FilterControllerModule.FilterPanelView); - this.diContext.register(FilterPanelView); - this.diContext.register(HeaderFilterController); - this.diContext.register(HeaderFilterPopupView); - this.diContext.register(ErrorController); + di.register(this.diContext); } protected _initWidgetMock() { From eced2e42ef73a0d6696f94653202973d969303a7 Mon Sep 17 00:00:00 2001 From: Roman Semenov Date: Wed, 9 Apr 2025 14:13:33 +0400 Subject: [PATCH 2/2] review fix: process cardview tests --- .../grids/new/card_view/di.test_utils.ts | 20 +++++++++++++ .../js/__internal/grids/new/card_view/di.ts | 13 ++++++++ .../card_view/header_panel/options.test.ts | 30 ++++--------------- .../__internal/grids/new/card_view/widget.ts | 4 +-- 4 files changed, 41 insertions(+), 26 deletions(-) create mode 100644 packages/devextreme/js/__internal/grids/new/card_view/di.test_utils.ts create mode 100644 packages/devextreme/js/__internal/grids/new/card_view/di.ts diff --git a/packages/devextreme/js/__internal/grids/new/card_view/di.test_utils.ts b/packages/devextreme/js/__internal/grids/new/card_view/di.test_utils.ts new file mode 100644 index 000000000000..7c23e989bbe7 --- /dev/null +++ b/packages/devextreme/js/__internal/grids/new/card_view/di.test_utils.ts @@ -0,0 +1,20 @@ +/* eslint-disable spellcheck/spell-checker */ +import { DIContext } from '@ts/core/di'; +import { OptionsController as GridCoreOptionsController } from '@ts/grids/new/grid_core/options_controller/options_controller'; + +import { register } from './di'; +import type { Options } from './options'; +import { OptionsController } from './options_controller'; +import { OptionsControllerMock } from './options_controller.mock'; + +export function getContext(config: Options): DIContext { + const diContext = new DIContext(); + register(diContext); + + const options = new OptionsControllerMock(config); + diContext.registerInstance(OptionsController, options); + diContext.registerInstance(OptionsControllerMock, options); + diContext.registerInstance(GridCoreOptionsController, options); + + return diContext; +} diff --git a/packages/devextreme/js/__internal/grids/new/card_view/di.ts b/packages/devextreme/js/__internal/grids/new/card_view/di.ts new file mode 100644 index 000000000000..9556947ddc7e --- /dev/null +++ b/packages/devextreme/js/__internal/grids/new/card_view/di.ts @@ -0,0 +1,13 @@ +/* eslint-disable spellcheck/spell-checker */ +import type { DIContext } from '@ts/core/di'; + +import { register as gridCoreDIRegister } from '../grid_core/di'; +import * as ContentViewModule from './content_view/index'; +import { HeaderPanelView } from './header_panel/view'; + +export function register(diContext: DIContext): void { + gridCoreDIRegister(diContext); + + diContext.register(ContentViewModule.View); + diContext.register(HeaderPanelView); +} diff --git a/packages/devextreme/js/__internal/grids/new/card_view/header_panel/options.test.ts b/packages/devextreme/js/__internal/grids/new/card_view/header_panel/options.test.ts index b44acbcf95e8..99af3fcfa6e4 100644 --- a/packages/devextreme/js/__internal/grids/new/card_view/header_panel/options.test.ts +++ b/packages/devextreme/js/__internal/grids/new/card_view/header_panel/options.test.ts @@ -2,46 +2,28 @@ import { describe, expect, it, jest, } from '@jest/globals'; -import { HeaderFilterController } from '@ts/grids/new/grid_core/filtering/header_filter/index'; import { rerender } from 'inferno'; -import { ColumnsController } from '../../grid_core/columns_controller'; -import { DataController } from '../../grid_core/data_controller'; -import { FilterController } from '../../grid_core/filtering'; import { Sortable } from '../../grid_core/inferno_wrappers/sortable'; -import { SortingController } from '../../grid_core/sorting_controller'; +import { getContext } from '../di.test_utils'; import type { Options } from '../options'; import { OptionsControllerMock } from '../options_controller.mock'; import { HeaderPanelView } from './view'; -const setup = (options: Options) => { +const setup = (config: Options) => { const rootElement = document.createElement('div'); rootElement.classList.add('test-container'); - const optionsController = new OptionsControllerMock(options); - const filterController = new FilterController(optionsController); - const columnsController = new ColumnsController(optionsController); - const sortingController = new SortingController(optionsController, columnsController); - const dataController = new DataController(optionsController, sortingController, filterController); - const headerFilterController = new HeaderFilterController( - optionsController, - dataController, - columnsController, - ); - const headerPanelView = new HeaderPanelView( - sortingController, - columnsController, - optionsController, - headerFilterController, - ); + const context = getContext(config); + + const optionsController = context.get(OptionsControllerMock); + const headerPanelView = context.get(HeaderPanelView); headerPanelView.render(rootElement); rerender(); return { optionsController, - dataController, - columnsController, headerPanelView, rootElement, }; diff --git a/packages/devextreme/js/__internal/grids/new/card_view/widget.ts b/packages/devextreme/js/__internal/grids/new/card_view/widget.ts index 21e4ebbc7258..912da32def9f 100644 --- a/packages/devextreme/js/__internal/grids/new/card_view/widget.ts +++ b/packages/devextreme/js/__internal/grids/new/card_view/widget.ts @@ -8,6 +8,7 @@ import { OptionsController as OptionsControllerBase } from '@ts/grids/new/grid_c import { GridCoreNew } from '@ts/grids/new/grid_core/widget'; import * as ContentViewModule from './content_view/index'; +import * as di from './di'; import { HeaderPanelView } from './header_panel/view'; import { MainView } from './main_view'; import { defaultOptions } from './options'; @@ -21,8 +22,7 @@ export class CardViewBase extends GridCoreNew { protected _registerDIContext(): void { super._registerDIContext(); - this.diContext.register(ContentViewModule.View); - this.diContext.register(HeaderPanelView); + di.register(this.diContext); this.diContext.register(MainViewBase, MainView); const optionsController = new OptionsController(this);