UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

139 lines (102 loc) 4.22 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _getValidProps = _interopRequireDefault(require("@helpscout/react-utils/dist/getValidProps")); var _LoadingDots = _interopRequireDefault(require("../LoadingDots")); var _classnames = _interopRequireDefault(require("classnames")); var _MessageEmbed = require("./Message.Embed.css"); var _jsxRuntime = require("react/jsx-runtime"); var MessageEmbed = /*#__PURE__*/function (_React$Component) { (0, _inheritsLoose2.default)(MessageEmbed, _React$Component); function MessageEmbed() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; _this.state = { isLoading: true }; _this.context = void 0; _this.node = void 0; _this.loadContent = function () { if (!_this.node) return; var iframes = _this.node.getElementsByTagName('iframe'); if (!iframes.length) { return _this.toggleLoading(); } var iframe = iframes[0]; iframe.onload = _this.toggleLoading; }; _this.toggleLoading = function () { _this.setState({ isLoading: !_this.state.isLoading }); }; _this.setNodeRef = function (node) { return _this.node = node; }; return _this; } var _proto = MessageEmbed.prototype; _proto.componentDidMount = function componentDidMount() { this.loadContent(); }; _proto.render = function render() { var _this$props = this.props, className = _this$props.className, html = _this$props.html, rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, ["className", "html"]); var isLoading = this.state.isLoading; var theme = this.context.theme; var componentClassName = (0, _classnames.default)('c-MessageEmbed', isLoading && 'is-loading', theme && "is-theme-" + theme, className); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_MessageEmbed.EmbedUI, (0, _extends2.default)({}, (0, _getValidProps.default)(rest), { bubbleClassName: "c-MessageEmbed__bubble", className: componentClassName, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", { dangerouslySetInnerHTML: { __html: html || '' }, className: "c-MessageEmbed__html", ref: this.setNodeRef }), isLoading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingDots.default, { className: "c-MessageEmbed__loading" })] })); }; return MessageEmbed; }(_react.default.Component); MessageEmbed.defaultProps = { 'data-cy': 'MessageEmbed' }; MessageEmbed.propTypes = { /** Custom class names to be added to the component. */ className: _propTypes.default.string, /** Provides author information and applies "From" styles. */ from: _propTypes.default.any, /** HTML markup to be dangerously set inside the component. */ html: _propTypes.default.string, /** Applies the "Note" theme styles. */ isNote: _propTypes.default.bool, /** Applies left-to-right text styles. */ ltr: _propTypes.default.bool, /** Determines if the Message is read. */ read: _propTypes.default.bool, /** Applies right-to-left text styles. */ rtl: _propTypes.default.bool, /** Timestamp for the Message. */ timestamp: _propTypes.default.string, /** Provides author information and applies "To" styles. */ to: _propTypes.default.any, /** Callback when clicked. */ onClick: _propTypes.default.func, type: _propTypes.default.oneOf(['action', 'message', '']) }; var _default = MessageEmbed; exports.default = _default;