ahooks
Version:
react hooks library
73 lines (72 loc) • 2.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _useMemoizedFn = _interopRequireDefault(require("../useMemoizedFn"));
var _utils = require("../utils");
function getTargetValue(val) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var min = options.min,
max = options.max;
var target = val;
if ((0, _utils.isNumber)(max)) {
target = Math.min(max, target);
}
if ((0, _utils.isNumber)(min)) {
target = Math.max(min, target);
}
return target;
}
function useCounter() {
var initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var min = options.min,
max = options.max;
var _useState = (0, _react.useState)(function () {
return getTargetValue(initialValue, {
min: min,
max: max
});
}),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
current = _useState2[0],
setCurrent = _useState2[1];
var setValue = function setValue(value) {
setCurrent(function (c) {
var target = (0, _utils.isNumber)(value) ? value : value(c);
return getTargetValue(target, {
max: max,
min: min
});
});
};
var inc = function inc() {
var delta = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
setValue(function (c) {
return c + delta;
});
};
var dec = function dec() {
var delta = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
setValue(function (c) {
return c - delta;
});
};
var set = function set(value) {
setValue(value);
};
var reset = function reset() {
setValue(initialValue);
};
return [current, {
inc: (0, _useMemoizedFn["default"])(inc),
dec: (0, _useMemoizedFn["default"])(dec),
set: (0, _useMemoizedFn["default"])(set),
reset: (0, _useMemoizedFn["default"])(reset)
}];
}
var _default = exports["default"] = useCounter;