hook-conditional
Version:
Conditionally run different React hooks at runtime with a clean and safe API that follows the Rules of Hooks.
28 lines (27 loc) • 1.14 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
export var useConditionalHook = function (condition, hookMap, fallbackHook) {
var results = Object.entries(hookMap).reduce(function (acc, _a) {
var _b;
var key = _a[0], hook = _a[1];
return (__assign(__assign({}, acc), (_b = {}, _b[key] = hook(), _b)));
}, {});
var result = results[String(condition)];
if (result === undefined && !fallbackHook) {
if (process.env.NODE_ENV !== "production") {
console.warn("[useConditionalHook] No matching hook found for condition \"".concat(condition, "\" and no fallback provided."));
}
return results[Object.keys(results)[0]];
}
return result !== null && result !== void 0 ? result : fallbackHook();
};
export default useConditionalHook;