ffr-components
Version:
Fiori styled UI components
133 lines (113 loc) • 5.38 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
import _inherits from "@babel/runtime/helpers/esm/inherits";
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(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) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
import chain from 'chain-function';
import classnames from 'classnames';
import Popper from './_Popper';
import React, { Component } from 'react';
import "./style.css";
import "../theme/theme.css";
import { POPPER_PLACEMENTS, defaultPopperModifiers } from './constant';
var Popover =
/*#__PURE__*/
function (_Component) {
_inherits(Popover, _Component);
function Popover(props) {
var _this;
_classCallCheck(this, Popover);
_this = _possibleConstructorReturn(this, _getPrototypeOf(Popover).call(this, props));
_this.triggerBody = function () {
var toggleMenu = _this.props.toggleMenu;
if (!_this.props.disabled) {
_this.setState(function (prevState) {
var expand = !prevState.isExpanded;
toggleMenu(expand);
return {
isExpanded: expand
};
});
}
};
_this.handleOutsideClick = function () {
var toggleMenu = _this.props.toggleMenu;
if (_this.state.isExpanded) {
_this.setState({
isExpanded: false
}, function () {
toggleMenu(false);
});
}
};
_this.state = {
isExpanded: false
};
return _this;
}
_createClass(Popover, [{
key: "render",
value: function render() {
var _this$props = this.props,
disableEdgeDetection = _this$props.disableEdgeDetection,
onClickOutside = _this$props.onClickOutside,
onEscapeKey = _this$props.onEscapeKey,
disabled = _this$props.disabled,
noArrow = _this$props.noArrow,
control = _this$props.control,
body = _this$props.body,
className = _this$props.className,
placement = _this$props.placement,
popperProps = _this$props.popperProps,
toggleMenu = _this$props.toggleMenu,
referenceProps = _this$props.referenceProps,
suggestUpdate = _this$props.suggestUpdate,
_this$props$popperMod = _this$props.popperModifiers,
popperModifiers = _this$props$popperMod === void 0 ? {} : _this$props$popperMod,
rest = _objectWithoutProperties(_this$props, ["disableEdgeDetection", "onClickOutside", "onEscapeKey", "disabled", "noArrow", "control", "body", "className", "placement", "popperProps", "toggleMenu", "referenceProps", "suggestUpdate", "popperModifiers"]);
var onClickFunctions = this.triggerBody;
if (control.props.onClick) {
onClickFunctions = chain(this.triggerBody, control.props.onClick);
}
var referenceComponent = React.cloneElement(control, {
onClick: onClickFunctions
});
var popoverClasses = classnames('fd-popover', className);
var finalPopModifier = _objectSpread({}, defaultPopperModifiers, {}, popperModifiers);
return React.createElement("div", _extends({}, rest, {
className: popoverClasses
}), React.createElement(Popper, {
cssBlock: "fd-popover",
disableEdgeDetection: disableEdgeDetection,
noArrow: noArrow,
onClickOutside: chain(this.handleOutsideClick, onClickOutside),
onEscapeKey: chain(this.handleOutsideClick, onEscapeKey),
popperPlacement: placement,
popperProps: popperProps,
referenceClassName: "fd-popover__control",
referenceComponent: referenceComponent,
referenceProps: referenceProps,
show: this.state.isExpanded && !disabled,
popperModifiers: finalPopModifier,
usePortal: true,
suggestUpdate: true
}, body));
}
}]);
return Popover;
}(Component);
Popover.POPPER_PLACEMENTS = POPPER_PLACEMENTS;
Popover.defaultProps = {
onClickOutside: function onClickOutside() {},
onEscapeKey: function onEscapeKey() {},
toggleMenu: function toggleMenu() {},
suggestUpdate: false,
popperModifiers: defaultPopperModifiers
};
Popover.displayName = 'Popover';
export default Popover;