123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import createMachine from "./fsm.js";
- /**
- * @typedef {Object} ShowOverlayData
- * @property {'warning' | 'error'} level
- * @property {Array<string | { moduleIdentifier?: string, moduleName?: string, loc?: string, message?: string }>} messages
- * @property {'build' | 'runtime'} messageSource
- */
- /**
- * @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: [],
- messageSource: "build"
- },
- 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",
- messageSource: "build"
- };
- },
- appendMessages: function appendMessages(context, event) {
- return {
- messages: context.messages.concat(event.messages),
- level: event.level || context.level,
- messageSource: event.type === "RUNTIME_ERROR" ? "runtime" : "build"
- };
- },
- setMessages: function setMessages(context, event) {
- return {
- messages: event.messages,
- level: event.level || context.level,
- messageSource: event.type === "RUNTIME_ERROR" ? "runtime" : "build"
- };
- },
- hideOverlay: hideOverlay,
- showOverlay: showOverlay
- }
- });
- return overlayMachine;
- };
- export default createOverlayMachine;
|