Skip to content

Commit 24ca922

Browse files
marker-daomarker dao ®
andauthored
Tooltip: Improve typings && Refactor (#33917)
Co-authored-by: marker dao ® <youdontknow@marker-dao.eth>
1 parent bbb9331 commit 24ca922

4 files changed

Lines changed: 48 additions & 26 deletions

File tree

packages/devextreme/js/__internal/scheduler/appointments/appointment/m_appointment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ export class Appointment extends DOMComponent<AppointmentProperties> {
249249
eventsEngine.off($icon, REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME);
250250
eventsEngine.on($icon, REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME, () => {
251251
show({
252-
target: $icon,
252+
target: $icon.get(0),
253253
content: getReducedIconTooltip(this.option()),
254254
});
255255
});

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import type { PopoverProperties } from './popover/m_popover';
88

99
// STYLE tooltip
1010

11+
export interface TooltipProperties extends PopoverProperties {}
12+
1113
const TOOLTIP_CLASS = 'dx-tooltip';
1214
const TOOLTIP_WRAPPER_CLASS = 'dx-tooltip-wrapper';
1315

14-
export interface TooltipProperties extends PopoverProperties {}
1516
class Tooltip<
1617
TProperties extends TooltipProperties = TooltipProperties,
1718
> extends Popover<TProperties> {
@@ -57,7 +58,8 @@ class Tooltip<
5758

5859
_toggleAriaAttributes(): void {
5960
this._contentId = `dx-${new Guid()}`;
60-
// @ts-expect-error ts-error
61+
62+
// @ts-expect-error dxElementWrapper typings
6163
this.$overlayContent().attr({
6264
id: this._contentId,
6365
});

packages/devextreme/js/__internal/ui/popover/m_popover.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export interface PopoverProperties extends Omit<Properties,
7171

7272
useFlatToolbarButtons?: boolean;
7373

74-
arrowOffset: number;
74+
arrowOffset?: number;
7575

7676
arrowPosition?: string;
7777

@@ -497,7 +497,7 @@ class Popover<
497497

498498
const borderWidth = this._positionController._getContentBorderWidth(side);
499499

500-
const { arrowOffset } = this.option();
500+
const { arrowOffset = 0 } = this.option();
501501

502502
const finalArrowLocation = fitIntoRange(
503503
arrowLocation - borderWidth + arrowOffset,
Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,72 @@
1+
import type { dxElementWrapper } from '@js/core/renderer';
12
import $ from '@js/core/renderer';
23
import { Deferred } from '@js/core/utils/deferred';
3-
import { extend } from '@js/core/utils/extend';
44
import { value as viewPort } from '@js/core/utils/view_port';
5+
import type { Properties } from '@js/ui/tooltip';
56
import Tooltip from '@js/ui/tooltip';
67

7-
let tooltip = null;
8-
let removeTooltipElement = null;
8+
type CreateTooltipConfig = Properties & {
9+
content?: string;
10+
};
11+
12+
let tooltip: Tooltip | null = null;
13+
let clean: (() => void) | null = null;
914

10-
const createTooltip = function (options) {
11-
options = extend({ position: 'top' }, options);
15+
const createTooltip = (configuration: CreateTooltipConfig): void => {
16+
const options = {
17+
position: 'top',
18+
...configuration,
19+
};
1220

1321
const { content } = options;
22+
1423
delete options.content;
1524

16-
const $tooltip = $('<div>')
25+
let $tooltip: dxElementWrapper | null = $('<div>')
1726
.html(content)
1827
.appendTo(viewPort());
1928

20-
// @ts-expect-error
21-
removeTooltipElement = function () {
22-
$tooltip.remove();
29+
tooltip = new Tooltip($tooltip?.get(0), options as Properties);
30+
31+
clean = (): void => {
32+
$tooltip?.remove();
33+
$tooltip = null;
34+
tooltip = null;
2335
};
24-
// @ts-expect-error
25-
tooltip = new Tooltip($tooltip, options);
2636
};
2737

28-
const removeTooltip = function () {
38+
const removeTooltip = (): void => {
2939
if (!tooltip) {
3040
return;
3141
}
32-
// @ts-expect-error
33-
removeTooltipElement();
34-
tooltip = null;
42+
43+
clean?.();
3544
};
3645

37-
export function show(options) {
46+
export function show(options: CreateTooltipConfig): Promise<boolean> {
3847
removeTooltip();
3948
createTooltip(options);
40-
// @ts-expect-error
49+
50+
if (!tooltip) {
51+
return Deferred<boolean>()
52+
.resolve(false)
53+
.promise();
54+
}
55+
4156
return tooltip.show();
4257
}
4358

44-
export function hide() {
59+
export function hide(): Promise<boolean> {
4560
if (!tooltip) {
46-
return Deferred().resolve();
61+
return Deferred<boolean>()
62+
.resolve(false)
63+
.promise();
4764
}
48-
// @ts-expect-error
49-
return tooltip.hide()
65+
66+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
67+
return tooltip
68+
.hide()
69+
// @ts-expect-error Deferred.promise() typings
5070
.done(removeTooltip)
5171
.promise();
5272
}

0 commit comments

Comments
 (0)