import { STORE_NAME } from '@quantum-viewports/store'; const { data: { select, dispatch, useSelect, }, } = window[ 'wp' ]; /** * Set component const to export viewport ui. * * @param object props */ export const Viewports = () => { // Set states. const props = useSelect( ( select: Function ) => { const store = select( STORE_NAME ); return { viewport: store.getViewport(), isActive: store.isActive(), isInspecting: store.isInspecting(), iframeSize: store.getIframeSize(), currentPost: select( 'core/editor' ).getCurrentPost(), } }, [] ); // Return instant if is not active. if ( ! props.isActive ) { return null; } /** * Set viewports from store. */ const viewports = select( STORE_NAME ).getViewports(); /** * Set countViewports. */ const countViewports = Object.keys( viewports ).length; // Get the highest viewport. let highestViewport = 0; for ( const [ viewport ] of Object.entries( viewports ) ) { if ( +viewport > highestViewport ) { highestViewport = +viewport; } } /** * Set ui and its outerwidth for calculation */ const $ui = document.querySelector( '.interface-interface-skeleton__content .components-resizable-box__container, .edit-post-visual-editor .edit-post-visual-editor__content-area, .edit-post-visual-editor > div:first-child:last-child' ); const uiWidth = $ui ? $ui.getBoundingClientRect().width - 80 : 0; /** * Set function to calculate width by viewportWidth. */ const calculateWidth = ( viewportWidth: number ) => { if ( props.viewport > uiWidth ) { return Math.ceil( uiWidth / props.viewport * viewportWidth ); } return Math.ceil( viewportWidth ); } /** * Set function to fire on click. */ const onClickViewport = ( event: any ) => { const selected = event.target.closest( '.qp-viewport' ); dispatch( STORE_NAME ).setViewport( parseInt( selected.getAttribute( 'data-viewport' ) ) ); } /** * Return rendered component. */ return (