async-states
Version:
Core of async-states
71 lines (68 loc) • 2.19 kB
JavaScript
import { success, error } from '../enums.js';
import { isArray } from '../helpers/core.js';
import { isFunction } from '../utils.js';
function invokeChangeCallbacks(state, callbacks) {
if (!callbacks) {
return;
}
let { onError, onSuccess } = callbacks;
if (onSuccess && state.status === success) {
onSuccess(state);
}
if (onError && state.status === error) {
onError(state);
}
}
function invokeSingleChangeEvent(state, event) {
if (isFunction(event)) {
event(state);
}
else if (typeof event === "object" && event.status === state.status) {
event.handler(state);
}
}
function invokeInstanceEvents(instance, type) {
let events = instance.events;
if (!events || !events[type]) {
return;
}
switch (type) {
case "change": {
Object.values(events[type]).forEach((registeredEvents) => {
if (isArray(registeredEvents)) {
registeredEvents.forEach((evt) => {
invokeSingleChangeEvent(instance.actions.getState(), evt);
});
}
else {
invokeSingleChangeEvent(instance.actions.getState(), registeredEvents);
}
});
return;
}
case "dispose": {
Object.values(events[type]).forEach((registeredEvents) => {
if (isArray(registeredEvents)) {
registeredEvents.forEach((evt) => evt());
}
else {
registeredEvents();
}
});
return;
}
case "cache-change": {
Object.values(events[type]).forEach((registeredEvents) => {
if (isArray(registeredEvents)) {
registeredEvents.forEach((evt) => evt(instance.cache));
}
else {
registeredEvents(instance.cache);
}
});
return;
}
}
}
export { invokeChangeCallbacks, invokeInstanceEvents, invokeSingleChangeEvent };
//# sourceMappingURL=StateEvent.js.map