import classnames from 'classnames/dedupe'; import { Button, Tooltip } from '@wordpress/components'; import { useEffect, useState } from '@wordpress/element'; import { __, sprintf } from '@wordpress/i18n'; import useResponsive from '../../hooks/use-responsive'; import getIcon from '../../utils/get-icon'; import ActiveIndicator from '../active-indicator'; /** * Component Class * * @param props */ export default function ResponsiveToggle(props) { const { checkActive = () => { return false; }, } = props; const [isOpen, setIsOpen] = useState(false); const { allDevices, device, setDevice } = useResponsive(); useEffect(() => { function handleClickOutside(event) { if (!event.target.closest('.ghostkit-control-responsive-toggle')) { setIsOpen(false); } } document.addEventListener('click', handleClickOutside); return () => { document.removeEventListener('click', handleClickOutside); }; }); const items = []; const icons = [ getIcon('tabs-mobile'), getIcon('tabs-tablet'), getIcon('tabs-laptop'), getIcon('tabs-desktop'), getIcon('tabs-tv'), ]; let selectedIcon = icons[icons.length - 1]; let translateY = '0'; let withActiveResponsive = false; [...Object.keys(allDevices), ''].forEach((name, i) => { if (name === device) { selectedIcon = icons[i]; translateY = `${(100 * (1 + i - icons.length)) / icons.length}%`; // Additional transform for gap. translateY = `calc(${translateY} + ${icons.length - i - 1}px)`; } const isActive = name && checkActive && checkActive(name); withActiveResponsive = withActiveResponsive || isActive; items.unshift({ name, title: ( {icons[i]} {isActive && } ), }); }); return (
{items.map((data) => { return ( ); })}
); }