import { useRef, useState, useEffect, useContext, type ReactNode, useLayoutEffect, useMemo, } from "react"; import classNames from "classnames"; import { Field, PickIdValuesFromType } from ".."; import { EyeIcon, EyeOffIcon } from "lucide-react"; import { CMSContext } from "../cms-provider"; export const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect; export default function Contentarize({ children, id, inputs, disabled, // offset, }: { children: (value: PickIdValuesFromType) => ReactNode; id: string; inputs: Fields; disabled?: boolean; offset?: { top?: number; left?: number }; }) { const [hovered, setHovered] = useState(false); const childrenRef = useRef(null); const { setEditing, editMode, pageData, setDisabledItems, disabledItems } = useContext(CMSContext); const isDisabled = useMemo( () => disabledItems.includes(id), [disabledItems, id] ); if (!pageData) return null; try { const childNodes = children(pageData?.[id] as PickIdValuesFromType); return !disabled && editMode ? (
{ e.stopPropagation(); setHovered(true); }} onMouseOverCapture={(e) => { e.stopPropagation(); setHovered(true); }} onBlurCapture={(e) => { e.stopPropagation(); setHovered(false); }} onMouseOutCapture={(e) => { e.stopPropagation(); setHovered(false); }} >
{childNodes}
{isDisabled ? (
) : (
)}
) : ( childNodes ); } catch (ex) { return null; } }