@foxy.io/sdk
Version:
Universal SDK for a full server-side and a limited in-browser access to Foxy hAPI.
167 lines (166 loc) • 7.15 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.machine = void 0;
const actions = __importStar(require("./actions.js"));
const guards = __importStar(require("./guards.js"));
const xstate_1 = require("xstate");
exports.machine = xstate_1.createMachine({
context: {
data: null,
edits: null,
errors: [],
failure: null,
},
entry: ['validate'],
id: 'nucleon',
initial: 'init',
on: {
DELETE: { target: '#nucleon.busy.deleting' },
FETCH: { actions: ['clearData', 'clearEdits', 'clearErrors'], target: '#nucleon.busy.fetching' },
REFRESH: { target: '#nucleon.busy.fetching' },
SET_DATA: { actions: ['setData', 'clearEdits', 'clearErrors'], target: '#nucleon.init' },
},
states: {
busy: {
states: {
creating: {
invoke: {
onDone: { actions: ['setData', 'clearEdits', 'validate'], target: '#nucleon.idle.snapshot' },
onError: [
{ actions: 'setErrors', cond: 'isV8nErrorEvent', target: '#nucleon.idle' },
{ actions: 'setFailure', target: '#nucleon.fail' },
],
src: 'sendPost',
},
},
deleting: {
invoke: {
onDone: { actions: ['clearData', 'clearEdits', 'validate'], target: '#nucleon.idle.template' },
onError: [
{ actions: 'setErrors', cond: 'isV8nErrorEvent', target: '#nucleon.idle' },
{ actions: 'setFailure', target: '#nucleon.fail' },
],
src: 'sendDelete',
},
},
fetching: {
invoke: {
onDone: { actions: ['setData', 'clearErrors', 'validate'], target: '#nucleon.idle.snapshot' },
onError: [
{ actions: 'setErrors', cond: 'isV8nErrorEvent', target: '#nucleon.idle' },
{ actions: 'setFailure', target: '#nucleon.fail' },
],
src: 'sendGet',
},
},
updating: {
invoke: {
onDone: { actions: ['setData', 'clearEdits', 'validate'], target: '#nucleon.idle.snapshot' },
onError: [
{ actions: 'setErrors', cond: 'isV8nErrorEvent', target: '#nucleon.idle' },
{ actions: 'setFailure', target: '#nucleon.fail' },
],
src: 'sendPatch',
},
},
},
},
fail: {
exit: 'clearFailure',
},
idle: {
initial: 'unknown',
on: { EDIT: { actions: ['applyEdit', 'validate'], target: '.unknown' } },
states: {
snapshot: {
initial: 'unknown',
states: {
clean: {
initial: 'unknown',
states: {
invalid: {},
unknown: { always: [{ cond: 'hasErrors', target: 'invalid' }, { target: 'valid' }] },
valid: {},
},
},
dirty: {
initial: 'unknown',
on: {
UNDO: {
actions: ['clearEdits', 'clearErrors', 'validate'],
target: '#nucleon.idle.snapshot.clean',
},
},
states: {
invalid: {},
unknown: { always: [{ cond: 'hasErrors', target: 'invalid' }, { target: 'valid' }] },
valid: { on: { SUBMIT: { target: '#nucleon.busy.updating' } } },
},
},
unknown: {
always: [{ cond: 'hasEdits', target: 'dirty' }, { target: 'clean' }],
},
},
},
template: {
initial: 'unknown',
states: {
clean: {
initial: 'unknown',
states: {
invalid: {},
unknown: { always: [{ cond: 'hasErrors', target: 'invalid' }, { target: 'valid' }] },
valid: {},
},
},
dirty: {
initial: 'unknown',
on: {
UNDO: {
actions: ['clearEdits', 'clearErrors', 'validate'],
target: '#nucleon.idle.template.clean',
},
},
states: {
invalid: {},
unknown: { always: [{ cond: 'hasErrors', target: 'invalid' }, { target: 'valid' }] },
valid: { on: { SUBMIT: { target: '#nucleon.busy.creating' } } },
},
},
unknown: {
always: [{ cond: 'hasEdits', target: 'dirty' }, { target: 'clean' }],
},
},
},
unknown: {
always: [{ cond: 'hasData', target: 'snapshot' }, { target: 'template' }],
},
},
},
init: {
always: [{ cond: 'hasData', target: 'idle.snapshot' }, { target: 'idle.template' }],
},
},
}, {
actions,
guards,
});