From 30c59545f06e4361b7962394bda444a1df1d3ea5 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia Date: Fri, 27 Jan 2023 18:21:51 +0530 Subject: [PATCH] feat: tooltip component added --- apps/app/components/ui/tooltip/index.tsx | 94 ++++++++++++++++-------- 1 file changed, 64 insertions(+), 30 deletions(-) diff --git a/apps/app/components/ui/tooltip/index.tsx b/apps/app/components/ui/tooltip/index.tsx index 065989b00..d49013a8b 100644 --- a/apps/app/components/ui/tooltip/index.tsx +++ b/apps/app/components/ui/tooltip/index.tsx @@ -1,39 +1,73 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; -type Props = { +export type Props = { + direction?: "top" | "right" | "bottom" | "left"; + content: string | React.ReactNode; + margin?: string; children: React.ReactNode; - content: React.ReactNode; - position?: "top" | "bottom" | "left" | "right"; + customStyle?: string; }; -const Tooltip: React.FC = ({ children, content, position = "top" }) => ( -
-
-

{content}

- -
+const Tooltip: React.FC = ({ + content, + direction = "top", + children, + margin = "24px", + customStyle, +}) => { + const [active, setActive] = useState(false); + const [styleConfig, setStyleConfig] = useState("top-[calc(-100%-24px)]"); + let timeout: any; + + const showToolTip = () => { + timeout = setTimeout(() => { + setActive(true); + }, 300); + }; + + const hideToolTip = () => { + clearInterval(timeout); + setActive(false); + }; + + const tooltipStyles = { + top: ` + left-[50%] translate-x-[-50%] before:contents-[""] before:border-solid + before:border-transparent before:h-0 before:w-0 before:absolute before:pointer-events-none + before:border-[6px] before:left-[50%] before:ml-[calc(6px*-1)] before:top-full before:border-t-black`, + + right: ` + right-[-100%] top-[50%] + translate-x-0 translate-y-[-50%] `, + + bottom: ` + left-[50%] translate-x-[-50%] before:contents-[""] before:border-solid + before:border-transparent before:h-0 before:w-0 before:absolute before:pointer-events-none + before:border-[6px] before:left-[50%] before:ml-[calc(6px*-1)] before:bottom-full before:border-b-black`, + + left: ` + left-[-100%] top-[50%] + translate-x-0 translate-y-[-50%] `, + }; + + useEffect(() => { + const styleConfig = direction + "-[calc(-100%-" + margin + ")]"; + setStyleConfig(styleConfig); + }, [margin, direction]); + + return ( +
{children} + {active && ( +
+ {content} +
+ )}
); +}; export default Tooltip;