Skip to content

Commit eb9d351

Browse files
marker-daomarker dao ®
andauthored
LoadPanel: Improve typing (#30765)
Co-authored-by: marker dao ® <[email protected]>
1 parent 815cdf4 commit eb9d351

File tree

1 file changed

+28
-19
lines changed

1 file changed

+28
-19
lines changed

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

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import type { DefaultOptionsRule } from '@js/core/options/utils';
44
import type { dxElementWrapper } from '@js/core/renderer';
55
import $ from '@js/core/renderer';
66
import { noop } from '@js/core/utils/common';
7+
import type { DeferredObj } from '@js/core/utils/deferred';
78
import { Deferred } from '@js/core/utils/deferred';
89
import LoadIndicator from '@js/ui/load_indicator';
910
import type { Properties } from '@js/ui/load_panel';
10-
import { isFluent, isMaterial } from '@js/ui/themes';
11+
import { current, isFluent, isMaterial } from '@js/ui/themes';
1112
import type { OptionChanged } from '@ts/core/widget/types';
1213
import type { SupportedKeys } from '@ts/core/widget/widget';
1314
import Overlay from '@ts/ui/overlay/overlay';
@@ -29,6 +30,7 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
2930

3031
_$loadPanelContentWrapper?: dxElementWrapper;
3132

33+
// eslint-disable-next-line no-restricted-globals -- needed for delayed panel show
3234
_showTimeout?: ReturnType<typeof setTimeout>;
3335

3436
_supportedKeys(): SupportedKeys {
@@ -44,7 +46,7 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
4446
message: messageLocalization.format('Loading'),
4547
width: 222,
4648
height: 90,
47-
// @ts-expect-error ts-error
49+
// @ts-expect-error 'null' is not assignable
4850
animation: null,
4951
showIndicator: true,
5052
indicatorSrc: '',
@@ -68,8 +70,7 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
6870
},
6971
{
7072
device(): boolean {
71-
// @ts-expect-error ts-error
72-
return isMaterial();
73+
return isMaterial(current());
7374
},
7475
options: {
7576
message: '',
@@ -81,8 +82,7 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
8182
},
8283
{
8384
device(): boolean {
84-
// @ts-expect-error ts-error
85-
return isFluent();
85+
return isFluent(current());
8686
},
8787
options: {
8888
width: 'auto',
@@ -93,8 +93,7 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
9393
}
9494

9595
_init(): void {
96-
// @ts-expect-error ts-error
97-
super._init.apply(this, arguments);
96+
super._init();
9897
}
9998

10099
_render(): void {
@@ -113,13 +112,15 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
113112
const showIndicator = this.option('showIndicator');
114113
if (!showIndicator) {
115114
const aria = this._getAriaAttributes();
116-
// @ts-expect-error ts-error
115+
116+
// @ts-expect-error attr should have overload
117117
this.$wrapper().attr(aria);
118118
}
119119
}
120120

121-
_getAriaAttributes() {
121+
_getAriaAttributes(): Record<string, string> {
122122
const { message } = this.option();
123+
123124
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
124125
const label = message || messageLocalization.format('Loading');
125126

@@ -131,9 +132,8 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
131132
return aria;
132133
}
133134

134-
// @ts-expect-error ts-error
135-
_renderContentImpl(): void {
136-
super._renderContentImpl();
135+
_renderContentImpl(): Promise<void> {
136+
const result = super._renderContentImpl();
137137

138138
this.$content().addClass(LOADPANEL_CONTENT_CLASS);
139139

@@ -145,9 +145,11 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
145145
this._cleanPreviousContent();
146146
this._renderLoadIndicator();
147147
this._renderMessage();
148+
149+
return result;
148150
}
149151

150-
_show() {
152+
_show(): DeferredObj<unknown> | Promise<unknown> {
151153
const { delay } = this.option();
152154

153155
if (!delay) {
@@ -158,8 +160,10 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
158160
const callBase = super._show.bind(this);
159161

160162
this._clearShowTimeout();
163+
164+
// eslint-disable-next-line no-restricted-globals -- needed for delayed panel show
161165
this._showTimeout = setTimeout(() => {
162-
// @ts-expect-error ts-error
166+
// @ts-expect-error done should be typed
163167
callBase().done(() => {
164168
deferred.resolve();
165169
});
@@ -168,8 +172,9 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
168172
return deferred.promise();
169173
}
170174

171-
_hide() {
175+
_hide(): DeferredObj<unknown> | Promise<unknown> {
172176
this._clearShowTimeout();
177+
173178
return super._hide();
174179
}
175180

@@ -184,9 +189,12 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
184189

185190
const { message } = this.option();
186191

187-
if (!message) return;
192+
if (!message) {
193+
return;
194+
}
188195

189-
const $message = $('<div>').addClass(LOADPANEL_MESSAGE_CLASS)
196+
const $message = $('<div>')
197+
.addClass(LOADPANEL_MESSAGE_CLASS)
190198
.text(message);
191199

192200
this._$loadPanelContentWrapper.append($message);
@@ -212,7 +220,8 @@ class LoadPanel extends Overlay<LoadPanelProperties> {
212220
_cleanPreviousContent(): void {
213221
this.$content().find(`.${LOADPANEL_MESSAGE_CLASS}`).remove();
214222
this.$content().find(`.${LOADPANEL_INDICATOR_CLASS}`).remove();
215-
delete this._$indicator;
223+
224+
this._$indicator = undefined;
216225
}
217226

218227
_togglePaneVisible(): void {

0 commit comments

Comments
 (0)