index.js (1499B)
1 import { h, render } from 'preact'; 2 import App from './App'; 3 import './index.css'; 4 import 'preact/devtools'; 5 6 import { Provider, connect } from 'preact-redux'; 7 import { store } from './store.js'; 8 9 const ConnectedApp = connect(state => state, { 10 setVolume: (value) => ({type: 'SET_GLOBAL_VOLUME', value}), 11 setBpm: (value) => ({type: 'SET_GLOBAL_BPM', value}), 12 setBeat: (value) => ({type: 'SET_GLOBAL_BEAT', value}), 13 setNumBeats: (value) => ({type: 'SET_GLOBAL_NUM_BEATS', value}), 14 setEditingToneIdx: (value) => ({type: 'SET_EDITING_TONE_IDX', value}), 15 startMetro: () => (dispatch, getState) => { 16 const tickMetro = {type: 'TICK_METRO'}; 17 const startMetro = {type: 'START_METRO'}; 18 19 dispatch(startMetro); 20 21 const loop = () => { 22 if (getState().playing) { 23 dispatch(tickMetro); 24 window.setTimeout(loop, (1 / getState().bpm) * 60000); 25 } 26 } 27 28 loop(); 29 }, 30 stopMetro: () => ({type: 'STOP_METRO'}), 31 setAdsrProperty: (property, value) => ({type: 'SET_ADSR_PROPERTY', property, value}), 32 addTone: (waveform, idx, activate) => ({type: 'ADD_TONE', waveform, idx, activate}), 33 setToneProperty: (idx, property, value) => ({type: 'SET_TONE_PROPERTY', idx, property, value}), 34 deleteTone: (idx) => ({type: 'DELETE_TONE', idx}) 35 36 })(App); 37 38 const InformedApp = <Provider store={store}><ConnectedApp /></Provider>; 39 40 render( 41 InformedApp, 42 document.getElementById('root') 43 );