| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import createMachine from "./fsm.js";
- /**
- * @typedef {Object} ShowOverlayData
- * @property {'warning' | 'error'} level
- * @property {Array<string | { moduleIdentifier?: string, moduleName?: string, loc?: string, message?: string }>} messages
- */
- /**
- * @typedef {Object} CreateOverlayMachineOptions
- * @property {(data: ShowOverlayData) => void} showOverlay
- * @property {() => void} hideOverlay
- */
- /**
- * @param {CreateOverlayMachineOptions} options
- */
- var createOverlayMachine = function createOverlayMachine(options) {
- var hideOverlay = options.hideOverlay,
- showOverlay = options.showOverlay;
- var overlayMachine = createMachine({
- initial: "hidden",
- context: {
- level: "error",
- messages: []
- },
- states: {
- hidden: {
- on: {
- BUILD_ERROR: {
- target: "displayBuildError",
- actions: ["setMessages", "showOverlay"]
- },
- RUNTIME_ERROR: {
- target: "displayRuntimeError",
- actions: ["setMessages", "showOverlay"]
- }
- }
- },
- displayBuildError: {
- on: {
- DISMISS: {
- target: "hidden",
- actions: ["dismissMessages", "hideOverlay"]
- },
- BUILD_ERROR: {
- target: "displayBuildError",
- actions: ["appendMessages", "showOverlay"]
- }
- }
- },
- displayRuntimeError: {
- on: {
- DISMISS: {
- target: "hidden",
- actions: ["dismissMessages", "hideOverlay"]
- },
- RUNTIME_ERROR: {
- target: "displayRuntimeError",
- actions: ["appendMessages", "showOverlay"]
- },
- BUILD_ERROR: {
- target: "displayBuildError",
- actions: ["setMessages", "showOverlay"]
- }
- }
- }
- }
- }, {
- actions: {
- dismissMessages: function dismissMessages() {
- return {
- messages: [],
- level: "error"
- };
- },
- appendMessages: function appendMessages(context, event) {
- return {
- messages: context.messages.concat(event.messages),
- level: event.level || context.level
- };
- },
- setMessages: function setMessages(context, event) {
- return {
- messages: event.messages,
- level: event.level || context.level
- };
- },
- hideOverlay: hideOverlay,
- showOverlay: showOverlay
- }
- });
- return overlayMachine;
- };
- export default createOverlayMachine;
|