Skip to content

Commit 62eba3b

Browse files
Form: improve TS typing (#30465)
1 parent f3d2097 commit 62eba3b

25 files changed

+1939
-1116
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ import { hasWindow } from '@js/core/utils/window';
1818
import license, { peekValidationPerformed } from '@ts/core/license/license_validation';
1919
import TemplateManagerModule from '@ts/core/m_template_manager';
2020
import { uiLayerInitialized } from '@ts/core/utils/m_common';
21-
22-
import { Component } from './component';
23-
import type { OptionChanged } from './types';
21+
import { Component } from '@ts/core/widget/component';
22+
import type { OptionChanged } from '@ts/core/widget/types';
2423

2524
// eslint-disable-next-line @typescript-eslint/no-explicit-any
2625
export interface Properties<TComponent = any> extends DOMComponentOptions<TComponent> {

packages/devextreme/js/__internal/ui/collection/item.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import Class from '@js/core/class';
21
import type { dxElementWrapper } from '@js/core/renderer';
32
import $ from '@js/core/renderer';
43
import { each } from '@js/core/utils/iterator';
@@ -54,8 +53,7 @@ export interface ItemExtraOption<TProperties> {
5453

5554
class CollectionItem<
5655
TProperties extends CollectionWidgetItem = CollectionWidgetItem,
57-
// @ts-expect-error dxClass inheritance issue
58-
> extends (Class.inherit({}) as new() => {}) {
56+
> {
5957
_dirty?: boolean;
6058

6159
_watchers!: Watcher[];
@@ -66,11 +64,11 @@ class CollectionItem<
6664

6765
_rawData?: TProperties;
6866

69-
ctor(
67+
constructor(
7068
$element: dxElementWrapper,
7169
options: ItemExtraOption<TProperties>,
7270
rawData: TProperties,
73-
): void {
71+
) {
7472
this._$element = $element;
7573
this._options = options;
7674
this._rawData = rawData;

packages/devextreme/js/__internal/ui/drop_down_editor/m_drop_down_editor.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { each } from '@js/core/utils/iterator';
2424
import { getDefaultAlignment } from '@js/core/utils/position';
2525
import { isDefined } from '@js/core/utils/type';
2626
import { hasWindow } from '@js/core/utils/window';
27-
import type { DxEvent } from '@js/events';
27+
import type { DxEvent, EventInfo } from '@js/events';
2828
import type { Options as Properties } from '@js/ui/drop_down_editor/ui.drop_down_editor';
2929
import type { Properties as PopupProperties } from '@js/ui/popup';
3030
import Popup from '@js/ui/popup/ui.popup';
@@ -60,6 +60,8 @@ export interface DropDownEditorProperties extends Omit<Properties,
6060
buttonsLocation?: string;
6161

6262
_onMarkupRendered?: () => void;
63+
64+
onPopupInitialized?: (e: { component: DropDownEditor; popup: Popup }) => void;
6365
}
6466

6567
function createTemplateWrapperElement(): dxElementWrapper {
@@ -87,7 +89,9 @@ class DropDownEditor<
8789

8890
_activeRenderContext?: symbol;
8991

90-
_popupInitializedAction!: (event?: Record<string, unknown>) => void;
92+
_popupInitializedAction!: (event?: EventInfo<DropDownEditor> & {
93+
popup?: Popup;
94+
}) => void;
9195

9296
_popupContentId?: string;
9397

@@ -742,11 +746,12 @@ class DropDownEditor<
742746
_popupInitializedHandler(): void {}
743747

744748
_getPopupInitializedHandler(): (e) => void {
745-
const onPopupInitialized = this.option('onPopupInitialized');
749+
const { onPopupInitialized } = this.option();
746750

747751
return (e) => {
748752
this._popupInitializedHandler();
749753
if (onPopupInitialized) {
754+
// @ts-expect-error
750755
this._popupInitializedAction({ popup: e.component });
751756
}
752757
};

packages/devextreme/js/__internal/ui/editor/editor.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ class Editor<
7676

7777
_$validationMessage?: dxElementWrapper;
7878

79+
static isEditor(instance: unknown): instance is Editor {
80+
return instance instanceof Editor;
81+
}
82+
7983
ctor(element: Element, options: TProperties): void {
8084
this.showValidationMessageTimeout = undefined;
8185
this.validationRequest = Callbacks();
@@ -490,6 +494,4 @@ class Editor<
490494
}
491495
}
492496

493-
// @ts-expect-error ts-error
494-
Editor.isEditor = (instance): boolean => instance instanceof Editor;
495497
export default Editor;

packages/devextreme/js/__internal/ui/form/components/m_button_item.ts

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,51 @@
1+
import type { dxElementWrapper } from '@js/core/renderer';
12
import $ from '@js/core/renderer';
23
import { extend } from '@js/core/utils/extend';
34
import { isDefined } from '@js/core/utils/type';
5+
import type { Properties } from '@js/ui/button';
6+
import type { HorizontalAlignment, VerticalAlignment } from '@js/ui/form';
7+
import type Button from '@ts/ui/button/wrapper';
8+
import type { TemplatesInfo } from '@ts/ui/form/m_form.layout_manager';
49

510
const FIELD_BUTTON_ITEM_CLASS = 'dx-field-button-item';
611

12+
type ButtonItemRenderInfo = TemplatesInfo & {
13+
validationGroup?: string;
14+
createComponentCallback: (
15+
$element: dxElementWrapper,
16+
options: Properties,
17+
) => Button;
18+
};
19+
20+
function convertAlignmentToTextAlign(
21+
horizontalAlignment: HorizontalAlignment | undefined,
22+
): HorizontalAlignment {
23+
return isDefined(horizontalAlignment) ? horizontalAlignment : 'right';
24+
}
25+
26+
function convertAlignmentToJustifyContent(
27+
verticalAlignment: VerticalAlignment | undefined,
28+
): string {
29+
switch (verticalAlignment) {
30+
case 'center':
31+
return 'center';
32+
case 'bottom':
33+
return 'flex-end';
34+
default:
35+
return 'flex-start';
36+
}
37+
}
38+
739
export function renderButtonItem({
840
item,
941
$parent,
1042
rootElementCssClassList,
1143
validationGroup,
1244
createComponentCallback,
13-
}) {
45+
}: ButtonItemRenderInfo): {
46+
$rootElement: dxElementWrapper;
47+
buttonInstance: Button;
48+
} {
1449
const $rootElement = $('<div>')
1550
.appendTo($parent)
1651
.addClass(rootElementCssClassList.join(' '))
@@ -27,23 +62,7 @@ export function renderButtonItem({
2762
$rootElement,
2863
buttonInstance: createComponentCallback(
2964
$button,
30-
'dxButton',
3165
extend({ validationGroup }, item.buttonOptions),
3266
),
3367
};
3468
}
35-
36-
function convertAlignmentToTextAlign(horizontalAlignment) {
37-
return isDefined(horizontalAlignment) ? horizontalAlignment : 'right';
38-
}
39-
40-
function convertAlignmentToJustifyContent(verticalAlignment) {
41-
switch (verticalAlignment) {
42-
case 'center':
43-
return 'center';
44-
case 'bottom':
45-
return 'flex-end';
46-
default:
47-
return 'flex-start';
48-
}
49-
}

packages/devextreme/js/__internal/ui/form/components/m_empty_item.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
import type { dxElementWrapper } from '@js/core/renderer';
12
import $ from '@js/core/renderer';
3+
import type { TemplatesInfo } from '@ts/ui/form/m_form.layout_manager';
24

35
export const FIELD_EMPTY_ITEM_CLASS = 'dx-field-empty-item';
46

5-
export function renderEmptyItem({ $parent, rootElementCssClassList }) {
7+
export function renderEmptyItem(info: TemplatesInfo): dxElementWrapper {
8+
const { $parent, rootElementCssClassList } = info;
9+
610
return $('<div>')
711
.addClass(FIELD_EMPTY_ITEM_CLASS)
812
.html('&nbsp;')

0 commit comments

Comments
 (0)