@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
56 lines (55 loc) • 1.23 kB
text/typescript
import { assign, createMachine } from "xstate";
import type { State } from "./types";
const initialState: State = {
incidents: [],
error: null,
lastUpdateTime: null,
isLoading: false,
context: { tickers: [] },
};
export const serviceStatusMachine = createMachine({
id: "serviceStatus",
initial: "updating",
context: initialState,
states: {
idle: {
after: {
AUTO_UPDATE_DELAY: {
target: "updating",
},
},
on: {
UPDATE_DATA: {
target: "updating",
actions: assign({
isLoading: true,
error: null,
}),
},
},
},
updating: {
invoke: {
src: "fetchData",
onDone: {
target: "idle",
actions: assign(({ event }) => {
const { incidents, updateTime } = event.output;
return {
incidents,
lastUpdateTime: updateTime,
isLoading: false,
error: null,
};
}),
},
onError: {
target: "idle",
actions: assign(({ event }) => ({
error: event.error as Error,
})),
},
},
},
},
});