ts-bus
Version:
<p align="center"> <img src="logo.png" width="100" height="100"/> </p>
51 lines • 1.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = __importDefault(require("react"));
var react_2 = require("./react");
function indentity(a) {
return a;
}
function _defaultSubscriber(dispatch, bus) {
return bus.subscribe("**", dispatch);
}
exports._defaultSubscriber = _defaultSubscriber;
exports.reducerSubscriber = function () {
var definition = [];
for (var _i = 0; _i < arguments.length; _i++) {
definition[_i] = arguments[_i];
}
return function (dispatch, bus) {
return bus.subscribe(definition, dispatch);
};
};
var useReducerCreator = function (subscriber, useReducer) {
if (subscriber === void 0) { subscriber = _defaultSubscriber; }
if (useReducer === void 0) { useReducer = react_1.default.useReducer; }
return function (reducer, initState, init) {
if (init === void 0) { init = indentity; }
// Pull the bus from context
var bus = react_2.useBus();
// Run the reducer
var _a = useReducer(reducer, initState, init), state = _a[0], dispatch = _a[1];
// Run the subscriber synchronously
react_1.default.useLayoutEffect(function () { return subscriber(dispatch, bus); }, [
subscriber,
dispatch,
bus
]);
return state;
};
};
function useBusReducer(reducer, initState, init) {
if (init === void 0) { init = indentity; }
var useReducerFn = useReducerCreator(_defaultSubscriber);
return useReducerFn(reducer, initState, init);
}
exports.useBusReducer = useBusReducer;
useBusReducer.configure = function (options) {
return useReducerCreator(options.subscriber, options.useReducer);
};
//# sourceMappingURL=useBusReducer.js.map