/** * WordPress dependencies */ import { render, // @ts-ignore: has no exported member // eslint-disable-next-line import/named createRoot, useState, } from '@wordpress/element'; import domReady from '@wordpress/dom-ready'; /** * Internal dependencies */ import Piano from './components/piano'; import { DEFAULT_SETTINGS } from './constants'; import type { BlockAttributes } from './constants'; function View( props: BlockAttributes ) { const [ settings, setSettings ] = useState< BlockAttributes >( props ); const onChange = ( newSettings: Partial< BlockAttributes > ) => { setSettings( { ...settings, ...newSettings, } ); }; return ; } domReady( function () { const domNodes = document.querySelectorAll( '.wp-block-piano-block-piano' ); if ( domNodes.length === 0 ) { return; } domNodes.forEach( ( domNode ) => { const volume = parseFloat( domNode.getAttribute( 'data-volume' ) || '' ); const useSustainPedal = domNode.getAttribute( 'data-use-sustain-pedal' ) === '1'; const octaveOffset = parseFloat( domNode.getAttribute( 'data-octave-offset' ) || '' ); const instrument = domNode.getAttribute( 'data-instrument' ) || DEFAULT_SETTINGS.instrument; const keyLayout = domNode.getAttribute( 'data-key-layout' ) || DEFAULT_SETTINGS.keyLayout; const synthesizerSetting = domNode.getAttribute( 'data-synthesizer-setting' ); const parsedSynthesizerSetting = synthesizerSetting ? JSON.parse( synthesizerSetting ) : DEFAULT_SETTINGS.synthesizerSetting; const normalizedSynthesizerSetting = { ...parsedSynthesizerSetting, envelope: { attack: parseFloat( parsedSynthesizerSetting.envelope.attack ), decay: parseFloat( parsedSynthesizerSetting.envelope.decay ), sustain: parseFloat( parsedSynthesizerSetting.envelope.sustain ), release: parseFloat( parsedSynthesizerSetting.envelope.release ), }, }; const viewProps = { volume, useSustainPedal, octaveOffset, instrument, keyLayout, synthesizerSetting: normalizedSynthesizerSetting, showOnFront: true, }; // If version is less than 18 use `render` to render the app // otherwise use `createRoot` to render the app if ( createRoot === undefined ) { render( , domNode ); } else { const root = createRoot( domNode ); root.render( ); } } ); } );