semantic-ui-react
Version:
The official Semantic-UI-React integration.
201 lines (165 loc) • 7.06 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _invoke2 = _interopRequireDefault(require("lodash/invoke"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireWildcard(require("react"));
var _Portal = _interopRequireDefault(require("../Portal"));
var _Transition = _interopRequireDefault(require("../../modules/Transition"));
var _lib = require("../../lib");
/**
* A sugar for `Portal` and `Transition`.
* @see Portal
* @see Transition
*/
var TransitionablePortal =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(TransitionablePortal, _Component);
function TransitionablePortal(props) {
var _this;
(0, _classCallCheck2["default"])(this, TransitionablePortal);
_this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(TransitionablePortal).call(this, props));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handlePortalClose", function () {
_this.setState({
portalOpen: false
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handlePortalOpen", function () {
_this.setState({
portalOpen: true
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleTransitionHide", function (nothing, data) {
var portalOpen = _this.state.portalOpen;
_this.setState({
transitionVisible: false
});
(0, _invoke2["default"])(_this.props, 'onClose', null, (0, _objectSpread2["default"])({}, data, {
portalOpen: false,
transitionVisible: false
}));
(0, _invoke2["default"])(_this.props, 'onHide', null, (0, _objectSpread2["default"])({}, data, {
portalOpen: portalOpen,
transitionVisible: false
}));
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleTransitionStart", function (nothing, data) {
var portalOpen = _this.state.portalOpen;
var status = data.status;
var transitionVisible = status === _Transition["default"].ENTERING;
(0, _invoke2["default"])(_this.props, 'onStart', null, (0, _objectSpread2["default"])({}, data, {
portalOpen: portalOpen,
transitionVisible: transitionVisible
})); // Heads up! TransitionablePortal fires onOpen callback on the start of transition animation
if (!transitionVisible) return;
_this.setState({
transitionVisible: transitionVisible
});
(0, _invoke2["default"])(_this.props, 'onOpen', null, (0, _objectSpread2["default"])({}, data, {
transitionVisible: transitionVisible,
portalOpen: true
}));
});
_this.state = {
portalOpen: props.open
};
return _this;
} // ----------------------------------------
// Lifecycle
// ----------------------------------------
(0, _createClass2["default"])(TransitionablePortal, [{
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(_ref) {
var open = _ref.open;
this.setState({
portalOpen: open
});
} // ----------------------------------------
// Callback handling
// ----------------------------------------
}, {
key: "render",
// ----------------------------------------
// Render
// ----------------------------------------
value: function render() {
var _this$props = this.props,
children = _this$props.children,
transition = _this$props.transition;
var _this$state = this.state,
portalOpen = _this$state.portalOpen,
transitionVisible = _this$state.transitionVisible;
var open = portalOpen || transitionVisible;
var rest = (0, _lib.getUnhandledProps)(TransitionablePortal, this.props);
return _react["default"].createElement(_Portal["default"], (0, _extends2["default"])({}, rest, {
open: open,
onOpen: this.handlePortalOpen,
onClose: this.handlePortalClose
}), _react["default"].createElement(_Transition["default"], (0, _extends2["default"])({}, transition, {
transitionOnMount: true,
onStart: this.handleTransitionStart,
onHide: this.handleTransitionHide,
visible: portalOpen
}), children));
}
}]);
return TransitionablePortal;
}(_react.Component);
exports["default"] = TransitionablePortal;
(0, _defineProperty2["default"])(TransitionablePortal, "defaultProps", {
transition: {
animation: 'scale',
duration: 400
}
});
(0, _defineProperty2["default"])(TransitionablePortal, "handledProps", ["children", "onClose", "onHide", "onOpen", "onStart", "open", "transition"]);
TransitionablePortal.propTypes = process.env.NODE_ENV !== "production" ? {
/** Primary content. */
children: _propTypes["default"].node.isRequired,
/**
* Called when a close event happens.
*
* @param {SyntheticEvent} event - React's original SyntheticEvent.
* @param {object} data - All props and internal state.
*/
onClose: _propTypes["default"].func,
/**
* Callback on each transition that changes visibility to hidden.
*
* @param {null}
* @param {object} data - All props with transition status and internal state.
*/
onHide: _propTypes["default"].func,
/**
* Called when an open event happens.
*
* @param {SyntheticEvent} event - React's original SyntheticEvent.
* @param {object} data - All props and internal state.
*/
onOpen: _propTypes["default"].func,
/**
* Callback on animation start.
*
* @param {null}
* @param {object} data - All props with transition status and internal state.
*/
onStart: _propTypes["default"].func,
/** Controls whether or not the portal is displayed. */
open: _propTypes["default"].bool,
/** Transition props. */
transition: _propTypes["default"].object
} : {};