From 90514c80804e81d1f312019d4f58f4325ef1af4c Mon Sep 17 00:00:00 2001 From: geoffrey45 Date: Tue, 6 Sep 2022 13:02:56 +0300 Subject: [PATCH] handle tooltip text updates --- src/assets/scss/Global/app-grid.scss | 1 - src/directives/vTooltip.ts | 77 ++++++++++++++++------------ 2 files changed, 43 insertions(+), 35 deletions(-) diff --git a/src/assets/scss/Global/app-grid.scss b/src/assets/scss/Global/app-grid.scss index ddc7502e..4384a4db 100644 --- a/src/assets/scss/Global/app-grid.scss +++ b/src/assets/scss/Global/app-grid.scss @@ -53,7 +53,6 @@ #acontent { grid-area: content; - max-width: 1955px; overflow: hidden scroll; margin-right: -1rem; padding-right: calc($medium - 1px); diff --git a/src/directives/vTooltip.ts b/src/directives/vTooltip.ts index 6142900a..39d52bde 100644 --- a/src/directives/vTooltip.ts +++ b/src/directives/vTooltip.ts @@ -1,4 +1,4 @@ -import { Directive } from "vue"; +import { Directive, Ref, ref } from "vue"; import { createPopper } from "@popperjs/core"; let tooltip: HTMLElement; @@ -11,46 +11,55 @@ function hideTooltip() { tooltip.style.visibility = "hidden"; } -export default { - updated(el, binding) { - let isHovered = false; +function handleHover(el: HTMLElement, text: string, isHovered: Ref) { + el.addEventListener("mouseover", () => { + isHovered.value = true; + tooltip.innerText = text; + setTimeout(() => { + if (isHovered.value) { + tooltip.style.visibility = "visible"; + + createPopper(el, tooltip, { + placement: "top", + modifiers: [ + { + name: "offset", + options: { + offset: [0, 10], + }, + }, + { + name: "hide", + enabled: true, + }, + ], + }); + } + }, 2000); + }); +} +let isHovered = ref(false); + +export default { + state: {}, + mounted(el: HTMLElement, binding) { if (tooltip === undefined) { tooltip = getTooltip(); } - el.addEventListener("mouseover", () => { - isHovered = true; - - setTimeout(() => { - if (isHovered) { - tooltip.innerText = binding.value; - tooltip.style.visibility = "visible"; - - createPopper(el, tooltip, { - placement: "top", - modifiers: [ - { - name: "offset", - options: { - offset: [0, 10], - }, - }, - { - name: "hide", - enabled: true, - }, - ], - }); - } - }, 1500); - }); - - el.addEventListener("mouseout", () => { - isHovered = false; - hideTooltip(); + handleHover(el, binding.value, isHovered); + ["mouseout", "click"].forEach((event) => { + el.addEventListener(event, () => { + isHovered.value = false; + hideTooltip(); + }); }); }, + updated(el, binding) { + el.removeEventListener("mouseover", () => {}); + handleHover(el, binding.value, isHovered); + }, beforeUnmount(el: HTMLElement) { hideTooltip();