/** * Internal & External dependencies. */ import { ButtonGroup, Button, Tooltip } from '@wordpress/components'; import { useDeviceType } from '@Controls/getPreviewType'; import { __, sprintf } from '@wordpress/i18n'; import { useState, useCallback } from '@wordpress/element' import { dispatch, select } from '@wordpress/data' import getUAGEditorStateLocalStorage from '@Controls/getUAGEditorStateLocalStorage'; const ResponsiveToggle = props => { const { label, responsive } = props; const deviceType = useDeviceType() const [ displayResponsive, toggleResponsive ] = useState( false ); const customSetPreviewDeviceType = useCallback( device => { if( null !== dispatch( 'core/edit-post' ) ){ const { __experimentalSetPreviewDeviceType: setPreviewDeviceType, } = dispatch( 'core/edit-post' ) setPreviewDeviceType( device ); } toggleResponsive( displayResponsive ); }, [] ) const devicesSvgs = { desktop: ( ), tablet: ( ), mobile: ( ), }; const devices = [ { name: __( 'Desktop', 'ultimate-addons-for-gutenberg' ), staticName: 'Desktop', title: devicesSvgs.desktop, itemClass: 'uagb-desktop-tab uagb-responsive-tabs', }, { name: __( 'Tablet', 'ultimate-addons-for-gutenberg' ), staticName: 'Tablet', title: devicesSvgs.tablet, itemClass: 'uagb-tablet-tab uagb-responsive-tabs', }, { name: __( 'Mobile', 'ultimate-addons-for-gutenberg' ), staticName: 'Mobile', key: 'mobile', title: devicesSvgs.mobile, itemClass: 'uagb-mobile-tab uagb-responsive-tabs', }, ]; // In the Widget editor, the device type is always set to desktop. if ( ! deviceType ) { return null } const commonResponsiveHandler = ( e ) => { // This code is to fix the side-effect of the editor responsive click settings panel refresh issue. let eventTriggerElement = e.target; let settingsPopup = null; if ( 'svg' === eventTriggerElement.tagName ) { eventTriggerElement = eventTriggerElement.closest( '.uag-responsive-common-button' ); } if ( eventTriggerElement.closest( '.uag-typography-options.active' ) ) { settingsPopup = '.uag-typography-options'; } if ( eventTriggerElement.closest( '.uag-box-shadow-options.active' ) ) { settingsPopup = '.uag-box-shadow-options'; } const { getSelectedBlock } = select( 'core/block-editor' ); const blockName = getSelectedBlock()?.name; const uagSettingState = getUAGEditorStateLocalStorage( 'uagSettingState' ); const inspectorTab = eventTriggerElement.closest( '.uagb-inspector-tab' ); const panelBody = eventTriggerElement.closest( '.components-panel__body.is-opened' ); let panelBodyClass = ''; if ( panelBody.classList && 0 !== panelBody.classList ) { panelBody.classList.forEach( ( className ) => { if ( className.includes( 'uag-advance-panel-body' ) ) { panelBodyClass = className; } } ); } let inspectorTabName = 'style'; if ( inspectorTab.classList.contains( 'uagb-tab-content-general' ) ) { inspectorTabName = 'general'; } if ( inspectorTab.classList.contains( 'uagb-tab-content-advance' ) ) { inspectorTabName = 'advance'; } const data = { ...uagSettingState, [blockName] : { selectedTab : inspectorTabName, selectedPanel : panelBodyClass, selectedSetting : settingsPopup } } const uagLocalStorage = getUAGEditorStateLocalStorage(); if ( uagLocalStorage ) { uagLocalStorage.setItem( 'uagSettingState', JSON.stringify( data ) ); } // Above Section Ends. toggleResponsive( ! displayResponsive ); }; return (
{ label && ( { label } ) } { ! displayResponsive && responsive && ( ) } { displayResponsive && responsive && ( { devices.map( ( { name, staticName, key, title, itemClass } ) => ( ) ) } ) }
) } export default ResponsiveToggle