import React, { CSSProperties, ReactNode, useMemo } from "react"; import { BaseStyle } from "widgets/BaseWidget"; import { WIDGET_PADDING } from "constants/WidgetConstants"; import { generateClassName } from "utils/generators"; import styled from "styled-components"; import { useClickOpenPropPane } from "utils/hooks/useClickOpenPropPane"; const PositionedWidget = styled.div` &:hover { z-index: 1; } `; type PositionedContainerProps = { style: BaseStyle; children: ReactNode; widgetId: string; widgetType: string; }; export function PositionedContainer(props: PositionedContainerProps) { const x = props.style.xPosition + (props.style.xPositionUnit || "px"); const y = props.style.yPosition + (props.style.yPositionUnit || "px"); const padding = WIDGET_PADDING; const openPropertyPane = useClickOpenPropPane(); // memoized classname const containerClassName = useMemo(() => { return ( generateClassName(props.widgetId) + " positioned-widget " + `t--widget-${props.widgetType .split("_") .join("") .toLowerCase()}` ); }, [props.widgetType, props.widgetId]); const containerStyle: CSSProperties = useMemo(() => { return { position: "absolute", left: x, top: y, height: props.style.componentHeight + (props.style.heightUnit || "px"), width: props.style.componentWidth + (props.style.widthUnit || "px"), padding: padding + "px", }; }, [props.style]); return ( {props.children} ); } PositionedContainer.padding = WIDGET_PADDING; export default PositionedContainer;