UNPKG

botframework-webchat-component

Version:
58 lines (56 loc) 12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useReplaceEmoticon; var _botframeworkWebchatApi = require("botframework-webchat-api"); var _react = require("react"); 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; } /*eslint require-unicode-regexp: "off" */ var useStyleOptions = _botframeworkWebchatApi.hooks.useStyleOptions; function useReplaceEmoticon() { var _useStyleOptions = useStyleOptions(), _useStyleOptions2 = _slicedToArray(_useStyleOptions, 1), emojiSet = _useStyleOptions2[0].emojiSet; return (0, _react.useCallback)( // We need to know where (in offset) the change is, then we can decide which emoticon to update. // We need to distinguish in this case, string change from "abc:)xyz" to "abc:))xyz". // If the caret position is after the first parenthesis, we will change it to "abc😊)xyz". // But if the caret position is after the second parenthesis, we will not change it but leave it as "abc:))xyz". // This is because the user already decided to undo the emoji and just added a parenthesis after the emoticon. It should not affect the emoticon. function (_ref) { var selectionEnd = _ref.selectionEnd, selectionStart = _ref.selectionStart, value = _ref.value; if (typeof selectionEnd !== 'number') { console.warn('botframework-webchat: The first argument passed to "useReplaceEmoticon" must contains "selectionEnd" of type number, indicating the caret position.'); } else if (typeof selectionStart !== 'number') { console.warn('botframework-webchat: The first argument passed to "useReplaceEmoticon" must contains "selectionStart" of type number, indicating the caret position.'); } else if (typeof value !== 'string') { console.warn('botframework-webchat: The first argument passed to "useReplaceEmoticon" must contains "value" of type string.'); } // We only change when the user is not selecting anything. selectionEnd === selectionStart && Object.entries(emojiSet).every(function (_ref2) { var _ref3 = _slicedToArray(_ref2, 2), emoticon = _ref3[0], emoji = _ref3[1]; var length = emoticon.length; if (value.slice(selectionStart - length, selectionStart) === emoticon) { value = "".concat(value.slice(0, selectionStart - length)).concat(emoji).concat(value.slice(selectionStart)); selectionEnd = selectionStart += emoji.length - length; return false; } return true; }); return { selectionEnd: selectionEnd, selectionStart: selectionStart, value: value }; }, [emojiSet]); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfc2xpY2VkVG9BcnJheSIsImFyciIsImkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibyIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwibiIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbiIsImxlbmd0aCIsImFycjIiLCJfaSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJlcnIiLCJpc0FycmF5IiwidXNlU3R5bGVPcHRpb25zIiwiaG9va3MiLCJ1c2VSZXBsYWNlRW1vdGljb24iLCJfdXNlU3R5bGVPcHRpb25zIiwiX3VzZVN0eWxlT3B0aW9uczIiLCJlbW9qaVNldCIsInVzZUNhbGxiYWNrIiwiX3JlZiIsInNlbGVjdGlvbkVuZCIsInNlbGVjdGlvblN0YXJ0IiwiY29uc29sZSIsIndhcm4iLCJlbnRyaWVzIiwiZXZlcnkiLCJfcmVmMiIsIl9yZWYzIiwiZW1vdGljb24iLCJlbW9qaSIsImNvbmNhdCJdLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL2ludGVybmFsL3VzZVJlcGxhY2VFbW90aWNvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludCByZXF1aXJlLXVuaWNvZGUtcmVnZXhwOiBcIm9mZlwiICovXG5cbmltcG9ydCB7IGhvb2tzIH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtYXBpJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCB7IHVzZVN0eWxlT3B0aW9ucyB9ID0gaG9va3M7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVJlcGxhY2VFbW90aWNvbigpIHtcbiAgY29uc3QgW3sgZW1vamlTZXQgfV0gPSB1c2VTdHlsZU9wdGlvbnMoKTtcblxuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgLy8gV2UgbmVlZCB0byBrbm93IHdoZXJlIChpbiBvZmZzZXQpIHRoZSBjaGFuZ2UgaXMsIHRoZW4gd2UgY2FuIGRlY2lkZSB3aGljaCBlbW90aWNvbiB0byB1cGRhdGUuXG4gICAgLy8gV2UgbmVlZCB0byBkaXN0aW5ndWlzaCBpbiB0aGlzIGNhc2UsIHN0cmluZyBjaGFuZ2UgZnJvbSBcImFiYzopeHl6XCIgdG8gXCJhYmM6KSl4eXpcIi5cbiAgICAvLyBJZiB0aGUgY2FyZXQgcG9zaXRpb24gaXMgYWZ0ZXIgdGhlIGZpcnN0IHBhcmVudGhlc2lzLCB3ZSB3aWxsIGNoYW5nZSBpdCB0byBcImFiY/CfmIopeHl6XCIuXG4gICAgLy8gQnV0IGlmIHRoZSBjYXJldCBwb3NpdGlvbiBpcyBhZnRlciB0aGUgc2Vjb25kIHBhcmVudGhlc2lzLCB3ZSB3aWxsIG5vdCBjaGFuZ2UgaXQgYnV0IGxlYXZlIGl0IGFzIFwiYWJjOikpeHl6XCIuXG4gICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZSB1c2VyIGFscmVhZHkgZGVjaWRlZCB0byB1bmRvIHRoZSBlbW9qaSBhbmQganVzdCBhZGRlZCBhIHBhcmVudGhlc2lzIGFmdGVyIHRoZSBlbW90aWNvbi4gSXQgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIGVtb3RpY29uLlxuICAgICh7IHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uU3RhcnQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0aW9uRW5kICE9PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIFwidXNlUmVwbGFjZUVtb3RpY29uXCIgbXVzdCBjb250YWlucyBcInNlbGVjdGlvbkVuZFwiIG9mIHR5cGUgbnVtYmVyLCBpbmRpY2F0aW5nIHRoZSBjYXJldCBwb3NpdGlvbi4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3Rpb25TdGFydCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdib3RmcmFtZXdvcmstd2ViY2hhdDogVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVJlcGxhY2VFbW90aWNvblwiIG11c3QgY29udGFpbnMgXCJzZWxlY3Rpb25TdGFydFwiIG9mIHR5cGUgbnVtYmVyLCBpbmRpY2F0aW5nIHRoZSBjYXJldCBwb3NpdGlvbi4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdib3RmcmFtZXdvcmstd2ViY2hhdDogVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVJlcGxhY2VFbW90aWNvblwiIG11c3QgY29udGFpbnMgXCJ2YWx1ZVwiIG9mIHR5cGUgc3RyaW5nLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugb25seSBjaGFuZ2Ugd2hlbiB0aGUgdXNlciBpcyBub3Qgc2VsZWN0aW5nIGFueXRoaW5nLlxuICAgICAgc2VsZWN0aW9uRW5kID09PSBzZWxlY3Rpb25TdGFydCAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhlbW9qaVNldCkuZXZlcnkoKFtlbW90aWNvbiwgZW1vamldKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IGVtb3RpY29uO1xuXG4gICAgICAgICAgaWYgKHZhbHVlLnNsaWNlKHNlbGVjdGlvblN0YXJ0IC0gbGVuZ3RoLCBzZWxlY3Rpb25TdGFydCkgPT09IGVtb3RpY29uKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnNsaWNlKDAsIHNlbGVjdGlvblN0YXJ0IC0gbGVuZ3RoKX0ke2Vtb2ppfSR7dmFsdWUuc2xpY2Uoc2VsZWN0aW9uU3RhcnQpfWA7XG4gICAgICAgICAgICBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25TdGFydCArPSBlbW9qaS5sZW5ndGggLSBsZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uU3RhcnQsIHZhbHVlIH07XG4gICAgfSxcbiAgICBbZW1vamlTZXRdXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLElBQUFBLHVCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFBb0MsU0FBQUUsZUFBQUMsR0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsR0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxHQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosR0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBRyxDQUFBLEVBQUFDLE1BQUEsU0FBQUQsQ0FBQSxxQkFBQUEsQ0FBQSxzQkFBQUUsaUJBQUEsQ0FBQUYsQ0FBQSxFQUFBQyxNQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLEVBQUFRLEtBQUEsYUFBQUwsQ0FBQSxpQkFBQUgsQ0FBQSxDQUFBUyxXQUFBLEVBQUFOLENBQUEsR0FBQUgsQ0FBQSxDQUFBUyxXQUFBLENBQUFDLElBQUEsTUFBQVAsQ0FBQSxjQUFBQSxDQUFBLG1CQUFBUSxLQUFBLENBQUFDLElBQUEs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