UNPKG

botframework-webchat-component

Version:
90 lines (85 loc) 18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _botframeworkWebchatApi = require("botframework-webchat-api"); var _react = require("react"); var _SendStatus = require("../../types/internal/SendStatus"); var _isPresentational = _interopRequireDefault(require("./isPresentational")); var _usePrevious = _interopRequireDefault(require("../../hooks/internal/usePrevious")); var _useQueueStaticElement = _interopRequireDefault(require("../../providers/LiveRegionTwin/useQueueStaticElement")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var useGetActivityByKey = _botframeworkWebchatApi.hooks.useGetActivityByKey, useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer, useSendStatusByActivityKey = _botframeworkWebchatApi.hooks.useSendStatusByActivityKey; /** * React component to on-demand narrate "Failed to send message" at the end of the live region. * * We cannot narrate "failed to send message" next to the activity. At the time when the activity is being sent, * the activity is also queued to the screen reader. And at that moment, we not yet know if the activity can be sent or not. * * We only know when the activity was failed to send at a later time. * * Thus, we need to use a live region "footnote" to indicate the message was failed to send. */ var LiveRegionSendFailed = function LiveRegionSendFailed() { var _useSendStatusByActiv = useSendStatusByActivityKey(), _useSendStatusByActiv2 = _slicedToArray(_useSendStatusByActiv, 1), sendStatusByActivityKey = _useSendStatusByActiv2[0]; var getActivityByKey = useGetActivityByKey(); var localize = useLocalizer(); var queueStaticElement = (0, _useQueueStaticElement.default)(); /** * List of keys of outgoing and non-presentational activities that are failed to send. * * Activities which are presentational, such as `event` or `typing`, are ignored to reduce confusions. * "Failed to send message" should not be narrated for presentational activities. */ var activityKeysOfSendFailed = (0, _react.useMemo)(function () { return Array.from(sendStatusByActivityKey).reduce(function (activityKeysOfSendFailed, _ref) { var _ref2 = _slicedToArray(_ref, 2), key = _ref2[0], sendStatus = _ref2[1]; return sendStatus === _SendStatus.SEND_FAILED && !(0, _isPresentational.default)(getActivityByKey(key)) ? activityKeysOfSendFailed.add(key) : activityKeysOfSendFailed; }, new Set()); }, [getActivityByKey, sendStatusByActivityKey]); /** Returns localized "Failed to send message." */ var liveRegionSendFailedAlt = localize('TRANSCRIPT_LIVE_REGION_SEND_FAILED_ALT'); var prevActivityKeysOfSendFailed = (0, _usePrevious.default)(activityKeysOfSendFailed); /** True, if one or more non-presentational activities start appears as "send failed", otherwise, false. */ var hasNewSendFailed = (0, _react.useMemo)(function () { if (activityKeysOfSendFailed === prevActivityKeysOfSendFailed) { return false; } var _iterator = _createForOfIteratorHelper(activityKeysOfSendFailed.keys()), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var key = _step.value; if (!prevActivityKeysOfSendFailed.has(key)) { return true; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return false; }, [activityKeysOfSendFailed, prevActivityKeysOfSendFailed]); (0, _react.useEffect)(function () { hasNewSendFailed && queueStaticElement(liveRegionSendFailedAlt); }, [hasNewSendFailed, liveRegionSendFailedAlt, queueStaticElement]); return null; }; var _default = LiveRegionSendFailed; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfU2VuZFN0YXR1cyIsIl9pc1ByZXNlbnRhdGlvbmFsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91c2VQcmV2aW91cyIsIl91c2VRdWV1ZVN0YXRpY0VsZW1lbnQiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibyIsImFsbG93QXJyYXlMaWtlIiwiaXQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsImkiLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwiX2UyIiwiZiIsIlR5cGVFcnJvciIsIm5vcm1hbENvbXBsZXRpb24iLCJkaWRFcnIiLCJlcnIiLCJjYWxsIiwic3RlcCIsIm5leHQiLCJfZTMiLCJyZXR1cm4iLCJfc2xpY2VkVG9BcnJheSIsImFyciIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsImxlbiIsImFycjIiLCJfaSIsIl9hcnIiLCJfbiIsIl9kIiwiX3MiLCJfZSIsInB1c2giLCJ1c2VHZXRBY3Rpdml0eUJ5S2V5IiwiaG9va3MiLCJ1c2VMb2NhbGl6ZXIiLCJ1c2VTZW5kU3RhdHVzQnlBY3Rpdml0eUtleSIsIkxpdmVSZWdpb25TZW5kRmFpbGVkIiwiX3VzZVNlbmRTdGF0dXNCeUFjdGl2IiwiX3VzZVNlbmRTdGF0dXNCeUFjdGl2MiIsInNlbmRTdGF0dXNCeUFjdGl2aXR5S2V5IiwiZ2V0QWN0aXZpdHlCeUtleSIsImxvY2FsaXplIiwicXVldWVTdGF0aWNFbGVtZW50IiwidXNlUXVldWVTdGF0aWNFbGVtZW50IiwiYWN0aXZpdHlLZXlzT2ZTZW5kRmFpbGVkIiwidXNlTWVtbyIsInJlZHVjZSIsIl9yZWYiLCJfcmVmMiIsImtleSIsInNlbmRTdGF0dXMiLCJTRU5EX0ZBSUxFRCIsImlzUHJlc2VudGF0aW9uYWwiLCJhZGQiLCJTZXQiLCJsaXZlUmVnaW9uU2VuZEZhaWxlZEFsdCIsInByZXZBY3Rpdml0eUtleXNPZlNlbmRGYWlsZWQiLCJ1c2VQcmV2aW91cyIsImhhc05ld1NlbmRGYWlsZWQiLCJfaXRlcmF0b3IiLCJrZXlzIiwiX3N0ZXAiLCJoYXMiLCJ1c2VFZmZlY3QiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9UcmFuc2NyaXB0L0xpdmVSZWdpb24vU2VuZEZhaWxlZC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBWRkMgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNFTkRfRkFJTEVEIH0gZnJvbSAnLi4vLi4vdHlwZXMvaW50ZXJuYWwvU2VuZFN0YXR1cyc7XG5pbXBvcnQgaXNQcmVzZW50YXRpb25hbCBmcm9tICcuL2lzUHJlc2VudGF0aW9uYWwnO1xuaW1wb3J0IHVzZVByZXZpb3VzIGZyb20gJy4uLy4uL2hvb2tzL2ludGVybmFsL3VzZVByZXZpb3VzJztcbmltcG9ydCB1c2VRdWV1ZVN0YXRpY0VsZW1lbnQgZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xpdmVSZWdpb25Ud2luL3VzZVF1ZXVlU3RhdGljRWxlbWVudCc7XG5cbmNvbnN0IHsgdXNlR2V0QWN0aXZpdHlCeUtleSwgdXNlTG9jYWxpemVyLCB1c2VTZW5kU3RhdHVzQnlBY3Rpdml0eUtleSB9ID0gaG9va3M7XG5cbi8qKlxuICogUmVhY3QgY29tcG9uZW50IHRvIG9uLWRlbWFuZCBuYXJyYXRlIFwiRmFpbGVkIHRvIHNlbmQgbWVzc2FnZVwiIGF0IHRoZSBlbmQgb2YgdGhlIGxpdmUgcmVnaW9uLlxuICpcbiAqIFdlIGNhbm5vdCBuYXJyYXRlIFwiZmFpbGVkIHRvIHNlbmQgbWVzc2FnZVwiIG5leHQgdG8gdGhlIGFjdGl2aXR5LiBBdCB0aGUgdGltZSB3aGVuIHRoZSBhY3Rpdml0eSBpcyBiZWluZyBzZW50LFxuICogdGhlIGFjdGl2aXR5IGlzIGFsc28gcXVldWVkIHRvIHRoZSBzY3JlZW4gcmVhZGVyLiBBbmQgYXQgdGhhdCBtb21lbnQsIHdlIG5vdCB5ZXQga25vdyBpZiB0aGUgYWN0aXZpdHkgY2FuIGJlIHNlbnQgb3Igbm90LlxuICpcbiAqIFdlIG9ubHkga25vdyB3aGVuIHRoZSBhY3Rpdml0eSB3YXMgZmFpbGVkIHRvIHNlbmQgYXQgYSBsYXRlciB0aW1lLlxuICpcbiAqIFRodXMsIHdlIG5lZWQgdG8gdXNlIGEgbGl2ZSByZWdpb24gXCJmb290bm90ZVwiIHRvIGluZGljYXRlIHRoZSBtZXNzYWdlIHdhcyBmYWlsZWQgdG8gc2VuZC5cbiAqL1xuY29uc3QgTGl2ZVJlZ2lvblNlbmRGYWlsZWQ6IFZGQzx7fT4gPSAoKSA9PiB7XG4gIGNvbnN0IFtzZW5kU3RhdHVzQnlBY3Rpdml0eUtleV0gPSB1c2VTZW5kU3RhdHVzQnlBY3Rpdml0eUtleSgpO1xuICBjb25zdCBnZXRBY3Rpdml0eUJ5S2V5ID0gdXNlR2V0QWN0aXZpdHlCeUtleSgpO1xuICBjb25zdCBsb2NhbGl6ZSA9IHVzZUxvY2FsaXplcigpO1xuICBjb25zdCBxdWV1ZVN0YXRpY0VsZW1lbnQgPSB1c2VRdWV1ZVN0YXRpY0VsZW1lbnQoKTtcblxuICAvKipcbiAgICogTGlzdCBvZiBrZXlzIG9mIG91dGdvaW5nIGFuZCBub24tcHJlc2VudGF0aW9uYWwgYWN0aXZpdGllcyB0aGF0IGFyZSBmYWlsZWQgdG8gc2VuZC5cbiAgICpcbiAgICogQWN0aXZpdGllcyB3aGljaCBhcmUgcHJlc2VudGF0aW9uYWwsIHN1Y2ggYXMgYGV2ZW50YCBvciBgdHlwaW5nYCwgYXJlIGlnbm9yZWQgdG8gcmVkdWNlIGNvbmZ1c2lvbnMuXG4gICAqIFwiRmFpbGVkIHRvIHNlbmQgbWVzc2FnZVwiIHNob3VsZCBub3QgYmUgbmFycmF0ZWQgZm9yIHByZXNlbnRhdGlvbmFsIGFjdGl2aXRpZXMuXG4gICAqL1xuICBjb25zdCBhY3Rpdml0eUtleXNPZlNlbmRGYWlsZWQgPSB1c2VNZW1vPFNldDxzdHJpbmc+PihcbiAgICAoKSA9PlxuICAgICAgQXJyYXkuZnJvbShzZW5kU3RhdHVzQnlBY3Rpdml0eUtleSkucmVkdWNlKFxuICAgICAgICAoYWN0aXZpdHlLZXlzT2ZTZW5kRmFpbGVkLCBba2V5LCBzZW5kU3RhdHVzXSkgPT5cbiAgICAgICAgICBzZW5kU3RhdHVzID09PSBTRU5EX0ZBSUxFRCAmJiAhaXNQcmVzZW50YXRpb25hbChnZXRBY3Rpdml0eUJ5S2V5KGtleSkpXG4gICAgICAgICAgICA/IGFjdGl2aXR5S2V5c09mU2VuZEZhaWxlZC5hZGQoa2V5KVxuICAgICAgICAgICAgOiBhY3Rpdml0eUtleXNPZlNlbmRGYWlsZWQsXG4gICAgICAgIG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgICApLFxuICAgIFtnZXRBY3Rpdml0eUJ5S2V5LCBzZW5kU3RhdHVzQnlBY3Rpdml0eUtleV1cbiAgKTtcblxuICAvKiogUmV0dXJucyBsb2NhbGl6ZWQgXCJGYWlsZWQgdG8gc2VuZCBtZXNzYWdlLlwiICovXG4gIGNvbnN0IGxpdmVSZWdpb25TZW5kRmFpbGVkQWx0ID0gbG9jYWxpemUoJ1RSQU5TQ1JJUFRfTElWRV9SRUdJT05fU0VORF9GQUlMRURfQUxUJyk7XG5cbiAgY29uc3QgcHJldkFjdGl2aXR5S2V5c09mU2VuZEZhaWxlZCA9IHVzZVByZXZpb3VzKGFjdGl2aXR5S2V5c09mU2VuZEZhaWxlZCk7XG5cbiAgLyoqIFRydWUsIGlmIG9uZSBvciBtb3JlIG5vbi1wcmVzZW50YXRpb25hbCBhY3Rpdml0aWVzIHN0YXJ0IGFwcGVhcnMgYXMgXCJzZW5kIGZhaWxlZFwiLCBvdGhlcndpc2UsIGZhbHNlLiAqL1xuICBjb25zdCBoYXNOZXdTZW5kRmFpbGVkID0gdXNlTWVtbzxib29sZWFuPigoKSA9PiB7XG4gICAgaWYgKGFjdGl2aXR5S2V5c09mU2VuZEZhaWxlZCA9PT0gcHJldkFjdGl2aXR5S2V5c09mU2VuZEZhaWxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGFjdGl2aXR5S2V5c09mU2VuZEZhaWxlZC5rZXlzKCkpIHtcbiAgICAgIGlmICghcHJldkFjdGl2aXR5S2V5c09mU2VuZEZhaWxlZC5oYXMoa2V5KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFthY3Rpdml0eUtleXNPZlNlbmRGYWlsZWQsIHByZXZBY3Rpdml0eUtleXNPZlNlbmRGYWlsZWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGhhc05ld1NlbmRGYWlsZWQgJiYgcXVldWVTdGF0aWNFbGVtZW50KGxpdmVSZWdpb25TZW5kRmFpbGVkQWx0KTtcbiAgfSwgW2hhc05ld1NlbmRGYWlsZWQsIGxpdmVSZWdpb25TZW5kRmFpbGVkQWx0LCBxdWV1ZVN0YXRpY0VsZW1lbnRdKTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IExpdmVSZWdpb25TZW5kRmFpbGVkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSx1QkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBR0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUQsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElB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