Skip to content

Instantly share code, notes, and snippets.

@achambers
Created October 18, 2021 10:42
Show Gist options
  • Save achambers/f56c55a3fcebb3ced72b7d6d09e8d59f to your computer and use it in GitHub Desktop.
Save achambers/f56c55a3fcebb3ced72b7d6d09e8d59f 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: 'scrollMachine',
context: {
characters: [],
pageInfo: {},
error: '',
},
initial: 'idle',
states: {
idle: {
on: {
FETCH: {
target: 'loading',
},
},
},
loading: {
invoke: {
id: 'characters',
src: 'fetchCharacters',
onDone: {
target: 'success',
actions: 'setCharacters',
},
onError: {
target: 'failure',
actions: 'setError',
},
},
},
loadMore: {
invoke: {
src: 'fetchCharacters',
onDone: {
target: 'success',
actions: 'setMoreCharacters',
},
onError: {
target: 'failure',
actions: 'setError',
},
},
},
success: {
on: {
FETCH_MORE: {
target: 'loadMore',
cond: 'hasMoreCharacters',
},
},
},
failure: {
type: 'final',
},
},
}, {
guards: {
hasMoreCharacters: ({ pageInfo }) => pageInfo.next,
},
actions: {
setCharacters: assign({
characters: [],
pageInfo: {}
//characters: (_, event) => event.data.characters,
//pageInfo: (_, event) => event.data.info,
}),
setMoreCharacters: assign({
characters: [],
pageInfo: {}
//characters: ({ characters }, { data }) => [...characters, ...data.characters],
//pageInfo: (_, { data }) => data.info,
}),
setError: assign({
error: (_, event) => event.data,
}),
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment