UNPKG

shineout

Version:

Shein 前端组件库

192 lines (148 loc) 6.02 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty4 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = require("react"); var _propTypes = _interopRequireDefault(require("prop-types")); var _uid = require("../utils/uid"); var MAX_SIGNED_31_BIT_INT = 1073741823; // Inlined Object.is polyfill. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is function objectIs(x, y) { if (x === y) { return x !== 0 || 1 / x === 1 / y; } return x !== x && y !== y; } function createEventEmitter(value) { var handlers = []; return { on: function on(handler) { handlers.push(handler); }, off: function off(handler) { handlers = handlers.filter(function (h) { return h !== handler; }); }, get: function get() { return value; }, set: function set(newValue, changedBits) { value = newValue; handlers.forEach(function (handler) { return handler(value, changedBits); }); } }; } function onlyChild(children) { return Array.isArray(children) ? children[0] : children; } function createReactContext(defaultValue, calculateChangedBits) { var _defineProperty2, _defineProperty3; var contextProp = "__create-react-context-" + (0, _uid.getUidStr)() + "__"; var Provider = /*#__PURE__*/ function (_Component) { (0, _inheritsLoose2.default)(Provider, _Component); function Provider() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _Component.call.apply(_Component, [this].concat(args)) || this; (0, _defineProperty4.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "emitter", createEventEmitter(_this.props.value)); return _this; } var _proto = Provider.prototype; _proto.getChildContext = function getChildContext() { var _ref; return _ref = {}, _ref[contextProp] = this.emitter, _ref; }; _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { if (this.props.value !== nextProps.value) { var oldValue = this.props.value; var newValue = nextProps.value; var changedBits; if (objectIs(oldValue, newValue)) { changedBits = 0; // No change } else { changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT; changedBits |= 0; if (changedBits !== 0) { this.emitter.set(nextProps.value, changedBits); } } } }; _proto.render = function render() { return this.props.children; }; return Provider; }(_react.Component); (0, _defineProperty4.default)(Provider, "childContextTypes", (_defineProperty2 = {}, _defineProperty2[contextProp] = _propTypes.default.object.isRequired, _defineProperty2)); var Consumer = /*#__PURE__*/ function (_Component2) { (0, _inheritsLoose2.default)(Consumer, _Component2); function Consumer() { var _this2; for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } _this2 = _Component2.call.apply(_Component2, [this].concat(args)) || this; (0, _defineProperty4.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this2)), "observedBits", void 0); (0, _defineProperty4.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this2)), "state", { value: _this2.getValue() }); (0, _defineProperty4.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this2)), "onUpdate", function (newValue, changedBits) { var observedBits = _this2.observedBits | 0; if ((observedBits & changedBits) !== 0) { _this2.setState({ value: _this2.getValue() }); } }); return _this2; } var _proto2 = Consumer.prototype; _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { var observedBits = nextProps.observedBits; this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default : observedBits; }; _proto2.componentDidMount = function componentDidMount() { if (this.context[contextProp]) { this.context[contextProp].on(this.onUpdate); } var observedBits = this.props.observedBits; this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default : observedBits; }; _proto2.componentWillUnmount = function componentWillUnmount() { if (this.context[contextProp]) { this.context[contextProp].off(this.onUpdate); } }; _proto2.getValue = function getValue() { if (this.context[contextProp]) { return this.context[contextProp].get(); } return defaultValue; }; _proto2.render = function render() { return onlyChild(this.props.children)(this.state.value); }; return Consumer; }(_react.Component); (0, _defineProperty4.default)(Consumer, "contextTypes", (_defineProperty3 = {}, _defineProperty3[contextProp] = _propTypes.default.object, _defineProperty3)); return { Provider: Provider, Consumer: Consumer }; } var _default = createReactContext; exports.default = _default;