Skip to content

Instantly share code, notes, and snippets.

View ShMcK's full-sized avatar

Shawn McKay ShMcK

View GitHub Profile
@ShMcK
ShMcK / xstatefull-react-setup.js
Created July 20, 2018 03:58
xstateful-react-setup
import { createReactMachine } from '@avaragado/xstateful-react'
import alarm from './statefulAlarmMachine'
const AlarmMachine = createReactMachine(alarm)
export default AlarmMachine
@ShMcK
ShMcK / xstateful-react-provider
Created July 20, 2018 04:00
xstateful-react-provider
<AlarmMachine.Provider>
<>
<AlarmClock />
<AlarmClock />
<>
</AlarmMachine.Provider>
@ShMcK
ShMcK / xstateful-react-activity.js
Created July 20, 2018 04:01
xstateful-react-activity
import AlarmMachine from './statefulAlarmMachine'
const AlarmClock = () => (
<>
<AlarmMachine.Activity is='startRing'>
<Ringing />
</AlarmMachine.Activity>
<Clock>
</>
)
@ShMcK
ShMcK / xstateful-reducer.js
Created July 20, 2018 04:05
xstateful-reducer
import { createStatefulMachine, Reducer } from '@avaragado/xstateful'
import alarmMachine from './alarmMachine'
const initialState = {
alarmTrigger: +new Date() + 10000
}
const reducer = Reducer.map({
alarmSet: Reducer.update(({ action, extstate }) => ({
alarmTrigger: action.time,
@ShMcK
ShMcK / xstateful-react-cond.js
Created July 20, 2018 04:10
xstateful-react-cond
import AlarmMachine from './statefulAlarmMachine'
const Ringing = () => (
<AlarmMachine cond={({ state, exstate )} => (
state === 'Ringing' && exstate.ringCount < 5
)}>
<PlayRinging />
</AlarmMachine>
)
@ShMcK
ShMcK / xstateful-react-render-prop.js
Created July 20, 2018 04:12
xstateful-react-render-prop
import AlarmMachine from './statefulAlarmMachine'
const Clock = () => (
<AlarmMachine
render={({ extstate, setextstate }) => (
<TimeDisplay time={extstate.time} />
)}
/>
)
@ShMcK
ShMcK / testStatechart.js
Created July 20, 2018 04:13
testStatechart
import { testStatechart } from 'react-automata'
import alarmChart from './alarmChart'
import AlarmClock from './AlarmClock'
test('run all tests', () => {
testStatechart({
statechart: alarmChart,
}, AlarmClock)
})
@ShMcK
ShMcK / scxml-example.scxml
Created July 22, 2018 16:30
scxml example
<parallel id="p">
<transition event="done.state.p" target="someOtherState"/>
<state id="S1" initial="S11">
<state id="S11">
<transition event="e4" target="S12"/>
</state>
<state id="S12">
<transition event="e1" target="S1Final"/>
@ShMcK
ShMcK / decouple-state-as-prop.js
Created July 23, 2018 14:33
decouple-state-as-prop
import { withStatechart } from "react-automata"
import alarmMachine from "./alarmMachine"
const AlarmClock = ({ machineState }) => {
switch (machineState.value) {
case "Snoozing":
return <Clock />
case "Ringing":
return <Clock ringing />
default:
@ShMcK
ShMcK / alarm-xstate.json
Created September 23, 2018 21:53
Alarm Clock XState Config
{
"initial": "Normal",
"states": {
"Normal": {
"on": {
"ALARM_ON": "AlarmSet"
}
},
"AlarmGroup": {
"initial": "AlarmSet",