Skip to content

Commit f02cd1c

Browse files
Toolbar: improve TS types (DevExpress#30382) (DevExpress#30391)
1 parent 8cafcb5 commit f02cd1c

File tree

8 files changed

+317
-195
lines changed

8 files changed

+317
-195
lines changed

packages/devextreme/js/__internal/ui/collection/collection_widget.base.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export interface DataChange<TItem = CollectionItem, TKey = number | string> {
7575
index: number;
7676
}
7777

78-
type ItemTemplate<TItem> = template | (
78+
export type ItemTemplate<TItem> = template | (
7979
(itemData: TItem, itemIndex: number, itemElement: Element) => string | dxElementWrapper
8080
);
8181
export interface ItemRenderInfo<TItem> {
@@ -1442,7 +1442,7 @@ class CollectionWidget<
14421442

14431443
_getSummaryItemsSize(
14441444
dimension: string,
1445-
items: dxElementWrapper,
1445+
items: dxElementWrapper | dxElementWrapper[],
14461446
includeMargin?: boolean,
14471447
): number {
14481448
let result = 0;

packages/devextreme/js/__internal/ui/toolbar/internal/m_toolbar.menu.list.ts

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import type { ToolbarItemComponent } from '@js/common';
2+
import type { DataSourceOptions } from '@js/common/data';
3+
import type { dxElementWrapper } from '@js/core/renderer';
24
import $ from '@js/core/renderer';
35
import { each } from '@js/core/utils/iterator';
6+
import type { DxEvent } from '@js/events';
47
import type { Item } from '@js/ui/toolbar';
8+
import type { ActionConfig } from '@ts/core/widget/component';
9+
import type { ItemRenderInfo, ItemTemplate } from '@ts/ui/collection/collection_widget.base';
510
import { ListBase } from '@ts/ui/list/m_list.base';
611

712
const TOOLBAR_MENU_ACTION_CLASS = 'dx-toolbar-menu-action';
@@ -28,11 +33,11 @@ export default class ToolbarMenuList extends ListBase {
2833
this._setMenuRole();
2934
}
3035

31-
_getSections() {
36+
_getSections(): dxElementWrapper {
3237
return this._itemContainer().children();
3338
}
3439

35-
_itemElements() {
40+
_itemElements(): dxElementWrapper {
3641
return this._getSections().children(this._itemSelector());
3742
}
3843

@@ -51,9 +56,8 @@ export default class ToolbarMenuList extends ListBase {
5156
});
5257
}
5358

54-
_renderItems(): void {
55-
// @ts-expect-error ts-error
56-
super._renderItems.apply(this, arguments);
59+
_renderItems(items: Item): void {
60+
super._renderItems(items);
5761
this._updateSections();
5862
}
5963

@@ -69,20 +73,25 @@ export default class ToolbarMenuList extends ListBase {
6973
$sections.not(':empty').eq(-1).addClass(TOOLBAR_MENU_LAST_SECTION_CLASS);
7074
}
7175

72-
_renderItem(index, item, itemContainer, $after) {
76+
_renderItem(
77+
index: number,
78+
item: Item,
79+
_$container: dxElementWrapper,
80+
$itemToReplace: dxElementWrapper,
81+
): dxElementWrapper {
7382
const $container = this[`_$${item.location ?? 'menu'}Section`];
74-
const itemElement = super._renderItem(index, item, $container, $after);
83+
const $itemElement = super._renderItem(index, item, $container, $itemToReplace);
7584

7685
const itemCssClasses = this._getItemCssClasses(item);
77-
itemElement.addClass(itemCssClasses.join(' '));
86+
$itemElement.addClass(itemCssClasses.join(' '));
7887

79-
return itemElement;
88+
return $itemElement;
8089
}
8190

8291
_getItemCssClasses(item: Item): string[] {
8392
const cssClasses: string[] = [];
8493
const actionableComponents = this._getActionableComponents();
85-
94+
// @ts-expect-error ts-error
8695
if (this._getItemTemplateName({ itemData: item })) {
8796
cssClasses.push(TOOLBAR_MENU_CUSTOM_CLASS);
8897
}
@@ -112,22 +121,26 @@ export default class ToolbarMenuList extends ListBase {
112121
return ['dxButton', 'dxButtonGroup'];
113122
}
114123

115-
_getItemTemplateName(args) {
124+
_getItemTemplateName(args: ItemRenderInfo<Item>): ItemTemplate<Item> {
116125
const template = super._getItemTemplateName(args);
117-
118126
const data = args.itemData;
119127
const menuTemplate = data?.menuItemTemplate;
120128

121-
return menuTemplate || template;
129+
return menuTemplate ?? template;
122130
}
123131

124-
_dataSourceOptions() {
132+
// eslint-disable-next-line class-methods-use-this
133+
_dataSourceOptions(): DataSourceOptions {
125134
return {
126135
paginate: false,
127136
};
128137
}
129138

130-
_itemClickHandler(e, args, config): void {
139+
_itemClickHandler(
140+
e: DxEvent,
141+
args?: Record<string, unknown>,
142+
config?: ActionConfig,
143+
): void {
131144
if ($(e.target).closest(`.${TOOLBAR_MENU_ACTION_CLASS}`).length) {
132145
super._itemClickHandler(e, args, config);
133146
}

0 commit comments

Comments
 (0)