UNPKG

@talend/react-components

Version:
109 lines (108 loc) 4.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.overlayPropTypes = exports.default = void 0; var _react = require("react"); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactBootstrap = require("@talend/react-bootstrap"); var _classnames = _interopRequireDefault(require("classnames")); var _OverlayTrigger = _interopRequireDefault(require("./OverlayTrigger.forked")); var _Inject = _interopRequireDefault(require("../Inject")); var _overlay = require("./overlay"); var _OverlayTriggerModule = _interopRequireDefault(require("./OverlayTrigger.module.scss")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const overlayPropTypes = exports.overlayPropTypes = { ..._OverlayTrigger.default.propTypes, overlayComponent: _Inject.default.getReactElement.propTypes, overlayId: _propTypes.default.string, overlayPlacement: _OverlayTrigger.default.propTypes.placement, overlayRef: _propTypes.default.func, preventScrolling: _propTypes.default.bool }; function getPlacement(initialOverlayElement, triggerElement, currentPlacement) { const overlayElement = (0, _overlay.getOverlayElement)(initialOverlayElement); const containerElement = (0, _overlay.getContainerElement)(overlayElement); const containerRect = containerElement.getBoundingClientRect(); const overlayRect = overlayElement.getBoundingClientRect(); const triggerRect = triggerElement.getBoundingClientRect(); return (0, _overlay.getAdaptedPlacement)(triggerRect, overlayRect, containerRect, currentPlacement); } class OverlayTrigger extends _react.Component { constructor(props) { super(props); this.setTriggerElement = this.setTriggerElement.bind(this); this.onEntering = this.onEntering.bind(this); this.onExited = this.onExited.bind(this); this.state = { placement: this.props.overlayPlacement }; } onExited() { this.setState({ placement: this.props.overlayPlacement }); } onEntering(initialOverlayElement) { this.setState(previousState => { const adaptedPlacement = getPlacement(initialOverlayElement, this.triggerElement, previousState.placement); if (adaptedPlacement === previousState.placement) { return null; } return { placement: adaptedPlacement }; }); } setTriggerElement(element) { this.triggerElement = element; } render() { const popoverContent = this.props.getComponent ? _Inject.default.getReactElement(this.props.getComponent, this.props.overlayComponent) : this.props.overlayComponent; const props = { placement: this.state.placement, onClick: this.props.onClick, onEntering: this.onEntering, onExited: this.onExited, overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Popover, { id: this.props.overlayId, children: popoverContent }), ref: this.props.overlayRef, rootClose: true, trigger: this.props.trigger }; const tooltipProps = { onMouseOver: this.props.onMouseOver, onMouseOut: this.props.onMouseOut, onFocus: this.props.onFocus, onBlur: this.props.onBlur }; if (this.props.preventScrolling) { props.container = this; } return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", { ref: this.setTriggerElement, className: (0, _classnames.default)(_OverlayTriggerModule.default['tc-action-button-positionned'], 'tc-action-button-positionned'), children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OverlayTrigger.default, { ...props, children: /*#__PURE__*/(0, _react.cloneElement)(this.props.children, tooltipProps) }) }); } } exports.default = OverlayTrigger; OverlayTrigger.propTypes = { children: _propTypes.default.element, getComponent: _propTypes.default.func, onClick: _propTypes.default.func, trigger: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]), ...overlayPropTypes }; OverlayTrigger.defaultProps = { // eslint-disable-next-line react/default-props-match-prop-types preventScrolling: false, trigger: 'click' }; //# sourceMappingURL=OverlayTrigger.component.js.map