From 16da6e94cfb2af96848dc04f0a8cb81aedac5e46 Mon Sep 17 00:00:00 2001 From: Untone Date: Wed, 9 Oct 2024 18:13:56 +0300 Subject: [PATCH] nopopper-fix --- package-lock.json | 15 ---- package.json | 1 - src/components/_shared/Popover/Popover.tsx | 81 ++++++++++------------ 3 files changed, 38 insertions(+), 59 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97094c00..4a0c724d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -98,7 +98,6 @@ "rollup-plugin-visualizer": "^5.12.0", "sass": "^1.79.4", "solid-js": "^1.9.2", - "solid-popper": "^0.3.0", "solid-tiptap": "0.7.0", "solid-transition-group": "^0.2.3", "storybook": "^8.3.5", @@ -22674,20 +22673,6 @@ "seroval-plugins": "^1.1.0" } }, - "node_modules/solid-popper": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/solid-popper/-/solid-popper-0.3.0.tgz", - "integrity": "sha512-XlfEWAyxGGqFgg/uRpF+BemSfCqjbLA8p6fToDa+6v3paw3eBQj0TU08aBOIj2VeigaEiz8ZTlDx1eBLVRivBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@popperjs/core": "^2.11", - "solid-js": "^1.2" - } - }, "node_modules/solid-refresh": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.6.3.tgz", diff --git a/package.json b/package.json index ae113c86..c83a2748 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,6 @@ "rollup-plugin-visualizer": "^5.12.0", "sass": "^1.79.4", "solid-js": "^1.9.2", - "solid-popper": "^0.3.0", "solid-tiptap": "0.7.0", "solid-transition-group": "^0.2.3", "storybook": "^8.3.5", diff --git a/src/components/_shared/Popover/Popover.tsx b/src/components/_shared/Popover/Popover.tsx index 8187a241..c9a7f3de 100644 --- a/src/components/_shared/Popover/Popover.tsx +++ b/src/components/_shared/Popover/Popover.tsx @@ -1,5 +1,5 @@ -import { JSX, Show, createSignal, onMount } from 'solid-js' -import usePopper from 'solid-popper' +import { JSX, Show, createSignal, onCleanup, onMount } from 'solid-js' +import { createTooltip } from '~/lib/createTooltip' import styles from './Popover.module.scss' @@ -7,63 +7,58 @@ type Props = { children: (setTooltipEl: (el: HTMLElement | null) => void) => JSX.Element content: string | JSX.Element disabled?: boolean + placement?: 'top' | 'bottom' | 'left' | 'right' + offset?: [number, number] } export const Popover = (props: Props) => { const [show, setShow] = createSignal(false) const [anchor, setAnchor] = createSignal() - const [popper, setPopper] = createSignal() + const [tooltip, setTooltip] = createSignal() - usePopper(anchor, popper, { - modifiers: [ - { - name: 'offset', - options: { - offset: [0, 8] - } - }, - { - name: 'flip', - options: { - fallbackPlacements: ['top', 'bottom'] - } - } - ] + let tooltipInstance: ReturnType | undefined + + onMount(() => { + const anchorEl = anchor() + const tooltipEl = tooltip() + + if (anchorEl && tooltipEl && !props.disabled) { + tooltipInstance = createTooltip(anchorEl, tooltipEl, { + placement: props.placement || 'top', + offset: props.offset || [0, 8] + }) + } }) - const showEvents = ['mouseenter', 'focus'] - const hideEvents = ['mouseleave', 'blur'] + onCleanup(() => { + tooltipInstance?.destroy() + }) - const handleMouseOver = () => setShow(true) - const handleMouseOut = () => setShow(false) + const handleMouseOver = () => { + if (!props.disabled) { + setShow(true) + tooltipInstance?.update() + } + } - if (!props.disabled) { - onMount(() => { - if (!anchor()) return - showEvents.forEach((event) => { - anchor()?.addEventListener(event, handleMouseOver) - }) - hideEvents.forEach((event) => { - anchor()?.addEventListener(event, handleMouseOut) - }) - return () => { - showEvents.forEach((event) => { - anchor()?.removeEventListener(event, handleMouseOver) - }) - hideEvents.forEach((event) => { - anchor()?.removeEventListener(event, handleMouseOut) - }) - } - }) + const handleMouseOut = () => { + setShow(false) } return ( <> - {props.children(setAnchor)} +
+ {props.children(setAnchor)} +
-
+
{props.content} -
+