From a99bc4fb493cb8ffa986f9e2ecaf27b3f611d309 Mon Sep 17 00:00:00 2001 From: Dave Date: Fri, 10 Mar 2023 14:48:12 +0800 Subject: [PATCH] fix(components): [popover | tooltip] keep autoClose prop (#11833) * feat(hooks): [use-delayed-toggle] add autoClose option * fix(components): [tooltip] keep autoClose prop --- packages/components/tooltip/src/tooltip.vue | 1 + packages/hooks/use-delayed-toggle/index.ts | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/components/tooltip/src/tooltip.vue b/packages/components/tooltip/src/tooltip.vue index 9911e1dc17..6b7f865829 100644 --- a/packages/components/tooltip/src/tooltip.vue +++ b/packages/components/tooltip/src/tooltip.vue @@ -103,6 +103,7 @@ const { show, hide, hasUpdateHandler } = useTooltipModelToggle({ const { onOpen, onClose } = useDelayedToggle({ showAfter: toRef(props, 'showAfter'), hideAfter: toRef(props, 'hideAfter'), + autoClose: toRef(props, 'autoClose'), open: show, close: hide, }) diff --git a/packages/hooks/use-delayed-toggle/index.ts b/packages/hooks/use-delayed-toggle/index.ts index d1475ede39..1feb7044c5 100644 --- a/packages/hooks/use-delayed-toggle/index.ts +++ b/packages/hooks/use-delayed-toggle/index.ts @@ -1,5 +1,5 @@ import { unref } from 'vue' -import { buildProps } from '@element-plus/utils' +import { buildProps, isNumber } from '@element-plus/utils' import { useTimeout } from '../use-timeout' import type { ExtractPropTypes, ToRefs } from 'vue' @@ -19,6 +19,10 @@ export const useDelayedToggleProps = buildProps({ type: Number, default: 200, }, + autoClose: { + type: Number, + default: 0, + }, } as const) export type UseDelayedToggleProps = { @@ -29,14 +33,23 @@ export type UseDelayedToggleProps = { export const useDelayedToggle = ({ showAfter, hideAfter, + autoClose, open, close, }: UseDelayedToggleProps) => { const { registerTimeout } = useTimeout() + const { registerTimeout: registerTimeoutForAutoClose } = useTimeout() const onOpen = (event?: Event) => { registerTimeout(() => { open(event) + + const _autoClose = unref(autoClose) + if (isNumber(_autoClose) && _autoClose > 0) { + registerTimeoutForAutoClose(() => { + close(event) + }, _autoClose) + } }, unref(showAfter)) }