Comparing version 5.24.8 to 5.25.0
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; | ||
import * as React from 'react'; | ||
import useEvent from './useEvent'; | ||
import useLayoutEffect, { useLayoutUpdateEffect } from './useLayoutEffect'; | ||
import { useLayoutUpdateEffect } from './useLayoutEffect'; | ||
import useState from './useState'; | ||
var Source; | ||
(function (Source) { | ||
Source[Source["INNER"] = 0] = "INNER"; | ||
Source[Source["PROP"] = 1] = "PROP"; | ||
})(Source || (Source = {})); | ||
/** We only think `undefined` is empty */ | ||
@@ -27,60 +22,33 @@ function hasValue(value) { | ||
var _useState = useState(function () { | ||
var finalValue = undefined; | ||
var source; | ||
if (hasValue(value)) { | ||
finalValue = value; | ||
source = Source.PROP; | ||
return value; | ||
} else if (hasValue(defaultValue)) { | ||
finalValue = typeof defaultValue === 'function' ? defaultValue() : defaultValue; | ||
source = Source.PROP; | ||
return typeof defaultValue === 'function' ? defaultValue() : defaultValue; | ||
} else { | ||
finalValue = typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue; | ||
source = Source.INNER; | ||
return typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue; | ||
} | ||
return [finalValue, source, finalValue]; | ||
}), | ||
_useState2 = _slicedToArray(_useState, 2), | ||
mergedValue = _useState2[0], | ||
setMergedValue = _useState2[1]; | ||
var chosenValue = hasValue(value) ? value : mergedValue[0]; | ||
var postMergedValue = postState ? postState(chosenValue) : chosenValue; | ||
// ======================= Sync ======================= | ||
innerValue = _useState2[0], | ||
setInnerValue = _useState2[1]; | ||
var mergedValue = value !== undefined ? value : innerValue; | ||
var postMergedValue = postState ? postState(mergedValue) : mergedValue; | ||
// ====================== Change ====================== | ||
var onChangeFn = useEvent(onChange); | ||
var _React$useState = React.useState([mergedValue]), | ||
_React$useState2 = _slicedToArray(_React$useState, 2), | ||
prevValue = _React$useState2[0], | ||
setPrevValue = _React$useState2[1]; | ||
useLayoutUpdateEffect(function () { | ||
setMergedValue(function (_ref2) { | ||
var _ref3 = _slicedToArray(_ref2, 1), | ||
prevValue = _ref3[0]; | ||
return [value, Source.PROP, prevValue]; | ||
}); | ||
}, [value]); | ||
var prev = prevValue[0]; | ||
if (innerValue !== prev) { | ||
onChangeFn(innerValue, prev); | ||
} | ||
}, [prevValue]); | ||
// ====================== Update ====================== | ||
var changeEventPrevRef = React.useRef(); | ||
var triggerChange = useEvent(function (updater, ignoreDestroy) { | ||
setMergedValue(function (prev) { | ||
var _prev = _slicedToArray(prev, 3), | ||
prevValue = _prev[0], | ||
prevSource = _prev[1], | ||
prevPrevValue = _prev[2]; | ||
var nextValue = typeof updater === 'function' ? updater(prevValue) : updater; | ||
// Do nothing if value not change | ||
if (nextValue === prevValue) { | ||
return prev; | ||
} | ||
// Use prev prev value if is in a batch update to avoid missing data | ||
var overridePrevValue = prevSource === Source.INNER && changeEventPrevRef.current !== prevPrevValue ? prevPrevValue : prevValue; | ||
return [nextValue, Source.INNER, overridePrevValue]; | ||
}, ignoreDestroy); | ||
setInnerValue(updater, ignoreDestroy); | ||
setPrevValue([mergedValue]); | ||
}); | ||
// ====================== Change ====================== | ||
var onChangeFn = useEvent(onChange); | ||
useLayoutEffect(function () { | ||
var _mergedValue = _slicedToArray(mergedValue, 3), | ||
current = _mergedValue[0], | ||
source = _mergedValue[1], | ||
prev = _mergedValue[2]; | ||
if (current !== prev && source === Source.INNER) { | ||
onChangeFn(current, prev); | ||
changeEventPrevRef.current = prev; | ||
} | ||
}, [mergedValue]); | ||
return [postMergedValue, triggerChange]; | ||
} |
@@ -12,9 +12,4 @@ "use strict"; | ||
var _useEvent = _interopRequireDefault(require("./useEvent")); | ||
var _useLayoutEffect = _interopRequireWildcard(require("./useLayoutEffect")); | ||
var _useLayoutEffect = require("./useLayoutEffect"); | ||
var _useState3 = _interopRequireDefault(require("./useState")); | ||
var Source; | ||
(function (Source) { | ||
Source[Source["INNER"] = 0] = "INNER"; | ||
Source[Source["PROP"] = 1] = "PROP"; | ||
})(Source || (Source = {})); | ||
/** We only think `undefined` is empty */ | ||
@@ -36,60 +31,33 @@ function hasValue(value) { | ||
var _useState = (0, _useState3.default)(function () { | ||
var finalValue = undefined; | ||
var source; | ||
if (hasValue(value)) { | ||
finalValue = value; | ||
source = Source.PROP; | ||
return value; | ||
} else if (hasValue(defaultValue)) { | ||
finalValue = typeof defaultValue === 'function' ? defaultValue() : defaultValue; | ||
source = Source.PROP; | ||
return typeof defaultValue === 'function' ? defaultValue() : defaultValue; | ||
} else { | ||
finalValue = typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue; | ||
source = Source.INNER; | ||
return typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue; | ||
} | ||
return [finalValue, source, finalValue]; | ||
}), | ||
_useState2 = (0, _slicedToArray2.default)(_useState, 2), | ||
mergedValue = _useState2[0], | ||
setMergedValue = _useState2[1]; | ||
var chosenValue = hasValue(value) ? value : mergedValue[0]; | ||
var postMergedValue = postState ? postState(chosenValue) : chosenValue; | ||
// ======================= Sync ======================= | ||
innerValue = _useState2[0], | ||
setInnerValue = _useState2[1]; | ||
var mergedValue = value !== undefined ? value : innerValue; | ||
var postMergedValue = postState ? postState(mergedValue) : mergedValue; | ||
// ====================== Change ====================== | ||
var onChangeFn = (0, _useEvent.default)(onChange); | ||
var _React$useState = React.useState([mergedValue]), | ||
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2), | ||
prevValue = _React$useState2[0], | ||
setPrevValue = _React$useState2[1]; | ||
(0, _useLayoutEffect.useLayoutUpdateEffect)(function () { | ||
setMergedValue(function (_ref2) { | ||
var _ref3 = (0, _slicedToArray2.default)(_ref2, 1), | ||
prevValue = _ref3[0]; | ||
return [value, Source.PROP, prevValue]; | ||
}); | ||
}, [value]); | ||
var prev = prevValue[0]; | ||
if (innerValue !== prev) { | ||
onChangeFn(innerValue, prev); | ||
} | ||
}, [prevValue]); | ||
// ====================== Update ====================== | ||
var changeEventPrevRef = React.useRef(); | ||
var triggerChange = (0, _useEvent.default)(function (updater, ignoreDestroy) { | ||
setMergedValue(function (prev) { | ||
var _prev = (0, _slicedToArray2.default)(prev, 3), | ||
prevValue = _prev[0], | ||
prevSource = _prev[1], | ||
prevPrevValue = _prev[2]; | ||
var nextValue = typeof updater === 'function' ? updater(prevValue) : updater; | ||
// Do nothing if value not change | ||
if (nextValue === prevValue) { | ||
return prev; | ||
} | ||
// Use prev prev value if is in a batch update to avoid missing data | ||
var overridePrevValue = prevSource === Source.INNER && changeEventPrevRef.current !== prevPrevValue ? prevPrevValue : prevValue; | ||
return [nextValue, Source.INNER, overridePrevValue]; | ||
}, ignoreDestroy); | ||
setInnerValue(updater, ignoreDestroy); | ||
setPrevValue([mergedValue]); | ||
}); | ||
// ====================== Change ====================== | ||
var onChangeFn = (0, _useEvent.default)(onChange); | ||
(0, _useLayoutEffect.default)(function () { | ||
var _mergedValue = (0, _slicedToArray2.default)(mergedValue, 3), | ||
current = _mergedValue[0], | ||
source = _mergedValue[1], | ||
prev = _mergedValue[2]; | ||
if (current !== prev && source === Source.INNER) { | ||
onChangeFn(current, prev); | ||
changeEventPrevRef.current = prev; | ||
} | ||
}, [mergedValue]); | ||
return [postMergedValue, triggerChange]; | ||
} |
{ | ||
"name": "rc-util", | ||
"version": "5.24.8", | ||
"version": "5.25.0", | ||
"description": "Common Utils For React Component", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
202397
6330