@known-as-bmf/react-when-hooks
Version:
Reack hook toolkit to trigger useEffect, useLayoutEffect, useCallback and useMemo when a condition on dependencies is met.
118 lines (102 loc) • 4.18 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var react = require('react');
/**
* `useEffect` with a predicate that all dependencies must match in order to be triggered.
* @param effect The effect function to call when all the dependencies match the given predicate.
* @param match The predicate function that all dependencies must match.
* @param deps The dependency array.
*/
function useEffectWhen(effect, match, deps) {
react.useEffect(function () {
return deps.every(match) ? effect() : undefined;
}, deps);
}
/**
* `useLayoutEffect` with a predicate that all dependencies must match in order to be triggered.
* @param effect The effect function to call when all the dependencies match the given predicate.
* @param match The predicate function that all dependencies must match.
* @param deps The dependency array.
*/
function useLayoutEffectWhen(effect, match, deps) {
react.useLayoutEffect(function () {
return deps.every(match) ? effect() : undefined;
}, deps);
}
/**
* `useMemo` with a predicate that all dependencies must match in order to generate the value.
* @param factory The value generating function to call when all the dependencies match the given predicate.
* @param match The predicate function that all dependencies must match.
* @param deps The dependency array.
*
* @returns The value generated by the factory if all dependencies match the predicate, `undefined` otherwise.
*/
function useMemoWhen(factory, match, deps) {
return react.useMemo(function () {
return deps.every(match) ? factory() : undefined;
}, deps);
}
/**
* `useCallback` with a predicate that all dependencies must match in order to generate the callback.
* @param callback The callback to create when all the dependencies match the given predicate.
* @param match The predicate function that all dependencies must match.
* @param deps The dependency array.
*
* @returns The callback if all dependencies match the predicate, `undefined` otherwise.
*/
function useCallbackWhen(callback, match, deps) {
return react.useMemo(function () {
return deps.every(match) ? callback : undefined;
}, deps);
}
/**
* Utility predicate that returns true when the argument is defined.
*/
var isDefined = function isDefined(arg) {
return arg != null;
};
/**
* Shortcut for `useEffectWhen(effect, isDefined, deps)`
* @param effect The effect function to call when all the dependencies are defined.
* @param deps The dependency array.
*/
function useEffectWhenDefined(effect, deps) {
useEffectWhen(effect, isDefined, deps);
}
/**
* Shortcut for `useLayoutEffectWhen(effect, isDefined, deps)`
* @param effect The effect function to call when all the dependencies are defined.
* @param deps The dependency array.
*/
function useLayoutEffectWhenDefined(effect, deps) {
useLayoutEffectWhen(effect, isDefined, deps);
}
/**
* Shortcut for `useMemoWhen(factory, isDefined, deps)`
* @param factory The value generating function to call when all the dependencies are defined.
* @param deps The dependency array.
*
* @returns The value generated by the factory if all dependencies are defined, `undefined` otherwise.
*/
function useMemoWhenDefined(factory, deps) {
return useMemoWhen(factory, isDefined, deps);
}
/**
* Shortcut for `useCallbackWhen(callback, isDefined, deps)`
* @param callback The callback to create when all the dependencies are defined.
* @param deps The dependency array.
*
* @returns The callback if all dependencies are defined, `undefined` otherwise.
*/
function useCallbackWhenDefined(callback, deps) {
return useCallbackWhen(callback, isDefined, deps);
}
exports.useCallbackWhen = useCallbackWhen;
exports.useCallbackWhenDefined = useCallbackWhenDefined;
exports.useEffectWhen = useEffectWhen;
exports.useEffectWhenDefined = useEffectWhenDefined;
exports.useLayoutEffectWhen = useLayoutEffectWhen;
exports.useLayoutEffectWhenDefined = useLayoutEffectWhenDefined;
exports.useMemoWhen = useMemoWhen;
exports.useMemoWhenDefined = useMemoWhenDefined;
//# sourceMappingURL=react-when-hooks.cjs.development.js.map