UNPKG

office-ui-fabric-react

Version:

Reusable React components for building experiences for Office 365.

128 lines 5.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /* tslint:disable:no-unused-variable */ var React = require("react"); /* tslint:enable:no-unused-variable */ var Utilities_1 = require("../../Utilities"); var ExpandingCard_1 = require("./ExpandingCard"); var ExpandingCard_Props_1 = require("./ExpandingCard.Props"); var HoverCard_styles_1 = require("./HoverCard.styles"); var HoverCard = (function (_super) { tslib_1.__extends(HoverCard, _super); // Constructor function HoverCard(props) { var _this = _super.call(this, props) || this; _this.state = { isHoverCardVisible: false, mode: ExpandingCard_Props_1.ExpandingCardMode.compact }; return _this; } HoverCard.prototype.componentDidMount = function () { var target = this._getTargetElement(); this._events.on(target, 'mouseenter', this._cardOpen); this._events.on(target, 'mouseleave', this._cardDismiss); this._events.on(target, 'focus', this._cardOpen); this._events.on(target, 'blur', this._cardDismiss); if (this.props.instantOpenOnClick) { this._events.on(target, 'click', this._instantOpenExpanded); } else { this._events.on(target, 'mousedown', this._cardDismiss); this._events.on(target, 'keydown', this._cardDismiss); } }; HoverCard.prototype.componentWillUpdate = function (newProps, newState) { var _this = this; if (newState.isHoverCardVisible !== this.state.isHoverCardVisible) { if (newState.isHoverCardVisible) { this._async.setTimeout(function () { _this.setState({ mode: ExpandingCard_Props_1.ExpandingCardMode.expanded }); }, this.props.expandedCardOpenDelay); } else { this.setState({ mode: ExpandingCard_Props_1.ExpandingCardMode.compact }); } } }; // Render HoverCard.prototype.render = function () { var _a = this.props, expandingCardProps = _a.expandingCardProps, children = _a.children, id = _a.id, instantOpenOnClick = _a.instantOpenOnClick, _b = _a.setAriaDescribedBy, setAriaDescribedBy = _b === void 0 ? true : _b, customStyles = _a.styles; var _c = this.state, isHoverCardVisible = _c.isHoverCardVisible, mode = _c.mode; var hoverCardId = id || Utilities_1.getId('hoverCard'); this._styles = HoverCard_styles_1.getStyles(customStyles); return (React.createElement("div", { className: Utilities_1.css(this._styles.host), ref: this._resolveRef('_hoverCard'), "aria-describedby": setAriaDescribedBy && isHoverCardVisible ? hoverCardId : undefined }, children, isHoverCardVisible && React.createElement(ExpandingCard_1.ExpandingCard, tslib_1.__assign({ componentRef: this._resolveRef('_expandingCard') }, Utilities_1.getNativeProps(this.props, Utilities_1.divProperties), { id: hoverCardId, targetElement: this._getTargetElement(), onEnter: this._cardOpen, onLeave: this._cardDismiss, mode: mode }, expandingCardProps)))); }; HoverCard.prototype._getTargetElement = function () { var target = this.props.target; switch (typeof target) { case 'string': return Utilities_1.getDocument().querySelector(target); case 'object': return target; default: return this._hoverCard; } }; // Show HoverCard HoverCard.prototype._cardOpen = function (ev) { var _this = this; this._async.clearTimeout(this._dismissTimerId); this._currentMouseTarget = ev.currentTarget; this._openTimerId = this._async.setTimeout(function () { if (!_this.state.isHoverCardVisible) { _this.setState({ isHoverCardVisible: true, mode: ExpandingCard_Props_1.ExpandingCardMode.compact }); } }, this.props.cardOpenDelay); }; // Hide HoverCard HoverCard.prototype._cardDismiss = function (ev) { var _this = this; this._async.clearTimeout(this._openTimerId); // Dismiss if not sticky and currentTarget is the same element that mouse last entered if (!this.props.sticky && this._currentMouseTarget === ev.currentTarget) { this._dismissTimerId = this._async.setTimeout(function () { _this.setState({ isHoverCardVisible: false, mode: ExpandingCard_Props_1.ExpandingCardMode.compact }); }, this.props.cardDismissDelay); } }; // Instant Open the card in Expanded mode HoverCard.prototype._instantOpenExpanded = function (ev) { this.setState({ isHoverCardVisible: true, mode: ExpandingCard_Props_1.ExpandingCardMode.expanded }); }; HoverCard.defaultProps = { cardOpenDelay: 500, cardDismissDelay: 100, expandedCardOpenDelay: 1500, instantOpenOnClick: false }; tslib_1.__decorate([ Utilities_1.autobind ], HoverCard.prototype, "_cardOpen", null); tslib_1.__decorate([ Utilities_1.autobind ], HoverCard.prototype, "_cardDismiss", null); tslib_1.__decorate([ Utilities_1.autobind ], HoverCard.prototype, "_instantOpenExpanded", null); return HoverCard; }(Utilities_1.BaseComponent)); exports.HoverCard = HoverCard; //# sourceMappingURL=HoverCard.js.map