UNPKG

@td-design/rn-hooks

Version:

从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率

113 lines (109 loc) 3.71 kB
'use strict'; var _tslib = require('../_virtual/_tslib.js'); var react = require('react'); var lodashEs = require('lodash-es'); var index = require('../useMemoizedFn/index.js'); function useHistoryTravel(initialValue, maxLength) { if (maxLength === void 0) { maxLength = 0; } var _a = _tslib.__read(react.useState({ present: initialValue, past: [], future: [], }), 2), history = _a[0], setHistory = _a[1]; var present = history.present, past = history.past, future = history.future; var initialValueRef = react.useRef(initialValue); var reset = function () { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } var _initialValue = params.length > 0 ? params[0] : initialValueRef.current; initialValueRef.current = _initialValue; setHistory({ present: _initialValue, past: [], future: [], }); }; var updateValue = function (val) { var _past = _tslib.__spreadArray(_tslib.__spreadArray([], _tslib.__read(past), false), [present], false); var maxLengthNum = lodashEs.isNumber(maxLength) ? maxLength : Number(maxLength); // maximum number of records exceeded if (maxLengthNum > 0 && _past.length > maxLengthNum) { //delete first _past.splice(0, 1); } setHistory({ present: val, future: [], past: _past, }); }; // 内部方法,不对外暴露 var _forward = function (step) { if (step === void 0) { step = 1; } if (future.length === 0) return; var _a = split(step, future), _before = _a._before, _current = _a._current, _after = _a._after; setHistory({ past: _tslib.__spreadArray(_tslib.__spreadArray(_tslib.__spreadArray([], _tslib.__read(past), false), [present], false), _tslib.__read(_before), false), present: _current, future: _after, }); }; // 内部方法,不对外暴露 var _backward = function (step) { if (step === void 0) { step = -1; } if (past.length === 0) return; var _a = split(step, past), _before = _a._before, _current = _a._current, _after = _a._after; setHistory({ past: _before, present: _current, future: _tslib.__spreadArray(_tslib.__spreadArray(_tslib.__spreadArray([], _tslib.__read(_after), false), [present], false), _tslib.__read(future), false), }); }; var go = function (step) { var stepNum = lodashEs.isNumber(step) ? step : Number(step); if (stepNum === 0) { return; } if (stepNum > 0) { return _forward(stepNum); } _backward(stepNum); }; return { value: present, backLength: past.length, forwardLength: future.length, setValue: index(updateValue), go: index(go), back: index(function () { go(-1); }), forward: index(function () { go(1); }), reset: index(reset), }; } function split(step, targetArr) { var index = dumpIndex(step, targetArr); return { _current: targetArr[index], _before: targetArr.slice(0, index), _after: targetArr.slice(index + 1), }; } function dumpIndex(step, arr) { var index = step > 0 ? step - 1 : arr.length + step; if (index >= arr.length - 1) { index = arr.length - 1; } if (index < 0) { index = 0; } return index; } module.exports = useHistoryTravel;