UNPKG

@flexis/ui

Version:

Styleless React Components

412 lines (338 loc) 24.3 kB
"use strict"; var _Object$keys2 = require("@babel/runtime-corejs3/core-js-stable/object/keys"); var _forEachInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/for-each"); var _context3; var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); var _Object$defineProperty2 = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); _Object$defineProperty2(exports, "__esModule", { value: true }); var _exportNames = {}; exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property")); var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-properties")); var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors")); var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each")); var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor")); var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter")); var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols")); var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys")); var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends")); var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice")); var _toArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toArray")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inherits")); var _tslib = require("tslib"); var _react = _interopRequireDefault(require("react")); var _reactDom = require("react-dom"); var _propTypes = _interopRequireDefault(require("prop-types")); var _helpers = require("../../helpers"); var _types = require("../common/types"); var _setOverflowOffset = _interopRequireDefault(require("../common/setOverflowOffset")); var _toggleScrollBlock = _interopRequireDefault(require("../common/toggleScrollBlock")); var _throttleFocus = _interopRequireDefault(require("../common/throttleFocus")); var _StylableTransition = _interopRequireDefault(require("../StylableTransition")); var _DropdownSt = require("./Dropdown.st.css"); var _DropdownContent = require("./DropdownContent"); _forEachInstanceProperty2(_context3 = _Object$keys2(_DropdownContent)).call(_context3, function (key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; _Object$defineProperty2(exports, key, { enumerable: true, get: function get() { return _DropdownContent[key]; } }); }); function ownKeys(object, enumerableOnly) { var keys = (0, _keys.default)(object); if (_getOwnPropertySymbols.default) { var symbols = (0, _getOwnPropertySymbols.default)(object); if (enumerableOnly) symbols = (0, _filter.default)(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor.default)(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; (0, _forEach.default)(_context = ownKeys(Object(source), true)).call(_context, function (key) { (0, _defineProperty3.default)(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors.default) { (0, _defineProperties.default)(target, (0, _getOwnPropertyDescriptors.default)(source)); } else { var _context2; (0, _forEach.default)(_context2 = ownKeys(Object(source))).call(_context2, function (key) { (0, _defineProperty2.default)(target, key, (0, _getOwnPropertyDescriptor.default)(source, key)); }); } } return target; } var _createElement = _react.default.createElement; var PureComponent = _react.default.PureComponent, Children = _react.default.Children, cloneElement = _react.default.cloneElement; var HALF = 2; var ESC_KEY = 27; var Dropdown = /** @class */ function () { var Dropdown = /*#__PURE__*/function (_PureComponent) { (0, _inherits2.default)(Dropdown, _PureComponent); function Dropdown(props) { var _this; (0, _classCallCheck2.default)(this, Dropdown); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Dropdown).call(this, props)); _this.elementRef = null; _this.contentRef = null; _this.unsubscribeFromOutsideClick = null; _this.unblockScroll = null; var defaultActive = props.defaultActive; _this.state = { active: defaultActive, contentWithOffset: false }; return _this; } (0, _createClass2.default)(Dropdown, [{ key: "render", value: function render() { var _this$props = this.props, className = _this$props.className, disabled = _this$props.disabled, children = _this$props.children, props = (0, _objectWithoutProperties2.default)(_this$props, ["className", "disabled", "children"]); var active = this.state.active; var _Children$toArray = Children.toArray(children), _Children$toArray2 = (0, _toArray2.default)(_Children$toArray), toggler = _Children$toArray2[0], content = _Children$toArray2[1], misc = (0, _slice.default)(_Children$toArray2).call(_Children$toArray2, 2); return _createElement("span", (0, _extends2.default)({ ref: this.onElementRef }, (0, _helpers.omit)(props, ['defaultActive', 'active', 'blockScroll', 'align', 'transitionDuration', 'hideOnClick']), { className: (0, _DropdownSt.style)(_DropdownSt.classes.root, { active: active, disabled: disabled }, className), onClick: this.onToggle, "aria-disabled": disabled }), cloneElement(toggler, { 'aria-haspopup': true, 'aria-expanded': active, 'aria-disabled': disabled, 'disabled': disabled }), (0, _reactDom.createPortal)(this.renderContent(toggler, content), document.body), misc); } }, { key: "renderContent", value: function renderContent(toggler, content) { var _style; var _this$props2 = this.props, align = _this$props2.align, transitionDuration = _this$props2.transitionDuration, hideOnClick = _this$props2.hideOnClick; var _this$state = this.state, active = _this$state.active, contentWithOffset = _this$state.contentWithOffset; return _createElement(_StylableTransition.default, { in: active, states: _DropdownSt.cssStates, statesElement: "content", timeout: transitionDuration, appear: true }, cloneElement(content, _objectSpread({}, (0, _helpers.getAriaLabelProps)({ role: 'region', labelledBy: toggler.props.id }, content.props), { 'className': (0, _DropdownSt.style)(_DropdownSt.classes.content, (_style = {}, (0, _defineProperty3.default)(_style, "".concat(align, "Align"), Boolean(align)), (0, _defineProperty3.default)(_style, "offset", contentWithOffset), _style), content.props.className), 'elementRef': this.onContentRef, 'onKeyDown': this.onEscPress, 'aria-hidden': !active, 'hideOnClick': hideOnClick }))); } }, { key: "componentDidMount", value: function componentDidMount() { this.toggleEffects(); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.removeEffects(); } }, { key: "componentDidUpdate", value: function componentDidUpdate(_, _ref) { var prevActive = _ref.active; var active = this.state.active; if (prevActive !== active) { this.toggleEffects(); } } }, { key: "onElementRef", value: function onElementRef(ref) { this.elementRef = ref; } }, { key: "onContentRef", value: function onContentRef(ref) { this.contentRef = ref; } }, { key: "onToggle", value: function onToggle(event) { this.toggleActiveState(null, event); } }, { key: "onEscPress", value: function onEscPress(event) { if (event.keyCode === ESC_KEY) { event.stopPropagation(); this.toggleActiveState(false, event); } } }, { key: "onOutsideClick", value: function onOutsideClick(event) { var active = this.state.active; if (active) { this.toggleActiveState(false, event); } } }, { key: "toggleActiveState", value: function toggleActiveState(forceState) { var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var _this$props3 = this.props, activeProp = _this$props3.active, onToggle = _this$props3.onToggle, disabled = _this$props3.disabled; if (disabled) { return; } var active = this.state.active; var nextActive = typeof forceState === 'boolean' ? forceState : !active; if (nextActive === active) { return; } if (typeof activeProp !== 'boolean') { this.setState(function () { return { active: nextActive }; }); } if (typeof onToggle === 'function') { onToggle(nextActive, event); } } }, { key: "toggleEffects", value: function toggleEffects() { var elementRef = this.elementRef, contentRef = this.contentRef; var blockScroll = this.props.blockScroll; var active = this.state.active; var parentElement = elementRef.parentElement; var outsideClickSubscribed = typeof this.unsubscribeFromOutsideClick === 'function'; if (active) { this.setContentPosition(); (0, _throttleFocus.default)(contentRef); if (!outsideClickSubscribed) { this.unsubscribeFromOutsideClick = (0, _helpers.subscribeEvent)(document, 'click', this.onOutsideClick); } } else { (0, _throttleFocus.default)(elementRef.firstElementChild); if (outsideClickSubscribed) { this.unsubscribeFromOutsideClick(); this.unsubscribeFromOutsideClick = null; } } if (blockScroll) { this.unblockScroll = (0, _toggleScrollBlock.default)(active, this.unblockScroll, parentElement); } } }, { key: "removeEffects", value: function removeEffects() { if (typeof this.unblockScroll === 'function') { this.unblockScroll(); this.unblockScroll = null; } if (typeof this.unsubscribeFromOutsideClick === 'function') { this.unsubscribeFromOutsideClick(); this.unsubscribeFromOutsideClick = null; } } }, { key: "setContentPosition", value: function setContentPosition() { var elementRef = this.elementRef, contentRef = this.contentRef; if (!elementRef || !contentRef) { return; } var align = this.props.align; var _elementRef$getBoundi = elementRef.getBoundingClientRect(), elementTop = _elementRef$getBoundi.top, elementLeft = _elementRef$getBoundi.left, elementWidth = _elementRef$getBoundi.width, elementHeight = _elementRef$getBoundi.height; var contentWidth = contentRef.offsetWidth, style = contentRef.style; var top = 0; var left = 0; top = elementTop + elementHeight; switch (align) { case _types.AlignVariant.Start: left = elementLeft; break; case _types.AlignVariant.Center: left = elementLeft + elementWidth / HALF; break; case _types.AlignVariant.End: left = elementLeft + elementWidth - contentWidth; break; default: } style.minWidth = "".concat(elementWidth, "px"); style.top = "".concat(top, "px"); style.left = "".concat(left, "px"); var withOffset = (0, _setOverflowOffset.default)(contentRef, top, left); this.setState(function () { return { contentWithOffset: withOffset }; }); } }], [{ key: "getDerivedStateFromProps", value: function getDerivedStateFromProps(_ref2, _ref3) { var active = _ref2.active, disabled = _ref2.disabled; var prevActive = _ref3.active; var nextActive = !disabled && (typeof active === 'boolean' ? active : prevActive); if (nextActive === prevActive) { return null; } return { active: nextActive }; } }]); return Dropdown; }(PureComponent); process.env.NODE_ENV !== "production" ? Dropdown.propTypes = { onToggle: _propTypes.default.func, defaultActive: _propTypes.default.bool, active: _propTypes.default.bool, disabled: _propTypes.default.bool, blockScroll: _propTypes.default.bool, hideOnClick: _propTypes.default.bool, align: _propTypes.default.oneOf(_types.AlignValues), children: _propTypes.default.arrayOf(_propTypes.default.element).isRequired, transitionDuration: _propTypes.default.number } : void 0; Dropdown.defaultProps = { defaultActive: false, disabled: false, blockScroll: true, align: _types.AlignVariant.Start, transitionDuration: 0 }; (0, _tslib.__decorate)([(0, _helpers.Bind)()], Dropdown.prototype, "onElementRef", null); (0, _tslib.__decorate)([(0, _helpers.Bind)()], Dropdown.prototype, "onContentRef", null); (0, _tslib.__decorate)([(0, _helpers.Bind)()], Dropdown.prototype, "onToggle", null); (0, _tslib.__decorate)([(0, _helpers.Bind)()], Dropdown.prototype, "onEscPress", null); (0, _tslib.__decorate)([(0, _helpers.Bind)()], Dropdown.prototype, "onOutsideClick", null); return Dropdown; }(); var _default = Dropdown; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFVQTs7QUFHQTs7QUFDQTs7QUFPQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFNQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7QUF3QkEsSUFBTSxJQUFJLEdBQUcsQ0FBYjtBQUNBLElBQU0sT0FBTyxHQUFHLEVBQWhCOztBQUVBLElBQUEsUUFBQTtBQUFBO0FBQUEsWUFBQTtBQUFBLE1BQXFCLFFBQXJCO0FBQUE7O0FBb0RDLHNCQUFZLEtBQVosRUFBaUI7QUFBQTs7QUFBQTtBQUVoQixnSEFBTSxLQUFOO0FBUE8sWUFBQSxVQUFBLEdBQThCLElBQTlCO0FBQ0EsWUFBQSxVQUFBLEdBQTBCLElBQTFCO0FBQ0EsWUFBQSwyQkFBQSxHQUEwQyxJQUExQztBQUNBLFlBQUEsYUFBQSxHQUE0QixJQUE1QjtBQUVTLFVBS2YsYUFMZSxHQU1aLEtBTlksQ0FLZixhQUxlO0FBUWhCLFlBQUssS0FBTCxHQUFhO0FBQ1osUUFBQSxNQUFNLEVBQWEsYUFEUDtBQUVaLFFBQUEsaUJBQWlCLEVBQUU7QUFGUCxPQUFiO0FBUmdCO0FBWWhCOztBQWhFRjtBQUFBO0FBQUEsK0JBa0VPO0FBQUEsMEJBT0QsS0FBSyxLQVBKO0FBQUEsWUFHSixTQUhJLGVBR0osU0FISTtBQUFBLFlBSUosUUFKSSxlQUlKLFFBSkk7QUFBQSxZQUtKLFFBTEksZUFLSixRQUxJO0FBQUEsWUFNRCxLQU5DO0FBQUEsWUFTSixNQVRJLEdBVUQsS0FBSyxLQVZKLENBU0osTUFUSTs7QUFBQSxnQ0FlRCxRQUFRLENBQUMsT0FBVCxDQUFpQixRQUFqQixDQWZDO0FBQUE7QUFBQSxZ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