mirror of
https://github.com/element-plus/element-plus.git
synced 2026-03-13 07:51:17 +08:00
* refactor(components): [tooltip] use type-based definitions * refactor: update * fix: test error --------- Co-authored-by: rzzf <cszhjh@gmail.com>
98 lines
2.2 KiB
TypeScript
98 lines
2.2 KiB
TypeScript
import { unref } from 'vue'
|
|
import { buildProps, isNumber } from '@element-plus/utils'
|
|
import { useTimeout } from '../use-timeout'
|
|
|
|
import type { ToRefs } from 'vue'
|
|
|
|
export interface UseDelayedToggleProps {
|
|
/**
|
|
* @description delay of appearance, in millisecond, not valid in controlled mode
|
|
*/
|
|
showAfter?: number
|
|
/**
|
|
* @description delay of disappear, in millisecond, not valid in controlled mode
|
|
*/
|
|
hideAfter?: number
|
|
/**
|
|
* @description disappear automatically, in millisecond, not valid in controlled mode
|
|
*/
|
|
autoClose?: number
|
|
}
|
|
|
|
/**
|
|
* @deprecated Removed after 3.0.0, Use `UseDelayedToggleProps` instead.
|
|
*/
|
|
export const useDelayedToggleProps = buildProps({
|
|
/**
|
|
* @description delay of appearance, in millisecond, not valid in controlled mode
|
|
*/
|
|
showAfter: {
|
|
type: Number,
|
|
default: 0,
|
|
},
|
|
/**
|
|
* @description delay of disappear, in millisecond, not valid in controlled mode
|
|
*/
|
|
hideAfter: {
|
|
type: Number,
|
|
default: 200,
|
|
},
|
|
/**
|
|
* @description disappear automatically, in millisecond, not valid in controlled mode
|
|
*/
|
|
autoClose: {
|
|
type: Number,
|
|
default: 0,
|
|
},
|
|
} as const)
|
|
|
|
export type DelayedToggle = {
|
|
open: (event?: Event) => void
|
|
close: (event?: Event) => void
|
|
} & ToRefs<Required<UseDelayedToggleProps>>
|
|
|
|
export const useDelayedTogglePropsDefaults = {
|
|
showAfter: 0,
|
|
hideAfter: 200,
|
|
autoClose: 0,
|
|
} as const
|
|
|
|
export const useDelayedToggle = ({
|
|
showAfter,
|
|
hideAfter,
|
|
autoClose,
|
|
open,
|
|
close,
|
|
}: DelayedToggle) => {
|
|
const { registerTimeout } = useTimeout()
|
|
const {
|
|
registerTimeout: registerTimeoutForAutoClose,
|
|
cancelTimeout: cancelTimeoutForAutoClose,
|
|
} = useTimeout()
|
|
|
|
const onOpen = (event?: Event, delay = unref(showAfter)) => {
|
|
registerTimeout(() => {
|
|
open(event)
|
|
|
|
const _autoClose = unref(autoClose)
|
|
if (isNumber(_autoClose) && _autoClose > 0) {
|
|
registerTimeoutForAutoClose(() => {
|
|
close(event)
|
|
}, _autoClose)
|
|
}
|
|
}, delay)
|
|
}
|
|
|
|
const onClose = (event?: Event, delay = unref(hideAfter)) => {
|
|
cancelTimeoutForAutoClose()
|
|
registerTimeout(() => {
|
|
close(event)
|
|
}, delay)
|
|
}
|
|
|
|
return {
|
|
onOpen,
|
|
onClose,
|
|
}
|
|
}
|