Socket
Socket
Sign inDemoInstall

rc-util

Package Overview
Dependencies
Maintainers
8
Versions
211
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rc-util - npm Package Compare versions

Comparing version 5.24.8 to 5.25.0

74

es/hooks/useMergedState.js
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": [

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc