Skip to content

Commit b26fb52

Browse files
Tooltip Position Invert when space isn't available
1 parent b98f69f commit b26fb52

2 files changed

Lines changed: 57 additions & 18 deletions

File tree

src/visualBuilder/components/FieldToolbar.tsx

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ import {
4141
} from "./FieldRevert/FieldRevertComponent";
4242

4343
export type FieldDetails = Pick<VisualBuilderCslpEventDetails, "editableElement" | "fieldMetadata">;
44+
45+
const TOOLTIP_TOP_EDGE_BUFFER = 96;
46+
4447
interface MultipleFieldToolbarProps {
4548
eventDetails: VisualBuilderCslpEventDetails;
4649
};
@@ -103,7 +106,7 @@ function FieldToolbarComponent(
103106
props: MultipleFieldToolbarProps
104107
): JSX.Element | null {
105108
const { eventDetails } = props;
106-
const { fieldMetadata, editableElement: targetElement} = eventDetails;
109+
const { fieldMetadata, editableElement: targetElement } = eventDetails;
107110
const direction = useSignal("");
108111
const parentPath =
109112
fieldMetadata?.multipleFieldMetadata?.parentDetails?.parentCslpValue ||
@@ -164,9 +167,12 @@ function FieldToolbarComponent(
164167
return null;
165168
}
166169
}
167-
170+
168171
direction.value = getChildrenDirection(targetElement, parentPath);
169172

173+
const invertTooltipPosition =
174+
targetElement.getBoundingClientRect().top <= TOOLTIP_TOP_EDGE_BUFFER;
175+
170176
const editButton = Icon ? (
171177
<button
172178
data-testid="visual-builder__focused-toolbar__multiple-field-toolbar__edit-button"
@@ -175,7 +181,12 @@ function FieldToolbarComponent(
175181
visualBuilderStyles()["visual-builder__button"],
176182
visualBuilderStyles()["visual-builder__button--secondary"],
177183
visualBuilderStyles()["visual-builder__button--edit"],
178-
visualBuilderStyles()["visual-builder__tooltip"]
184+
visualBuilderStyles()["visual-builder__tooltip"],
185+
{
186+
"visual-builder__tooltip--bottom": invertTooltipPosition,
187+
[visualBuilderStyles()["visual-builder__tooltip--bottom"]]:
188+
invertTooltipPosition,
189+
}
179190
)}
180191
data-tooltip={"Edit"}
181192
onClick={(e) => {
@@ -196,7 +207,12 @@ function FieldToolbarComponent(
196207
"visual-builder__replace-button visual-builder__button visual-builder__button--secondary",
197208
visualBuilderStyles()["visual-builder__button"],
198209
visualBuilderStyles()["visual-builder__button--secondary"],
199-
visualBuilderStyles()["visual-builder__tooltip"]
210+
visualBuilderStyles()["visual-builder__tooltip"],
211+
{
212+
"visual-builder__tooltip--bottom": invertTooltipPosition,
213+
[visualBuilderStyles()["visual-builder__tooltip--bottom"]]:
214+
invertTooltipPosition,
215+
}
200216
)}
201217
data-tooltip={"Replace"}
202218
data-testid={`visual-builder-replace-${fieldType}`}
@@ -216,19 +232,28 @@ function FieldToolbarComponent(
216232
</button>
217233
) : null;
218234

219-
const formButton = <button
220-
className={classNames(
221-
"visual-builder__replace-button visual-builder__button visual-builder__button--secondary",
222-
visualBuilderStyles()["visual-builder__button"],
223-
visualBuilderStyles()["visual-builder__button--secondary"],
224-
visualBuilderStyles()["visual-builder__tooltip"]
225-
)}
226-
data-tooltip={"Form"}
227-
data-testid={`visual-builder-form`}
228-
onClick={(e) => {handleFormFieldFocus(eventDetails)}}
229-
>
230-
<FormIcon />
231-
</button>
235+
const formButton = (
236+
<button
237+
className={classNames(
238+
"visual-builder__replace-button visual-builder__button visual-builder__button--secondary",
239+
visualBuilderStyles()["visual-builder__button"],
240+
visualBuilderStyles()["visual-builder__button--secondary"],
241+
visualBuilderStyles()["visual-builder__tooltip"],
242+
{
243+
"visual-builder__tooltip--bottom": invertTooltipPosition,
244+
[visualBuilderStyles()["visual-builder__tooltip--bottom"]]:
245+
invertTooltipPosition,
246+
}
247+
)}
248+
data-tooltip={"Form"}
249+
data-testid={`visual-builder-form`}
250+
onClick={(e) => {
251+
handleFormFieldFocus(eventDetails);
252+
}}
253+
>
254+
<FormIcon />
255+
</button>
256+
);
232257

233258
const toggleVariantDropdown = () => {
234259
setIsOpenVariantRevert(!isOpenVariantRevert);
@@ -245,7 +270,12 @@ function FieldToolbarComponent(
245270
visualBuilderStyles()["visual-builder__button"],
246271
visualBuilderStyles()["visual-builder__button--secondary"],
247272
visualBuilderStyles()["visual-builder__tooltip"],
248-
visualBuilderStyles()["visual-builder__variant-button"]
273+
visualBuilderStyles()["visual-builder__variant-button"],
274+
{
275+
"visual-builder__tooltip--bottom": invertTooltipPosition,
276+
[visualBuilderStyles()["visual-builder__tooltip--bottom"]]:
277+
invertTooltipPosition,
278+
}
249279
)}
250280
data-tooltip={"Variant Revert"}
251281
data-testid={`visual-builder-canvas-variant-revert`}

src/visualBuilder/visualBuilder.style.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,15 @@ export function visualBuilderStyles() {
436436
display: none;
437437
}
438438
`,
439+
"visual-builder__tooltip--bottom": css`
440+
&:before {
441+
bottom: -66px;
442+
}
443+
&:after {
444+
bottom: -4px;
445+
transform: rotate(180deg);
446+
}
447+
`,
439448

440449
"visual-builder__tooltip--persistent": css`
441450
${tooltipBaseStyle}

0 commit comments

Comments
 (0)