@kiwicom/smart-faq
Version:
225 lines (178 loc) • 8.46 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.UnwrappedGuaranteeChat = void 0;
var _style = _interopRequireDefault(require("styled-jsx/style"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var React = _interopRequireWildcard(require("react"));
var _reactRouterDom = require("react-router-dom");
var _classnames = _interopRequireDefault(require("classnames"));
var _Button = _interopRequireDefault(require("@kiwicom/orbit-components/lib/Button"));
var _Text = _interopRequireDefault(require("@kiwicom/orbit-components/lib/Text"));
var _Chat = _interopRequireDefault(require("@kiwicom/orbit-components/lib/icons/Chat"));
var chatUtils = _interopRequireWildcard(require("./chatUtils"));
var _trackers = require("../../helpers/analytics/trackers");
var _GuaranteeChatInfo = require("../../context/GuaranteeChatInfo");
// @flow
var GuaranteeChat =
/*#__PURE__*/
function (_React$Component) {
(0, _inherits2.default)(GuaranteeChat, _React$Component);
function GuaranteeChat() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, GuaranteeChat);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(GuaranteeChat)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "chatContainer", void 0);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "state", {
showButton: true,
isClosable: true,
isChatReady: false
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "onChangeIsClosable", function (isClosable
/*: boolean*/
) {
_this.setState({
isClosable: isClosable
});
_this.props.onAppWithOpenChatClose(isClosable);
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "onClickDisplayChat", function () {
_this.setState({
showButton: false
});
if (!window.webchat) {
throw new Error('Unexpected: webchat not initialized.');
}
var guaranteeChatBookingInfo = _this.props.guaranteeChatBookingInfo;
chatUtils.setData(window.webchat, guaranteeChatBookingInfo);
(0, _trackers.simpleTracker)('smartFAQBookingOverview', {
action: 'chatOpened'
});
window.webchat.renderFrame({
containerEl: 'smartFAQGuarantee'
});
_this.onChangeIsClosable(false);
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "onChatEnded", function () {
_this.onChangeIsClosable(true);
});
return _this;
}
(0, _createClass2.default)(GuaranteeChat, [{
key: "componentDidMount",
value: function () {
var _componentDidMount = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee() {
var chatConfig;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!((typeof window === "undefined" ? "undefined" : (0, _typeof2.default)(window)) !== 'object')) {
_context.next = 2;
break;
}
return _context.abrupt("return");
case 2:
chatConfig = this.props.chatConfig;
_context.next = 5;
return chatUtils.initialize(chatConfig);
case 5:
window.webchat.chatEnded = this.onChatEnded; // eslint-disable-next-line react/no-did-mount-set-state
this.setState({
isChatReady: true
});
if (window.webchat.isAutoJoined()) {
this.onChangeIsClosable(false); // eslint-disable-next-line react/no-did-mount-set-state
this.setState({
showButton: false
});
}
case 8:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function componentDidMount() {
return _componentDidMount.apply(this, arguments);
};
}()
}, {
key: "render",
value: function render() {
var _this2 = this;
var _this$state = this.state,
showButton = _this$state.showButton,
isChatReady = _this$state.isChatReady;
return React.createElement(React.Fragment, null, this.state.showButton && React.createElement(React.Fragment, null, React.createElement(_Text.default, null, "Still not sure what to do or how the Guarantee works? Let's talk. One of our agents will gladly assist you."), React.createElement("div", {
"data-cy": "guaranteeChatButton",
className: "jsx-3069554095" + " " + "chatButton"
}, React.createElement(_Button.default, {
type: "secondary",
size: "normal",
icon: React.createElement(_Chat.default, null),
disabled: !isChatReady,
onClick: this.onClickDisplayChat
}, "Guarantee Chat"))), React.createElement("div", {
id: "smartFAQGuarantee",
ref: function ref(c) {
_this2.chatContainer = c;
},
"data-cy": "guaranteeChatIFrame",
className: "jsx-3069554095" + " " + ((0, _classnames.default)('smartFAQGuarantee', {
open: !showButton
}) || "")
}), React.createElement(_reactRouterDom.Prompt, {
when: !this.state.isClosable,
message: "Closing this window will cause the chat connection to be interrupted, do you want to proceed?"
}), React.createElement(_style.default, {
styleId: "3069554095",
css: ".chatButton.jsx-3069554095{margin-top:16px;margin-bottom:40px;}.smartFAQGuarantee.open.jsx-3069554095{height:500px;}"
}));
}
}]);
return GuaranteeChat;
}(React.Component);
var TrackedGuaranteeChat = (0, _trackers.EnterTracker)(GuaranteeChat, 'smartFAQBookingOverview', function () {
return {
action: 'chatDisplayed'
};
});
var WrappedGuaranteeChat = function WrappedGuaranteeChat(props
/*: {||}*/
) {
return React.createElement(_GuaranteeChatInfo.GuaranteeChatInfoState.Consumer, null, function (_ref) {
var guaranteeChatBookingInfo = _ref.guaranteeChatBookingInfo,
chatConfig = _ref.chatConfig,
onAppWithOpenChatClose = _ref.onAppWithOpenChatClose;
return React.createElement(TrackedGuaranteeChat, (0, _extends2.default)({}, props, {
guaranteeChatBookingInfo: guaranteeChatBookingInfo,
chatConfig: chatConfig,
onAppWithOpenChatClose: onAppWithOpenChatClose
}));
});
};
var UnwrappedGuaranteeChat = GuaranteeChat;
exports.UnwrappedGuaranteeChat = UnwrappedGuaranteeChat;
var _default = WrappedGuaranteeChat;
exports.default = _default;