Skip to content

Instantly share code, notes, and snippets.

@rschwabco
Last active January 28, 2021 22:48
Show Gist options
  • Save rschwabco/c3e4c85124c548fed1db25d6f6e00c21 to your computer and use it in GitHub Desktop.
Save rschwabco/c3e4c85124c548fed1db25d6f6e00c21 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 fetchMachine = Machine({
id: "fleet-machine",
initial: "preload",
context: {
selectedRequirement: {},
selectedVessel: {},
detailsPanelOpen: false,
schedule: {},
isLoading: false,
},
states: {
preload: {
id: "preload",
// * fetch fleet schedule immediately
initial: "loading",
context: {
schedule: {},
selectedRequirement: {},
},
states: {
loading: {
entry: assign({
isLoading: true
}),
invoke: {
id: "fetch-fleet-schedule",
src: "getFleetSchedule",
onDone: {
target: "#ready",
actions: assign({
schedule: (context, event) =>
event.data.schedule,
}),
},
onError: {
target: "failure",
},
},
},
},
},
requirementActive: {
id: "requirementActive",
on: {
click: "#detailsPanelActive.requirementClicked"
}
},
vesselActive: {
id: "vesselActive",
on: {
CLICK: "#detailsPanelActive.vesselClicked"
}
},
detailsPanelActive: {
id: "detailsPanelActive",
entry: assign({
detailsPanelOpen: true
}),
states: {
requirementClicked: {
id: "requirementClicked",
},
vesselClicked: {
id: "vesselClicked",
},
},
on: {
CLOSE: {
target: "#ready",
actions: assign({
detailsPanelOpen: false
})
}
}
},
},
},
{
services: {
getFleetSchedule: (context, event) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
schedule: {
test: true,
},
});
}, 2000);
});
},
// fetch(fleetScheduleUrl).then((response) => response.json()),
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment