index.ts 745 B

123456789101112131415161718192021222324252627282930
  1. import { isRef, watch } from 'vue'
  2. import type { Ref } from 'vue'
  3. /**
  4. * This method provides dialogable components the ability to restore previously activated element before
  5. * the dialog gets opened
  6. */
  7. export const useRestoreActive = (
  8. toggle: Ref<boolean>,
  9. initialFocus?: Ref<HTMLElement>
  10. ) => {
  11. let previousActive: HTMLElement
  12. watch(
  13. () => toggle.value,
  14. (val) => {
  15. if (val) {
  16. previousActive = document.activeElement as HTMLElement
  17. if (isRef(initialFocus)) {
  18. initialFocus.value.focus?.()
  19. }
  20. } else {
  21. if (process.env.NODE_ENV === 'test') {
  22. previousActive.focus.call(previousActive)
  23. } else {
  24. previousActive.focus()
  25. }
  26. }
  27. }
  28. )
  29. }