diff --git a/ui/src/components/PopperHover/index.tsx b/ui/src/components/PopperHover/index.tsx index 5594ad2b38e8feec3d7c4fb664675a6a66375183..ef799da3a169b1e8e6e4fddba52fd9073df943d3 100644 --- a/ui/src/components/PopperHover/index.tsx +++ b/ui/src/components/PopperHover/index.tsx @@ -2,17 +2,11 @@ import type { Placement, Options } from "@popperjs/core" import React, { useCallback, useEffect, useState } from "react" import ReactDOM from "react-dom" import { usePopper } from "react-popper" -import styled from "styled-components" - -const Wrapper = styled.div` - display: flex; - align-items: center; -` type Props = Readonly<{ children: React.ReactNode placement: Placement - modifiers?: Options["modifiers"] + modifiers: Options["modifiers"] trigger: React.ReactNode }> @@ -22,11 +16,10 @@ export const PopperHover = ({ placement, trigger, }: Props) => { - const [container] = useState(document.createElement("div")) + const [container] = useState(document.createElement("div")) const [active, setActive] = React.useState(false) const [triggerElement, setTriggerElement] = useState(null) - const [popperElement, setPopperElement] = useState(null) - const { attributes, styles } = usePopper(triggerElement, popperElement, { + const { attributes, styles } = usePopper(triggerElement, container, { modifiers: [ ...modifiers, { @@ -57,30 +50,35 @@ export const PopperHover = ({ } }, []) + useEffect(() => { + const css = Object.entries(styles.popper).reduce( + (acc, [prop, value]) => `${acc} ${prop}: ${value};`, + "z-index: 100;", + ) + container.setAttribute("style", css) + }, [styles.popper]) + return ( <> - - {trigger} - + {React.isValidElement(trigger) && + React.cloneElement(trigger, { + onMouseEnter: handleMouseEnter, + onMouseLeave: handleMouseLeave, + ref: setTriggerElement, + })} - {ReactDOM.createPortal( -
- {children} -
, - container, - )} + {React.isValidElement(children) && + ReactDOM.createPortal( + React.cloneElement(children, { + ...attributes.popper, + }), + container, + )} ) } PopperHover.defaultProps = { + modifiers: [], placement: "auto", } diff --git a/ui/src/scenes/Schema/Row/index.tsx b/ui/src/scenes/Schema/Row/index.tsx index 2c061eba39f3f992bf2cb1c0be85772c079e493f..f7f41922a8f7adc2430b76ace299712bacda3d38 100644 --- a/ui/src/scenes/Schema/Row/index.tsx +++ b/ui/src/scenes/Schema/Row/index.tsx @@ -17,6 +17,7 @@ type Props = Readonly<{ }> const Type = styled(Text)` + margin-right: 1rem; flex: 0; transition: all 0.2s; ` @@ -24,7 +25,7 @@ const Type = styled(Text)` const PlusButton = styled(SecondaryButton)` position: absolute; right: ${({ tooltip }: Pick) => - tooltip ? "2.5rem" : "1rem"}; + tooltip ? "3rem" : "1rem"}; margin-left: 1rem; opacity: 0; transition: all 0.2s; @@ -34,7 +35,8 @@ const Wrapper = styled.div>` position: relative; display: flex; flex-direction: column; - padding: 0.5rem 1rem; + padding: 0.5rem 0; + padding-left: 1rem; transition: all 0.2s; &:hover ${/* sc-selector */ PlusButton} { @@ -63,14 +65,14 @@ const Spacer = styled.span` ` const InfoIcon = styled(Info)` - height: 100%; - width: 100%; - padding-left: 1rem; color: ${color("draculaPurple")}; +` - &:hover { - cursor: default; - } +const InfoIconWrapper = styled.div` + display: flex; + padding: 0 1rem; + align-items: center; + justify-content: center; ` const Row = ({ @@ -113,12 +115,16 @@ const Row = ({ { name: "offset", options: { - offset: [15, 0], + offset: [-15, 0], }, }, ]} - placement="top-start" - trigger={} + placement="right" + trigger={ + + + + } > {description}