UNPKG

botframework-webchat-component

Version:
95 lines (88 loc) 18.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createCoreMiddleware; var _react = _interopRequireDefault(require("react")); var _CarouselLayout = _interopRequireDefault(require("../../Activity/CarouselLayout")); var _StackedLayout = _interopRequireDefault(require("../../Activity/StackedLayout")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function createCoreMiddleware() { return [function () { return function (next) { return function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var activity = args[0].activity; // TODO: [P4] Can we simplify these if-statement to something more readable? var type = activity.type; if (type === 'typing') { if (!('text' in activity && typeof activity.text === 'string' && activity.channelData.streamType !== 'informative')) { // If it is an informative message, hide it until we have a design for informative message. return false; } // Should show if this is useActiveTyping()[0][*].firstActivity, and render it with the content of lastActivity. return function renderStackedLayout(renderAttachment, props) { typeof props === 'undefined' && console.warn('botframework-webchat: One or more arguments were missing after passing through the activity middleware. Please check your custom activity middleware to make sure it passes all arguments.'); return /*#__PURE__*/_react.default.createElement(_StackedLayout.default, _extends({ activity: _objectSpread(_objectSpread({}, activity), {}, { type: 'message' }), renderAttachment: renderAttachment }, props)); }; } // Filter out activities that should not be visible if (type === 'conversationUpdate' || type === 'event' || type === 'invoke') { return false; } else if (type === 'message') { var attachments = activity.attachments, channelData = activity.channelData, text = activity.text; if ( // Do not show postback channelData !== null && channelData !== void 0 && channelData.postBack || // Do not show messageBack if displayText is undefined channelData !== null && channelData !== void 0 && channelData.messageBack && !channelData.messageBack.displayText || // Do not show empty bubbles (no text and attachments, and not "typing") !(text || attachments !== null && attachments !== void 0 && attachments.length)) { return false; } } if (type === 'message' || type === 'typing') { var _activity$attachments; if (type === 'message' && (((_activity$attachments = activity.attachments) === null || _activity$attachments === void 0 ? void 0 : _activity$attachments.length) || 0) > 1 && activity.attachmentLayout === 'carousel') { // The following line is not a React functional component, it's a render function called by useCreateActivityRenderer() hook. // The function signature need to be compatible with older version of activity middleware, which was: // // renderActivity( // renderAttachment: ({ activity, attachment }) => React.Element // ) => React.Element return function renderCarouselLayout(renderAttachment, props) { typeof props === 'undefined' && console.warn('botframework-webchat: One or more arguments were missing after passing through the activity middleware. Please check your custom activity middleware to make sure it passes all arguments.'); return /*#__PURE__*/_react.default.createElement(_CarouselLayout.default, _extends({ activity: activity, renderAttachment: renderAttachment }, props)); }; } // The following line is not a React functional component, it's a render function called by useCreateActivityRenderer() hook. return function renderStackedLayout(renderAttachment, props) { typeof props === 'undefined' && console.warn('botframework-webchat: One or more arguments were missing after passing through the activity middleware. Please check your custom activity middleware to make sure it passes all arguments.'); return /*#__PURE__*/_react.default.createElement(_StackedLayout.default, _extends({ activity: activity, renderAttachment: renderAttachment }, props)); }; } return next.apply(void 0, args); }; }; }]; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9DYXJvdXNlbExheW91dCIsIl9TdGFja2VkTGF5b3V0Iiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZXh0ZW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImJpbmQiLCJ0YXJnZXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImNyZWF0ZUNvcmVNaWRkbGV3YXJlIiwibmV4dCIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiYWN0aXZpdHkiLCJ0eXBlIiwidGV4dCIsImNoYW5uZWxEYXRhIiwic3RyZWFtVHlwZSIsInJlbmRlclN0YWNrZWRMYXlvdXQiLCJyZW5kZXJBdHRhY2htZW50IiwicHJvcHMiLCJjb25zb2xlIiwid2FybiIsImNyZWF0ZUVsZW1lbnQiLCJhdHRhY2htZW50cyIsInBvc3RCYWNrIiwibWVzc2FnZUJhY2siLCJkaXNwbGF5VGV4dCIsIl9hY3Rpdml0eSRhdHRhY2htZW50cyIsImF0dGFjaG1lbnRMYXlvdXQiLCJyZW5kZXJDYXJvdXNlbExheW91dCJdLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL01pZGRsZXdhcmUvQWN0aXZpdHkvY3JlYXRlQ29yZU1pZGRsZXdhcmUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2aXR5TWlkZGxld2FyZSB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWFwaSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQ2Fyb3VzZWxMYXlvdXQgZnJvbSAnLi4vLi4vQWN0aXZpdHkvQ2Fyb3VzZWxMYXlvdXQnO1xuaW1wb3J0IFN0YWNrZWRMYXlvdXQgZnJvbSAnLi4vLi4vQWN0aXZpdHkvU3RhY2tlZExheW91dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNvcmVNaWRkbGV3YXJlKCk6IEFjdGl2aXR5TWlkZGxld2FyZVtdIHtcbiAgcmV0dXJuIFtcbiAgICAoKSA9PlxuICAgICAgbmV4dCA9PlxuICAgICAgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgW3sgYWN0aXZpdHkgfV0gPSBhcmdzO1xuXG4gICAgICAgIC8vIFRPRE86IFtQNF0gQ2FuIHdlIHNpbXBsaWZ5IHRoZXNlIGlmLXN0YXRlbWVudCB0byBzb21ldGhpbmcgbW9yZSByZWFkYWJsZT9cblxuICAgICAgICBjb25zdCB7IHR5cGUgfSA9IGFjdGl2aXR5O1xuXG4gICAgICAgIGlmICh0eXBlID09PSAndHlwaW5nJykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICd0ZXh0JyBpbiBhY3Rpdml0eSAmJlxuICAgICAgICAgICAgICB0eXBlb2YgYWN0aXZpdHkudGV4dCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgYWN0aXZpdHkuY2hhbm5lbERhdGEuc3RyZWFtVHlwZSAhPT0gJ2luZm9ybWF0aXZlJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgaXQgaXMgYW4gaW5mb3JtYXRpdmUgbWVzc2FnZSwgaGlkZSBpdCB1bnRpbCB3ZSBoYXZlIGEgZGVzaWduIGZvciBpbmZvcm1hdGl2ZSBtZXNzYWdlLlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNob3VsZCBzaG93IGlmIHRoaXMgaXMgdXNlQWN0aXZlVHlwaW5nKClbMF1bKl0uZmlyc3RBY3Rpdml0eSwgYW5kIHJlbmRlciBpdCB3aXRoIHRoZSBjb250ZW50IG9mIGxhc3RBY3Rpdml0eS5cbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmVuZGVyU3RhY2tlZExheW91dChyZW5kZXJBdHRhY2htZW50LCBwcm9wcykge1xuICAgICAgICAgICAgdHlwZW9mIHByb3BzID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBPbmUgb3IgbW9yZSBhcmd1bWVudHMgd2VyZSBtaXNzaW5nIGFmdGVyIHBhc3NpbmcgdGhyb3VnaCB0aGUgYWN0aXZpdHkgbWlkZGxld2FyZS4gUGxlYXNlIGNoZWNrIHlvdXIgY3VzdG9tIGFjdGl2aXR5IG1pZGRsZXdhcmUgdG8gbWFrZSBzdXJlIGl0IHBhc3NlcyBhbGwgYXJndW1lbnRzLidcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFN0YWNrZWRMYXlvdXRcbiAgICAgICAgICAgICAgICBhY3Rpdml0eT17eyAuLi5hY3Rpdml0eSwgdHlwZTogJ21lc3NhZ2UnIH0gYXMgYW55fVxuICAgICAgICAgICAgICAgIHJlbmRlckF0dGFjaG1lbnQ9e3JlbmRlckF0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlsdGVyIG91dCBhY3Rpdml0aWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB2aXNpYmxlXG4gICAgICAgIGlmICh0eXBlID09PSAnY29udmVyc2F0aW9uVXBkYXRlJyB8fCB0eXBlID09PSAnZXZlbnQnIHx8IHR5cGUgPT09ICdpbnZva2UnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIGNoYW5uZWxEYXRhLCB0ZXh0IH0gPSBhY3Rpdml0eTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIERvIG5vdCBzaG93IHBvc3RiYWNrXG4gICAgICAgICAgICBjaGFubmVsRGF0YT8ucG9zdEJhY2sgfHxcbiAgICAgICAgICAgIC8vIERvIG5vdCBzaG93IG1lc3NhZ2VCYWNrIGlmIGRpc3BsYXlUZXh0IGlzIHVuZGVmaW5lZFxuICAgICAgICAgICAgKGNoYW5uZWxEYXRhPy5tZXNzYWdlQmFjayAmJiAhY2hhbm5lbERhdGEubWVzc2FnZUJhY2suZGlzcGxheVRleHQpIHx8XG4gICAgICAgICAgICAvLyBEbyBub3Qgc2hvdyBlbXB0eSBidWJibGVzIChubyB0ZXh0IGFuZCBhdHRhY2htZW50cywgYW5kIG5vdCBcInR5cGluZ1wiKVxuICAgICAgICAgICAgISh0ZXh0IHx8IGF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdtZXNzYWdlJyB8fCB0eXBlID09PSAndHlwaW5nJykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGUgPT09ICdtZXNzYWdlJyAmJlxuICAgICAgICAgICAgKGFjdGl2aXR5LmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgMCkgPiAxICYmXG4gICAgICAgICAgICBhY3Rpdml0eS5hdHRhY2htZW50TGF5b3V0ID09PSAnY2Fyb3VzZWwnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGxpbmUgaXMgbm90IGEgUmVhY3QgZnVuY3Rpb25hbCBjb21wb25lbnQsIGl0J3MgYSByZW5kZXIgZnVuY3Rpb24gY2FsbGVkIGJ5IHVzZUNyZWF0ZUFjdGl2aXR5UmVuZGVyZXIoKSBob29rLlxuICAgICAgICAgICAgLy8gVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBuZWVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9uIG9mIGFjdGl2aXR5IG1pZGRsZXdhcmUsIHdoaWNoIHdhczpcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyByZW5kZXJBY3Rpdml0eShcbiAgICAgICAgICAgIC8vICAgcmVuZGVyQXR0YWNobWVudDogKHsgYWN0aXZpdHksIGF0dGFjaG1lbnQgfSkgPT4gUmVhY3QuRWxlbWVudFxuICAgICAgICAgICAgLy8gKSA9PiBSZWFjdC5FbGVtZW50XG5cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByZW5kZXJDYXJvdXNlbExheW91dChyZW5kZXJBdHRhY2htZW50LCBwcm9wcykge1xuICAgICAgICAgICAgICB0eXBlb2YgcHJvcHMgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBPbmUgb3IgbW9yZSBhcmd1bWVudHMgd2VyZSBtaXNzaW5nIGFmdGVyIHBhc3NpbmcgdGhyb3VnaCB0aGUgYWN0aXZpdHkgbWlkZGxld2FyZS4gUGxlYXNlIGNoZWNrIHlvdXIgY3VzdG9tIGFjdGl2aXR5IG1pZGRsZXdhcmUgdG8gbWFrZSBzdXJlIGl0IHBhc3NlcyBhbGwgYXJndW1lbnRzLidcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybiA8Q2Fyb3VzZWxMYXlvdXQgYWN0aXZpdHk9e2FjdGl2aXR5fSByZW5kZXJBdHRhY2htZW50PXtyZW5kZXJBdHRhY2htZW50fSB7Li4ucHJvcHN9IC8+O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGxpbmUgaXMgbm90IGEgUmVhY3QgZnVuY3Rpb25hbCBjb21wb25lbnQsIGl0J3MgYSByZW5kZXIgZnVuY3Rpb24gY2FsbGVkIGJ5IHVzZUNyZWF0ZUFjdGl2aXR5UmVuZGVyZXIoKSBob29rLlxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByZW5kZXJTdGFja2VkTGF5b3V0KHJlbmRlckF0dGFjaG1lbnQsIHByb3BzKSB7XG4gICAgICAgICAgICB0eXBlb2YgcHJvcHMgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAnYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IE9uZSBvciBtb3JlIGFyZ3VtZW50cyB3ZXJlIG1pc3NpbmcgYWZ0ZXIgcGFzc2luZyB0aHJvdWdoIHRoZSBhY3Rpdml0eSBtaWRkbGV3YXJlLiBQbGVhc2UgY2hlY2sgeW91ciBjdXN0b20gYWN0aXZpdHkgbWlkZGxld2FyZSB0byBtYWtlIHN1cmUgaXQgcGFzc2VzIGFsbCBhcmd1bWVudHMuJ1xuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gPFN0YWNrZWRMYXlvdXQgYWN0aXZpdHk9e2FjdGl2aXR5fSByZW5kZXJBdHRhY2htZW50PXtyZW5kZXJBdHRhY2htZW50fSB7Li4ucHJvcHN9IC8+O1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dCguLi5hcmdzKTtcbiAgICAgIH1cbiAgXTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsZUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsY0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQXlELFNBQUFELHVCQUFBSSxHQUFBLFdB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