botframework-webchat-component
Version:
React component of botframework-webchat
72 lines (54 loc) • 9.24 kB
JavaScript
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) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_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 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9pbnRlcm5hbC91c2VSZXBsYWNlRW1vdGljb24uanMiXSwibmFtZXMiOlsidXNlU3R5bGVPcHRpb25zIiwiaG9va3MiLCJ1c2VSZXBsYWNlRW1vdGljb24iLCJlbW9qaVNldCIsInNlbGVjdGlvbkVuZCIsInNlbGVjdGlvblN0YXJ0IiwidmFsdWUiLCJjb25zb2xlIiwid2FybiIsIk9iamVjdCIsImVudHJpZXMiLCJldmVyeSIsImVtb3RpY29uIiwiZW1vamkiLCJsZW5ndGgiLCJzbGljZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUNBOzs7Ozs7Ozs7Ozs7OztJQUVRQSxlLEdBQW9CQyw2QixDQUFwQkQsZTs7QUFFTyxTQUFTRSxrQkFBVCxHQUE4QjtBQUFBLHlCQUNwQkYsZUFBZSxFQURLO0FBQUE7QUFBQSxNQUNsQ0csUUFEa0Msd0JBQ2xDQSxRQURrQzs7QUFHM0MsU0FBTyx5QkFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQTZDO0FBQUEsUUFBMUNDLFlBQTBDLFFBQTFDQSxZQUEwQztBQUFBLFFBQTVCQyxjQUE0QixRQUE1QkEsY0FBNEI7QUFBQSxRQUFaQyxLQUFZLFFBQVpBLEtBQVk7O0FBQzNDLFFBQUksT0FBT0YsWUFBUCxLQUF3QixRQUE1QixFQUFzQztBQUNwQ0csTUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQ0UscUpBREY7QUFHRCxLQUpELE1BSU8sSUFBSSxPQUFPSCxjQUFQLEtBQTBCLFFBQTlCLEVBQXdDO0FBQzdDRSxNQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FDRSx1SkFERjtBQUdELEtBSk0sTUFJQSxJQUFJLE9BQU9GLEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDcENDLE1BQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUNFLCtHQURGO0FBR0QsS0FiMEMsQ0FlM0M7OztBQUNBSixJQUFBQSxZQUFZLEtBQUtDLGNBQWpCLElBQ0VJLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlUCxRQUFmLEVBQXlCUSxLQUF6QixDQUErQixpQkFBdUI7QUFBQTtBQUFBLFVBQXJCQyxRQUFxQjtBQUFBLFVBQVhDLEtBQVc7O0FBQUEsVUFDNUNDLE1BRDRDLEdBQ2pDRixRQURpQyxDQUM1Q0UsTUFENEM7O0FBR3BELFVBQUlSLEtBQUssQ0FBQ1MsS0FBTixDQUFZVixjQUFjLEdBQUdTLE1BQTdCLEVBQXFDVCxjQUFyQyxNQUF5RE8sUUFBN0QsRUFBdUU7QUFDckVOLFFBQUFBLEtBQUssYUFBTUEsS0FBSyxDQUFDUyxLQUFOLENBQVksQ0FBWixFQUFlVixjQUFjLEdBQUdTLE1BQWhDLENBQU4sU0FBZ0RELEtBQWhELFNBQXdEUCxLQUFLLENBQUNTLEtBQU4sQ0FBWVYsY0FBWixDQUF4RCxDQUFMO0FBQ0FELFFBQUFBLFlBQVksR0FBR0MsY0FBYyxJQUFJUSxLQUFLLENBQUNDLE1BQU4sR0FBZUEsTUFBaEQ7QUFFQSxlQUFPLEtBQVA7QUFDRDs7QUFFRCxhQUFPLElBQVA7QUFDRCxLQVhELENBREY7QUFjQSxXQUFPO0FBQUVWLE1BQUFBLFlBQVksRUFBWkEsWUFBRjtBQUFnQkMsTUFBQUEsY0FBYyxFQUFkQSxjQUFoQjtBQUFnQ0MsTUFBQUEsS0FBSyxFQUFMQTtBQUFoQyxLQUFQO0FBQ0QsR0FyQ0ksRUFzQ0wsQ0FBQ0gsUUFBRCxDQXRDSyxDQUFQO0FBd0NEIiwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludCByZXF1aXJlLXVuaWNvZGUtcmVnZXhwOiBcIm9mZlwiICovXG5cbmltcG9ydCB7IGhvb2tzIH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtYXBpJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCB7IHVzZVN0eWxlT3B0aW9ucyB9ID0gaG9va3M7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVJlcGxhY2VFbW90aWNvbigpIHtcbiAgY29uc3QgW3sgZW1vamlTZXQgfV0gPSB1c2VTdHlsZU9wdGlvbnMoKTtcblxuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgLy8gV2UgbmVlZCB0byBrbm93IHdoZXJlIChpbiBvZmZzZXQpIHRoZSBjaGFuZ2UgaXMsIHRoZW4gd2UgY2FuIGRlY2lkZSB3aGljaCBlbW90aWNvbiB0byB1cGRhdGUuXG4gICAgLy8gV2UgbmVlZCB0byBkaXN0aW5ndWlzaCBpbiB0aGlzIGNhc2UsIHN0cmluZyBjaGFuZ2UgZnJvbSBcImFiYzopeHl6XCIgdG8gXCJhYmM6KSl4eXpcIi5cbiAgICAvLyBJZiB0aGUgY2FyZXQgcG9zaXRpb24gaXMgYWZ0ZXIgdGhlIGZpcnN0IHBhcmVudGhlc2lzLCB3ZSB3aWxsIGNoYW5nZSBpdCB0byBcImFiY/CfmIopeHl6XCIuXG4gICAgLy8gQnV0IGlmIHRoZSBjYXJldCBwb3NpdGlvbiBpcyBhZnRlciB0aGUgc2Vjb25kIHBhcmVudGhlc2lzLCB3ZSB3aWxsIG5vdCBjaGFuZ2UgaXQgYnV0IGxlYXZlIGl0IGFzIFwiYWJjOikpeHl6XCIuXG4gICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZSB1c2VyIGFscmVhZHkgZGVjaWRlZCB0byB1bmRvIHRoZSBlbW9qaSBhbmQganVzdCBhZGRlZCBhIHBhcmVudGhlc2lzIGFmdGVyIHRoZSBlbW90aWNvbi4gSXQgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIGVtb3RpY29uLlxuICAgICh7IHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uU3RhcnQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0aW9uRW5kICE9PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIFwidXNlUmVwbGFjZUVtb3RpY29uXCIgbXVzdCBjb250YWlucyBcInNlbGVjdGlvbkVuZFwiIG9mIHR5cGUgbnVtYmVyLCBpbmRpY2F0aW5nIHRoZSBjYXJldCBwb3NpdGlvbi4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3Rpb25TdGFydCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdib3RmcmFtZXdvcmstd2ViY2hhdDogVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVJlcGxhY2VFbW90aWNvblwiIG11c3QgY29udGFpbnMgXCJzZWxlY3Rpb25TdGFydFwiIG9mIHR5cGUgbnVtYmVyLCBpbmRpY2F0aW5nIHRoZSBjYXJldCBwb3NpdGlvbi4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdib3RmcmFtZXdvcmstd2ViY2hhdDogVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVJlcGxhY2VFbW90aWNvblwiIG11c3QgY29udGFpbnMgXCJ2YWx1ZVwiIG9mIHR5cGUgc3RyaW5nLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugb25seSBjaGFuZ2Ugd2hlbiB0aGUgdXNlciBpcyBub3Qgc2VsZWN0aW5nIGFueXRoaW5nLlxuICAgICAgc2VsZWN0aW9uRW5kID09PSBzZWxlY3Rpb25TdGFydCAmJlxuICAgICAgICBPYmplY3QuZW50cmllcyhlbW9qaVNldCkuZXZlcnkoKFtlbW90aWNvbiwgZW1vamldKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IGVtb3RpY29uO1xuXG4gICAgICAgICAgaWYgKHZhbHVlLnNsaWNlKHNlbGVjdGlvblN0YXJ0IC0gbGVuZ3RoLCBzZWxlY3Rpb25TdGFydCkgPT09IGVtb3RpY29uKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnNsaWNlKDAsIHNlbGVjdGlvblN0YXJ0IC0gbGVuZ3RoKX0ke2Vtb2ppfSR7dmFsdWUuc2xpY2Uoc2VsZWN0aW9uU3RhcnQpfWA7XG4gICAgICAgICAgICBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25TdGFydCArPSBlbW9qaS5sZW5ndGggLSBsZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uU3RhcnQsIHZhbHVlIH07XG4gICAgfSxcbiAgICBbZW1vamlTZXRdXG4gICk7XG59XG4iXX0=
;