UNPKG

react-promise-tracker

Version:

Simple React Promise tracker Hook/HOC helper to add loading spinner indicators

64 lines (48 loc) 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.trackPromise = exports.getCounter = exports.promiseCounterUpdateEventId = exports.emitter = void 0; var _tinyEmmiter = require("./tinyEmmiter"); var _constants = require("./constants"); function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var emitter = new _tinyEmmiter.Emitter(); exports.emitter = emitter; var promiseCounterUpdateEventId = "promise-counter-update"; exports.promiseCounterUpdateEventId = promiseCounterUpdateEventId; var counter = _defineProperty({}, _constants.defaultArea, 0); var getCounter = function getCounter(area) { return counter[area]; }; exports.getCounter = getCounter; var trackPromise = function trackPromise(promise, area) { area = area || _constants.defaultArea; incrementCounter(area); var promiseInProgress = anyPromiseInProgress(area); emitter.emit(promiseCounterUpdateEventId, promiseInProgress, area); var onResolveHandler = function onResolveHandler() { return decrementPromiseCounter(area); }; promise.then(onResolveHandler, onResolveHandler); return promise; }; exports.trackPromise = trackPromise; var incrementCounter = function incrementCounter(area) { if (Boolean(counter[area])) { counter[area]++; } else { counter[area] = 1; } }; var anyPromiseInProgress = function anyPromiseInProgress(area) { return counter[area] > 0; }; var decrementPromiseCounter = function decrementPromiseCounter(area) { decrementCounter(area); var promiseInProgress = anyPromiseInProgress(area); emitter.emit(promiseCounterUpdateEventId, promiseInProgress, area); }; var decrementCounter = function decrementCounter(area) { counter[area]--; }; // TODO: Enhancement we could catch here errors and throw an Event in case there's an HTTP Error // then the consumer of this event can be listening and decide what to to in case of error