JSFiddle - React, Tailwind, and code Playground

by João Vitor Scheuermann

JavaScript

function StateMachine () {

	var self = this;

	var ea = undefined;
	var estadoatual = "NONE";
	var estados = [];

	this.ultimoEstado = "NONE";
	this.estadoAtual = estadoatual;

	function addState (obj) {
			var found_state = false;
			for (var i in estados) {
					if (estados[i].name === obj.name) {
							//found_state = true;
							//console.warn(`[STATE_MACHINE] You already have ${obj.name} state stored`);
							return
						}
					}
					if (found_state == false) {
						estados.push(obj);
						//console.log(`[STATE_MACHINE]> ${obj.name} <added to states!`);
					}
	}
	this.addState = function (obj) {
				addState(obj);
	};

	function changeState(string) {
		var proximoEstado = string;
		for (var i in estados) {
				if (string == estados[i].name) {
						//console.log(`[STATE_MACHINE] Found: ${estados[i].name}`);
						if (string !== estadoatual) {
								if (ea !== undefined) {
										ea.onChange(proximoEstado);
								}
								//console.log('[STATE_MACHINE] State changed to: ' + estados[i].name + '.');
								self.ultimoEstado = estadoatual;
								estadoatual = estados[i].name;
								self.estadoAtual = estadoatual;
								ea = new estados[i].constructor(self);
								ea.onOpen(self.ultimoEstado);
						}
				}
		}
	}

	this.changeState = function (string) {
			changeState(string);
	};
}