Repository URL to install this package:
|
Version:
1.1.4 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useStateDebounced = exports.useStateFp = void 0;
var react_1 = require("react");
var ramda_1 = require("ramda");
var lodash_1 = require("lodash");
/**
* The `setState` function returned by `useState` always returns `undefined`,
* which means you can't compose `setState` with other functions. This custom
* hook returns a tapped version of `setState` as the setter that returns the
* same value that was passed to it (i.e. `x => { setState(x); return x; }`)
*
* @usage
* ```jsx
* const [user, setUser] = useStateFp(initialUserState);
* const updateUser = useCallback(
* newUserData => pipe(
* merge(user),
* setUser,
* displayToastWithUserData,
* )(newUserData),
* [setState]
* );
* ```
*/
var useStateFp = function (initialState) {
var _a = react_1.useState(initialState), state = _a[0], _setState = _a[1];
var setState = ramda_1.tap(_setState);
return [state, setState];
};
exports.useStateFp = useStateFp;
var useStateDebounced = function (waitAmount, initialState) {
var _a = react_1.useState(initialState), state = _a[0], setState = _a[1];
var setStateDebounced = react_1.useMemo(function () { return lodash_1.debounce(setState, waitAmount); }, [waitAmount]);
return [state, setStateDebounced];
};
exports.useStateDebounced = useStateDebounced;