Skip to content

Commit 22db7bf

Browse files
committed
refactor: improve types
1 parent 47b376d commit 22db7bf

File tree

1 file changed

+37
-20
lines changed
  • packages/floating-vue/src/components

1 file changed

+37
-20
lines changed

Diff for: packages/floating-vue/src/components/Popper.ts

+37-20
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,16 @@ import { getDefaultConfig, getAllParentThemes } from '../config'
1818

1919
export type ComputePositionConfig = Parameters<typeof computePosition>[2]
2020

21-
const shownPoppers = []
21+
interface PopperEvent extends Event {
22+
usedByTooltip?: boolean
23+
closeAllPopover?: boolean
24+
closePopover?: boolean
25+
}
26+
27+
const shownPoppers: PopperInstance[] = []
2228
let hidingPopper = null
2329

24-
const shownPoppersByTheme: Record<string, any[]> = {}
30+
const shownPoppersByTheme: Record<string, PopperInstance[]> = {}
2531
function getShownPoppersByTheme (theme: string) {
2632
let list = shownPoppersByTheme[theme]
2733
if (!list) {
@@ -43,7 +49,7 @@ function defaultPropFactory (prop: string) {
4349

4450
const PROVIDE_KEY = '__floating-vue__popper'
4551

46-
export default () => defineComponent({
52+
const createPopper = () => defineComponent({
4753
name: 'VPopper',
4854

4955
provide () {
@@ -308,8 +314,12 @@ export default () => defineComponent({
308314
},
309315
transformOrigin: null,
310316
},
317+
randomId: `popper_${[Math.random(), Date.now()].map(n => n.toString(36).substring(2, 10)).join('_')}`,
311318
shownChildren: new Set(),
312319
lastAutoHide: true,
320+
$_pendingHide: false,
321+
$_containsGlobalTarget: false,
322+
$_isDisposed: false,
313323
}
314324
},
315325

@@ -397,7 +407,6 @@ export default () => defineComponent({
397407

398408
created () {
399409
this.$_isDisposed = true
400-
this.randomId = `popper_${[Math.random(), Date.now()].map(n => n.toString(36).substring(2, 10)).join('_')}`
401410
if (this.autoMinSize) {
402411
console.warn('[floating-vue] `autoMinSize` option is deprecated. Use `autoSize="min"` instead.')
403412
}
@@ -662,7 +671,7 @@ export default () => defineComponent({
662671
})
663672
},
664673

665-
$_scheduleShow (event = null, skipDelay = false) {
674+
$_scheduleShow (_event, skipDelay = false) {
666675
this.$_updateParentShownChildren(true)
667676
this.$_hideInProgress = false
668677
clearTimeout(this.$_scheduleTimer)
@@ -680,7 +689,7 @@ export default () => defineComponent({
680689
}
681690
},
682691

683-
$_scheduleHide (event = null, skipDelay = false) {
692+
$_scheduleHide (_event, skipDelay = false) {
684693
if (this.shownChildren.size > 0) {
685694
this.$_pendingHide = true
686695
return
@@ -701,7 +710,7 @@ export default () => defineComponent({
701710
}
702711
},
703712

704-
$_computeDelay (type) {
713+
$_computeDelay (type: 'show' | 'hide') {
705714
const delay = this.delay
706715
return parseInt((delay && delay[type]) || delay || 0)
707716
},
@@ -878,7 +887,7 @@ export default () => defineComponent({
878887
$_addEventListeners () {
879888
// Add trigger show events
880889

881-
const handleShow = event => {
890+
const handleShow = (event: PopperEvent) => {
882891
if (this.isShown && !this.$_hideInProgress) {
883892
return
884893
}
@@ -892,7 +901,7 @@ export default () => defineComponent({
892901

893902
// Add trigger hide events
894903

895-
const handleHide = event => {
904+
const handleHide = (event: PopperEvent) => {
896905
if (event.usedByTooltip) {
897906
return
898907
}
@@ -903,7 +912,7 @@ export default () => defineComponent({
903912
this.$_registerTriggerListeners([this.$_popperNode], HIDE_EVENT_MAP, this.popperTriggers, this.popperHideTriggers, handleHide)
904913
},
905914

906-
$_registerEventListeners (targetNodes: any[], eventType: string, handler: (event: Event) => void) {
915+
$_registerEventListeners (targetNodes: Element[], eventType: string, handler: (event: Event) => void) {
907916
this.$_events.push({ targetNodes, eventType, handler })
908917
targetNodes.forEach(node => node.addEventListener(eventType, handler, supportsPassive
909918
? {
@@ -912,7 +921,7 @@ export default () => defineComponent({
912921
: undefined))
913922
},
914923

915-
$_registerTriggerListeners (targetNodes: any[], eventMap: Record<string, string>, commonTriggers, customTrigger, handler: (event: Event) => void) {
924+
$_registerTriggerListeners (targetNodes: Element[], eventMap: Record<string, string>, commonTriggers, customTrigger, handler: (event: Event) => void) {
916925
let triggers = commonTriggers
917926

918927
if (customTrigger != null) {
@@ -1030,6 +1039,10 @@ export default () => defineComponent({
10301039
}
10311040
return false
10321041
},
1042+
1043+
$_mouseDownContains () {
1044+
// replaced by handleGlobalMousedown
1045+
},
10331046
},
10341047

10351048
render () {
@@ -1058,7 +1071,7 @@ if (typeof document !== 'undefined' && typeof window !== 'undefined') {
10581071
window.addEventListener('resize', computePositionAllShownPoppers)
10591072
}
10601073

1061-
function handleGlobalMousedown (event) {
1074+
function handleGlobalMousedown (event: PopperEvent) {
10621075
for (let i = 0; i < shownPoppers.length; i++) {
10631076
const popper = shownPoppers[i]
10641077
try {
@@ -1070,15 +1083,15 @@ function handleGlobalMousedown (event) {
10701083
}
10711084
}
10721085

1073-
function handleGlobalClick (event) {
1086+
function handleGlobalClick (event: PopperEvent) {
10741087
handleGlobalClose(event)
10751088
}
10761089

1077-
function handleGlobalTouchend (event) {
1090+
function handleGlobalTouchend (event: PopperEvent) {
10781091
handleGlobalClose(event, true)
10791092
}
10801093

1081-
function handleGlobalClose (event, touch = false) {
1094+
function handleGlobalClose (event: PopperEvent, touch = false) {
10821095
const preventClose: Record<string, true> = {}
10831096

10841097
for (let i = shownPoppers.length - 1; i >= 0; i--) {
@@ -1123,16 +1136,16 @@ function handleGlobalClose (event, touch = false) {
11231136
}
11241137
}
11251138

1126-
function isContainingEventTarget (popper, event): boolean {
1139+
function isContainingEventTarget (popper: PopperInstance, event: Event): boolean {
11271140
const popperContent = popper.popperNode()
11281141
return popper.$_mouseDownContains || popperContent.contains(event.target)
11291142
}
11301143

1131-
function shouldAutoHide (popper, contains, event): boolean {
1144+
function shouldAutoHide (popper: PopperInstance, contains, event: PopperEvent): boolean {
11321145
return event.closeAllPopover || (event.closePopover && contains) || (getAutoHideResult(popper, event) && !contains)
11331146
}
11341147

1135-
function getAutoHideResult (popper, event) {
1148+
function getAutoHideResult (popper: PopperInstance, event: Event) {
11361149
if (typeof popper.autoHide === 'function') {
11371150
const result = popper.autoHide(event)
11381151
popper.lastAutoHide = result
@@ -1141,10 +1154,10 @@ function getAutoHideResult (popper, event) {
11411154
return popper.autoHide
11421155
}
11431156

1144-
function computePositionAllShownPoppers (event) {
1157+
function computePositionAllShownPoppers () {
11451158
for (let i = 0; i < shownPoppers.length; i++) {
11461159
const popper = shownPoppers[i]
1147-
popper.$_computePosition(event)
1160+
popper.$_computePosition()
11481161
}
11491162
}
11501163

@@ -1180,3 +1193,7 @@ function lineIntersectsLine (x1: number, y1: number, x2: number, y2: number, x3:
11801193
const uB = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1))
11811194
return (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1)
11821195
}
1196+
1197+
export default createPopper
1198+
1199+
export type PopperInstance = ReturnType<typeof createPopper> extends { new (): infer T } ? T : never

0 commit comments

Comments
 (0)