UNPKG

shineout

Version:

Shein 前端组件库

179 lines (139 loc) 5.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = _default; exports.consumer = void 0; var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireDefault(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _context = _interopRequireDefault(require("../context")); var _component = require("../component"); var _uid = require("../utils/uid"); var _styles = require("./styles"); var context = (0, _context.default)({}); var consumer = function consumer(Origin) { return function (props) { return _react.default.createElement(context.Consumer, null, function (value) { return _react.default.createElement(Origin, (0, _extends2.default)({}, value, props)); }); }; }; /** * @param {*} Component * @param {*} duration * @param {*} type - fade, collapse, tranlate */ exports.consumer = consumer; function _default(Component, _ref) { var _ref$type = _ref.type, type = _ref$type === void 0 ? ['fade'] : _ref$type, _ref$duration = _ref.duration, duration = _ref$duration === void 0 ? 360 : _ref$duration, _ref$display = _ref.display, display = _ref$display === void 0 ? 'block' : _ref$display; var hasCollapse = type.indexOf('collapse') >= 0; var needTransform = type.indexOf('scale-y') >= 0; var Hidable = /*#__PURE__*/ function (_PureComponent) { (0, _inheritsLoose2.default)(Hidable, _PureComponent); function Hidable(props) { var _this; _this = _PureComponent.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "height", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "id", void 0); _this.state = { show: props.show }; _this.height = 0; _this.id = "__hidable_" + (0, _uid.getUidStr)() + "__"; return _this; } var _proto = Hidable.prototype; _proto.componentDidMount = function componentDidMount() { _PureComponent.prototype.componentDidMount.call(this); var el = this.getElement(); if (!el) return; if (hasCollapse) this.height = el.offsetHeight; if (this.props.show) { this.show(); return; } el.style.display = 'none'; if (hasCollapse) { el.style.overflow = 'hidden'; el.style.height = '0px'; } }; _proto.componentDidUpdate = function componentDidUpdate(prevProps) { if (this.props.show === prevProps.show) return; if (this.props.show) this.show();else this.hide(); }; _proto.getElement = function getElement() { return document.querySelector("." + this.id); }; _proto.show = function show() { var _this2 = this; var es = this.getElement().style; es.display = display; setTimeout(function () { if (_this2.$isMounted) { _this2.setState({ show: true }); if (hasCollapse) { es.height = _this2.height + "px"; setTimeout(function () { es.height = 'auto'; es.overflow = ''; }, duration); } } }, 10); }; _proto.hide = function hide() { var _this3 = this; this.setState({ show: false }); var element = this.getElement(); if (hasCollapse) { this.height = element.offsetHeight; element.style.height = this.height + "px"; element.style.overflow = 'hidden'; setTimeout(function () { element.style.height = '0px'; }, 10); } setTimeout(function () { if (_this3.state.show === false && element) { element.style.display = 'none'; } }, duration); }; _proto.render = function render() { var animation = "animation-" + duration; if (!needTransform) { animation = "fade-" + animation; } var className = (0, _classnames.default)(_styles.hidableClass.apply(void 0, ['_'].concat(type, [animation, this.state.show && 'show'])), this.props.className, this.id); var provider = { visible: this.state.show }; return _react.default.createElement(context.Provider, { value: provider }, _react.default.createElement(Component, (0, _extends2.default)({}, this.props, { className: className }))); }; return Hidable; }(_component.PureComponent); (0, _defineProperty2.default)(Hidable, "defaultProps", { className: '', show: false }); return Hidable; }