index.ts 936 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { unref } from 'vue'
  2. import { buildProps } from '@element-plus/utils'
  3. import { useTimeout } from '../use-timeout'
  4. import type { ExtractPropTypes, ToRefs } from 'vue'
  5. export const useDelayedToggleProps = buildProps({
  6. showAfter: {
  7. type: Number,
  8. default: 0,
  9. },
  10. hideAfter: {
  11. type: Number,
  12. default: 200,
  13. },
  14. } as const)
  15. export type UseDelayedToggleProps = {
  16. open: (event?: Event) => void
  17. close: (event?: Event) => void
  18. } & ToRefs<ExtractPropTypes<typeof useDelayedToggleProps>>
  19. export const useDelayedToggle = ({
  20. showAfter,
  21. hideAfter,
  22. open,
  23. close,
  24. }: UseDelayedToggleProps) => {
  25. const { registerTimeout } = useTimeout()
  26. const onOpen = (event?: Event) => {
  27. registerTimeout(() => {
  28. open(event)
  29. }, unref(showAfter))
  30. }
  31. const onClose = (event?: Event) => {
  32. registerTimeout(() => {
  33. close(event)
  34. }, unref(hideAfter))
  35. }
  36. return {
  37. onOpen,
  38. onClose,
  39. }
  40. }