import { useEffect, useRef, useState } from "@wordpress/element"; import { Button, Popover } from "@wordpress/components"; import "./editor.scss"; import { BorderIcon } from "../../icons/icons"; import { jsonParse } from "../../blocks/shared/helpFn"; const SelectField = ({ popupRef, childElement, onClose, anchor = "", divClassName = "" }) => { return ( <>
{React?.cloneElement(childElement, { onClose })}
); }; const Popup = (props) => { const { label, children, toggleButton, type = "", activeLabel = "", divClassName = "", popupClose = true, setPopupClose = () => {}, } = props; const [isContentsVisible, setIsContentsVisible] = useState(false); const [popoverAnchor, setPopoverAnchor] = useState(null); const popupRef = useRef(null); const buttonRef = useRef(null); const handleButtonClick = () => { setIsContentsVisible((prev) => !prev); // Toggle content visibility setPopupClose((prev) => !prev); }; // Close the dropdown when clicking outside of it useEffect(() => { const handleClickOutside = (event) => { const typographyElement = event.target.closest(".sp-smart-post-typography-fonts"); const popupElement = event.target.closest(".sp-smart-post-popup-content"); const colorPopupElement = event.target.closest(".sp-smart-post-picker-pallet-wrapper"); if ( popupRef.current && !popupRef.current.contains(event.target) && !buttonRef.current.contains(event.target) && !typographyElement && !popupElement && !colorPopupElement ) { setIsContentsVisible(false); setPopupClose(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, [popupRef, buttonRef]); const value = toggleButton?.props?.attributes || null; const isActivePopUpButton = value ? jsonParse(value) : true; return ( <>
{type !== "select" && ( <>
{label && ( {label} )} {toggleButton && toggleButton}
)} {type === "select" && ( <>
{activeLabel?.replaceAll("-", " ")} {isContentsVisible && isActivePopUpButton ? ( ) : ( )}
)}
{type !== "select" && isContentsVisible && isActivePopUpButton && ( { setIsContentsVisible(false); setPopupClose(false); }} /> )} {type === "select" && popupClose && ( { // setIsContentsVisible(false); // setPopupClose(false); // }} /> )} ); }; export default Popup;