Skip to content

Instantly share code, notes, and snippets.

@perzi
Last active March 15, 2020 21:34
Show Gist options
  • Save perzi/d64f5bc12a74a97b55839b1e95d75eb0 to your computer and use it in GitHub Desktop.
Save perzi/d64f5bc12a74a97b55839b1e95d75eb0 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
// - XState (all XState exports)
const invokeMidiAccessRequest = () => {
return new Promise((resolve, reject) => {
navigator.requestMIDIAccess({ sysex: true }).then(
(midiAccess) => { resolve(midiAccess); },
(error) => { reject(error); }
)
});
}
const midiMachine = Machine({
id: 'midiAccess',
initial: 'init',
context: {
midiAccess: null,
midiRequestError: null
},
states: {
init: {
on: {
'': [
{ target: 'requestAccess', cond: 'hasMIDISupport' },
{ target: 'nosupport' },
]
}
},
requestAccess: {
src: invokeMidiAccessRequest,
onError: {
target: 'midiAccessFailed',
actions: assign({ midiRequestError: (context, event) => event.data })
},
onDone: {
target: 'started',
actions: assign({ midiAccess: (context, event) => event.data })
},
},
started: {
},
midiAccessFailed: {
on: {
REQUEST_ACCESS: 'requestAccess',
}
},
nosupport: {
},
}
},
{
guards: {
hasMIDISupport: () => ('requestMIDIAccess' in navigator)
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment