@talend/react-components
Version:
Set of react components.
109 lines (108 loc) • 4.29 kB
JavaScript
"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