Skip to content

Commit d83a2d3

Browse files
List: improve TS typing (DevExpress#30571)
Co-authored-by: EugeniyKiyashko <[email protected]>
1 parent c0a4b35 commit d83a2d3

File tree

20 files changed

+363
-253
lines changed

20 files changed

+363
-253
lines changed

packages/devextreme/js/__internal/core/widget/widget.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class Widget<
5454

5555
public _feedbackHideTimeout = 400;
5656

57-
private readonly _feedbackShowTimeout = 30;
57+
private readonly _feedbackShowTimeout: number = 30;
5858

5959
_contentReadyAction?: ((event?: Record<string, unknown>) => void) | null;
6060

@@ -497,7 +497,7 @@ class Widget<
497497
$element: dxElementWrapper,
498498
value: boolean,
499499
// eslint-disable-next-line @typescript-eslint/no-unused-vars
500-
event?: Record<string, unknown>,
500+
event?: DxEvent<PointerEvent | MouseEvent | TouchEvent>,
501501
): void {
502502
this.option('isActive', value);
503503
$element.toggleClass('dx-state-active', value);

packages/devextreme/js/__internal/ui/chat/messagelist.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,7 @@ class MessageList extends Widget<Properties> {
782782
changes.forEach((change) => {
783783
switch (change.type) {
784784
case 'update':
785-
this._updateMessageByKey(change.key, change.data as Message ?? {});
785+
this._updateMessageByKey(change.key, change.data ?? {});
786786
break;
787787
case 'insert': {
788788
const { items } = this.option();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class CollectionWidgetAsync<
1414
TItem extends ItemLike = any,
1515
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1616
TKey = any,
17-
> extends CollectionWidgetEdit<TProperties> {
17+
> extends CollectionWidgetEdit<TProperties, TItem, TKey> {
1818
_asyncTemplateItemsMap!: Record<string, DeferredObj<unknown>>;
1919

2020
_initMarkup(): void {

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

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,11 @@ import { name as contextMenuEventName } from '@js/common/core/events/contextmenu
44
import eventsEngine from '@js/common/core/events/core/events_engine';
55
import holdEvent from '@js/common/core/events/hold';
66
import pointerEvents from '@js/common/core/events/pointer';
7-
import { addNamespace, isCommandKeyPressed } from '@js/common/core/events/utils/index';
7+
import { addNamespace, isCommandKeyPressed } from '@js/common/core/events/utils';
88
import messageLocalization from '@js/common/core/localization/message';
99
import Action from '@js/core/action';
1010
import domAdapter from '@js/core/dom_adapter';
1111
import Guid from '@js/core/guid';
12-
import type {
13-
DeepPartial,
14-
} from '@js/core/index';
1512
import type { dxElementWrapper } from '@js/core/renderer';
1613
import $ from '@js/core/renderer';
1714
import { BindableTemplate } from '@js/core/templates/bindable_template';
@@ -34,6 +31,7 @@ import type {
3431
Cancelable, DxEvent, EventInfo, ItemInfo,
3532
} from '@js/events';
3633
import type { CollectionWidgetItem as CollectionWidgetItemProperties, CollectionWidgetOptions, ItemLike } from '@js/ui/collection/ui.collection_widget.base';
34+
import type { ListItemInfo } from '@js/ui/list';
3735
import { focusable } from '@js/ui/widget/selectors';
3836
import { getPublicElement } from '@ts/core/m_element';
3937
import type { ActionConfig } from '@ts/core/widget/component';
@@ -68,10 +66,12 @@ const FOCUS_FIRST = 'first';
6866

6967
export type DataChangeType = 'insert' | 'update' | 'remove';
7068

69+
export type CollectionItemInfo<TItem> = ItemInfo<TItem> | ListItemInfo<TItem>;
70+
7171
export interface DataChange<TItem = CollectionItem, TKey = number | string> {
7272
key: TKey;
7373
type: DataChangeType;
74-
data: DeepPartial<TItem>;
74+
data: TItem;
7575
index: number;
7676
}
7777

@@ -95,6 +95,9 @@ export interface PostprocessRenderItemInfo<TItem> {
9595
itemIndex: number;
9696
}
9797

98+
export type InkRippleEvent = DxEvent<PointerEvent | MouseEvent | TouchEvent>;
99+
export type Constructor<T> = new (...args: unknown[]) => T;
100+
98101
export interface CollectionWidgetBaseProperties<
99102
// eslint-disable-next-line @typescript-eslint/no-explicit-any
100103
TComponent extends CollectionWidget<any, TItem, TKey> | any,
@@ -143,11 +146,11 @@ class CollectionWidget<
143146
_inkRipple?: {
144147
showWave: (config: {
145148
element: dxElementWrapper;
146-
event: unknown;
149+
event: InkRippleEvent;
147150
}) => void;
148151
hideWave: (config: {
149152
element: dxElementWrapper;
150-
event: unknown;
153+
event: InkRippleEvent;
151154
}) => void;
152155
};
153156

@@ -1454,7 +1457,7 @@ class CollectionWidget<
14541457
return action(extend(actionArgs, this._extendActionArgs($itemElement), args));
14551458
}
14561459

1457-
_extendActionArgs($itemElement: dxElementWrapper): ItemInfo<TItem> {
1460+
_extendActionArgs($itemElement: dxElementWrapper): CollectionItemInfo<TItem> {
14581461
return {
14591462
itemElement: getPublicElement($itemElement),
14601463
itemIndex: this._itemElements().index($itemElement),
@@ -1507,10 +1510,10 @@ class CollectionWidget<
15071510
}
15081511
}
15091512

1510-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1511-
(CollectionWidget as any).include(DataHelperMixin);
1512-
15131513
// @ts-expect-error ts-error
15141514
CollectionWidget.ItemClass = CollectionWidgetItem;
15151515

1516+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1517+
(CollectionWidget as any).include(DataHelperMixin);
1518+
15161519
export default CollectionWidget;

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

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ import type { ItemLike, SelectionChangeInfo } from '@js/ui/collection/ui.collect
2222
import errors from '@js/ui/widget/ui.errors';
2323
import type { ActionConfig } from '@ts/core/widget/component';
2424
import type { OptionChanged } from '@ts/core/widget/types';
25-
import type { CollectionWidgetBaseProperties, PostprocessRenderItemInfo } from '@ts/ui/collection/collection_widget.base';
25+
import type {
26+
CollectionItemInfo,
27+
CollectionWidgetBaseProperties,
28+
PostprocessRenderItemInfo,
29+
} from '@ts/ui/collection/collection_widget.base';
2630
import BaseCollectionWidget from '@ts/ui/collection/collection_widget.base';
2731
import PlainEditStrategy from '@ts/ui/collection/collection_widget.edit.strategy.plain';
2832
import type DataController from '@ts/ui/collection/m_data_controller';
@@ -53,6 +57,8 @@ export interface CollectionWidgetEditProperties<
5357
selectionRequired?: boolean;
5458

5559
focusOnSelectedItem?: boolean;
60+
61+
grouped?: boolean;
5662
}
5763

5864
class CollectionWidget<
@@ -62,7 +68,7 @@ class CollectionWidget<
6268
TItem extends ItemLike = any,
6369
// eslint-disable-next-line @typescript-eslint/no-explicit-any
6470
TKey = any,
65-
> extends BaseCollectionWidget<TProperties> {
71+
> extends BaseCollectionWidget<TProperties, TItem, TKey> {
6672
_userOptions?: TProperties;
6773

6874
_selection!: Selection;
@@ -466,7 +472,9 @@ class CollectionWidget<
466472
normalizedSelection = this._editStrategy.itemsGetter()[0];
467473
}
468474

469-
if (this.option('grouped') && normalizedSelection?.items) {
475+
const { grouped } = this.option();
476+
477+
if (grouped && normalizedSelection?.items) {
470478
normalizedSelection.items = [normalizedSelection.items[0]];
471479
}
472480

@@ -736,7 +744,8 @@ class CollectionWidget<
736744
_deleteItemFromDS($item: dxElementWrapper): Promise<unknown> | DeferredObj<unknown> {
737745
const dataController = this._dataController;
738746
const deferred = Deferred();
739-
const disabledState = this.option('disabled');
747+
const { disabled } = this.option();
748+
740749
const dataStore = dataController.store();
741750

742751
if (!dataStore) {
@@ -762,16 +771,18 @@ class CollectionWidget<
762771
});
763772

764773
deferred.always((): void => {
765-
this.option('disabled', disabledState);
774+
this.option('disabled', disabled);
766775
});
767776

768777
return deferred;
769778
}
770779

771780
_tryRefreshLastPage(): Promise<unknown> {
772781
const deferred = Deferred();
782+
783+
const { grouped } = this.option();
773784
// @ts-expect-error mixin method
774-
if (this._isLastPage() || this.option('grouped')) {
785+
if (this._isLastPage() || grouped) {
775786
deferred.resolve();
776787
} else {
777788
this._refreshLastPage().done(() => {
@@ -871,13 +882,13 @@ class CollectionWidget<
871882

872883
_afterItemElementDeleted(
873884
$item: dxElementWrapper,
874-
deletedActionArgs: ItemInfo<TItem>,
885+
deletedActionArgs: CollectionItemInfo<TItem>,
875886
): void {
876887
const changingOption = this._dataController.getDataSource()
877888
? 'dataSource'
878889
: 'items';
879890
this._simulateOptionChange(changingOption);
880-
this._itemEventHandler($item, 'onItemDeleted', deletedActionArgs, {
891+
this._itemEventHandler($item, 'onItemDeleted', deletedActionArgs as ItemInfo<TItem>, {
881892
beforeExecute() {
882893
$item.remove();
883894
},
@@ -886,7 +897,7 @@ class CollectionWidget<
886897
this._renderEmptyMessage();
887898
}
888899

889-
deleteItem(itemElement: Element): Promise<unknown> {
900+
deleteItem(itemElement: Element): PromiseLike<unknown> {
890901
const deferred = Deferred();
891902
const $item = this._editStrategy.getItemElement(itemElement);
892903
const index = this._editStrategy.getNormalizedIndex(itemElement);

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class CollectionWidgetLiveUpdate<
5050
TItem extends ItemLike = any,
5151
// eslint-disable-next-line @typescript-eslint/no-explicit-any
5252
TKey = any,
53-
> extends CollectionWidgetAsync<TProperties> {
53+
> extends CollectionWidgetAsync<TProperties, TItem, TKey> {
5454
_itemsCache!: CachedItem<TItem>[];
5555

5656
_getDefaultOptions(): TProperties {
@@ -118,7 +118,9 @@ class CollectionWidgetLiveUpdate<
118118
items: CachedItem<TItem>[],
119119
): boolean {
120120
let result = false;
121-
if (this.option('grouped')) {
121+
const { grouped } = this.option();
122+
123+
if (grouped) {
122124
if (!changes.length) {
123125
result = true;
124126
}
@@ -147,7 +149,7 @@ class CollectionWidgetLiveUpdate<
147149
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
148150
return data[PRIVATE_KEY_FIELD];
149151
}
150-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
152+
151153
return this.keyOf(data);
152154
};
153155
const result = findChanges({

packages/devextreme/js/__internal/ui/context_menu/menu_base.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import type { dxMenuBaseItem, Item, SubmenuShowMode } from '@js/ui/menu';
1313
import { render } from '@js/ui/widget/utils.ink_ripple';
1414
import type { ActionArguments } from '@ts/core/m_action';
1515
import type { OptionChanged } from '@ts/core/widget/types';
16-
import type { PostprocessRenderItemInfo } from '@ts/ui/collection/collection_widget.base';
16+
import type { InkRippleEvent, PostprocessRenderItemInfo } from '@ts/ui/collection/collection_widget.base';
1717
import MenuItem from '@ts/ui/collection/item';
1818
import MenuBaseEditStrategy from '@ts/ui/context_menu/menu_base.edit.strategy';
1919
import type DataAdapter from '@ts/ui/hierarchical_collection/data_adapter';
@@ -307,17 +307,17 @@ class MenuBase<
307307
_toggleActiveState(
308308
$element: dxElementWrapper,
309309
value: boolean,
310-
e: Record<string, unknown>,
310+
event: InkRippleEvent,
311311
): void {
312-
super._toggleActiveState($element, value, e);
312+
super._toggleActiveState($element, value);
313313

314314
if (!this._inkRipple) {
315315
return;
316316
}
317317

318318
const config = {
319319
element: $element,
320-
event: e,
320+
event,
321321
};
322322

323323
if (value) {

0 commit comments

Comments
 (0)