dhenning
12/12/2019 - 12:39 AM

Generated by XState Viz: https://xstate.js.org/viz

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: "fetch",
    initial: "idle",
    context: {
      results: [],
      message: ""
    },
    states: {
      idle: {
        on: {
          FETCH: "pending"
        }
      },
      pending: {
        invoke: {
          src: "fetchData",
          onDone: { target: "successful", actions: ["setResults"] },
          onError: { target: "failed", actions: ["setMessage"] }
        }
      },
      failed: {
        on: {
          FETCH: "pending"
        }
      },
      successful: {
        initial: "unknown",
        on: {
          FETCH: "pending"
        },
        states: {
          unknown: {
            on: {
              "": [
                {
                  target: "withData",
                  cond: "hasData"
                },
                { target: "withoutData" }
              ]
            }
          },
          withData: {},
          withoutData: {}
        }
      }
    }
  },
  {
    actions: {
      setResults: assign((ctx, event) => ({
        results: event.data
      })),
      setMessage: assign((ctx, event) => ({
        message: event.data
      }))
    },
    guards: {
      hasData: (ctx, event) => {
        return true;
      }
    }
  }
);