From 3cc8d3b810af4e63fdd05984e1c2ef24f2b23167 Mon Sep 17 00:00:00 2001 From: guerler Date: Mon, 16 Dec 2024 15:50:28 +0300 Subject: [PATCH 01/23] Convert popper component to setup tag --- client/src/components/Popper/Popper.vue | 146 ++++++++---------------- 1 file changed, 47 insertions(+), 99 deletions(-) diff --git a/client/src/components/Popper/Popper.vue b/client/src/components/Popper/Popper.vue index edd74cddd609..94f1563d9161 100644 --- a/client/src/components/Popper/Popper.vue +++ b/client/src/components/Popper/Popper.vue @@ -22,116 +22,64 @@ - From eef5b4433b22d691e9866655d85054bd8c7c412f Mon Sep 17 00:00:00 2001 From: guerler Date: Mon, 16 Dec 2024 15:56:06 +0300 Subject: [PATCH 02/23] Avoid using maybe ref --- client/src/components/Popper/Popper.vue | 10 +++++----- client/src/components/Popper/usePopper.ts | 16 +++++++--------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/client/src/components/Popper/Popper.vue b/client/src/components/Popper/Popper.vue index 94f1563d9161..ae63277171ac 100644 --- a/client/src/components/Popper/Popper.vue +++ b/client/src/components/Popper/Popper.vue @@ -57,11 +57,11 @@ const reference = ref(); const popper = ref(); const { visible } = usePopperjs(reference, popper, { ...props, - trigger: toRef(props, "trigger"), - forceShow: toRef(props, "forceShow"), - disabled: toRef(props, "disabled"), - delayOnMouseover: toRef(props, "delayOnMouseover"), - delayOnMouseout: toRef(props, "delayOnMouseout"), + trigger: props.trigger, + forceShow: props.forceShow, + disabled: props.disabled, + delayOnMouseover: props.delayOnMouseover, + delayOnMouseout: props.delayOnMouseout, onShow: () => emit("show"), onHide: () => emit("hide"), }); diff --git a/client/src/components/Popper/usePopper.ts b/client/src/components/Popper/usePopper.ts index 229b77e3d069..2ccfcb6cf00d 100644 --- a/client/src/components/Popper/usePopper.ts +++ b/client/src/components/Popper/usePopper.ts @@ -1,8 +1,6 @@ import { createPopper } from "@popperjs/core"; import { onMounted, onUnmounted, onUpdated, type Ref, ref, unref, watch } from "vue"; -export type MaybeRef = T | Ref; - export type Trigger = "hover" | "focus" | "click-to-open" | "click-to-toggle" | "manual"; export type EventOptions = { @@ -24,16 +22,16 @@ function off(element: Element, event: string, handler: EventListenerOrEventListe const defaultTrigger: Trigger = "hover"; export function usePopperjs( - reference: MaybeRef["0"]>, - popper: MaybeRef["1"]>, + reference: Ref["0"]>, + popper: Ref["1"]>, options?: Partial< Parameters["2"] & EventOptions & { - trigger: MaybeRef; - delayOnMouseover: MaybeRef; - delayOnMouseout: MaybeRef; - disabled: MaybeRef; - forceShow: MaybeRef; + trigger: Trigger | undefined; + delayOnMouseover: number | undefined; + delayOnMouseout: number | undefined; + disabled: boolean | undefined; + forceShow: boolean | undefined; } > ) { From 5d71ee2a890a325b89ceb28f77ac172ec93afa18 Mon Sep 17 00:00:00 2001 From: guerler Date: Mon, 16 Dec 2024 17:13:25 +0300 Subject: [PATCH 03/23] Stop using unref --- client/src/components/Popper/Popper.vue | 2 +- client/src/components/Popper/usePopper.ts | 86 ++++++++++------------- 2 files changed, 40 insertions(+), 48 deletions(-) diff --git a/client/src/components/Popper/Popper.vue b/client/src/components/Popper/Popper.vue index ae63277171ac..a365b549c209 100644 --- a/client/src/components/Popper/Popper.vue +++ b/client/src/components/Popper/Popper.vue @@ -27,7 +27,7 @@ import { library } from "@fortawesome/fontawesome-svg-core"; import { faTimesCircle } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; import type { PropType, UnwrapRef } from "vue"; -import { ref, toRef, watch } from "vue"; +import { ref, watch } from "vue"; import { usePopperjs } from "./usePopper"; diff --git a/client/src/components/Popper/usePopper.ts b/client/src/components/Popper/usePopper.ts index 2ccfcb6cf00d..0975bb3321e0 100644 --- a/client/src/components/Popper/usePopper.ts +++ b/client/src/components/Popper/usePopper.ts @@ -54,19 +54,18 @@ export function usePopperjs( watch( () => [isMounted.value, updatedFlag.value], () => { - if (!isMounted.value) { - return; - } - if ((unref(reference) as any)?.$el) { - referenceRef.value = (unref(reference) as any).$el; - } else { - referenceRef.value = unref(reference) as Element; - } - - if ((unref(popper) as any)?.$el) { - popperRef.value = (unref(popper) as any).$el; - } else { - popperRef.value = unref(popper); + if (isMounted.value) { + if ((reference.value as any)?.$el) { + referenceRef.value = (reference.value as any).$el; + } else { + referenceRef.value = reference.value as Element; + } + + if ((popper.value as any)?.$el) { + popperRef.value = (popper.value as any).$el; + } else { + popperRef.value = popper.value; + } } } ); @@ -103,39 +102,33 @@ export function usePopperjs( const doOpen = () => (visible.value = true); const doClose = () => (visible.value = false); watch( - () => [instance.value, unref(options?.trigger), unref(options?.forceShow)], + () => [instance.value, options?.trigger, options?.forceShow], () => { - if (!instance.value) { - return; - } + if (instance.value) { + if (options?.forceShow) { + visible.value = true; + doOff(); + return; + } - if (unref(options?.forceShow)) { - visible.value = true; - doOff(); - return; + doOn(); } - - doOn(); } ); watch( - () => unref(options?.forceShow), + () => options?.forceShow, () => { - if (unref(options?.forceShow)) { - return; + if (!options?.forceShow && options?.trigger !== "manual") { + visible.value = false; } - if (unref(options?.trigger) === "manual") { - return; - } - visible.value = false; } ); watch( - () => unref(options?.disabled), + () => options?.disabled, () => { - if (unref(options?.disabled)) { + if (options?.disabled) { doOff(); } else { doOn(); @@ -145,30 +138,30 @@ export function usePopperjs( const timer = ref(); const doMouseover = () => { - if (unref(options?.delayOnMouseover) === 0) { + if (options?.delayOnMouseover === 0) { doOpen(); } else { clearTimeout(timer.value); timer.value = setTimeout(() => { doOpen(); - }, unref(options?.delayOnMouseover) ?? 100); + }, options?.delayOnMouseover ?? 100); } }; const doMouseout = () => { - if (unref(options?.delayOnMouseout) === 0) { + if (options?.delayOnMouseout === 0) { doClose(); } else { clearTimeout(timer.value); timer.value = setTimeout(() => { doClose(); - }, unref(options?.delayOnMouseout) ?? 100); + }, options?.delayOnMouseout ?? 100); } }; const doOn = () => { doOff(); - switch (unref(options?.trigger) ?? defaultTrigger) { + switch (options?.trigger ?? defaultTrigger) { case "click-to-open": { on(referenceRef.value!, "click", doOpen); on(document as any, "click", doCloseForDocument); @@ -229,16 +222,15 @@ export function usePopperjs( watch( () => [instance.value, visible.value], () => { - if (!instance.value) { - return; - } - if (visible.value || unref(options?.forceShow)) { - popperRef.value?.classList.remove("vue-use-popperjs-none"); - options?.onShow?.(); - instance.value?.update(); - } else { - popperRef.value?.classList.add("vue-use-popperjs-none"); - options?.onHide?.(); + if (instance.value) { + if (visible.value || options?.forceShow) { + popperRef.value?.classList.remove("vue-use-popperjs-none"); + options?.onShow?.(); + instance.value?.update(); + } else { + popperRef.value?.classList.add("vue-use-popperjs-none"); + options?.onHide?.(); + } } } ); From 065c4bbf6a8df4250afd703563e9e0213ba4fadf Mon Sep 17 00:00:00 2001 From: guerler Date: Mon, 16 Dec 2024 17:22:58 +0300 Subject: [PATCH 04/23] Remove unused props --- client/src/components/ActivityBar/ActivityItem.vue | 2 +- client/src/components/Popper/usePopper.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/components/ActivityBar/ActivityItem.vue b/client/src/components/ActivityBar/ActivityItem.vue index fa7e67d5e8c0..d8dc9cb2e606 100644 --- a/client/src/components/ActivityBar/ActivityItem.vue +++ b/client/src/components/ActivityBar/ActivityItem.vue @@ -65,7 +65,7 @@ const meta = computed(() => store.metaForId(props.id));