UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

189 lines 7.26 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.createTextComposerEmojiMiddleware = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); 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 _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _mergeWith = _interopRequireDefault(require("lodash/mergeWith")); var _streamChat = require("stream-chat"); function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function () { return !!t; })(); } var EmojiSearchSource = function (_BaseSearchSource) { function EmojiSearchSource(emojiSearchIndex, options) { var _this; (0, _classCallCheck2.default)(this, EmojiSearchSource); _this = _callSuper(this, EmojiSearchSource, [options]); _this.type = 'emoji'; _this.emojiSearchIndex = emojiSearchIndex; return _this; } (0, _inherits2.default)(EmojiSearchSource, _BaseSearchSource); return (0, _createClass2.default)(EmojiSearchSource, [{ key: "query", value: function () { var _query = (0, _asyncToGenerator2.default)(function* (searchQuery) { if (searchQuery.length === 0) { return { items: [], next: null }; } var emojis = (yield this.emojiSearchIndex.search(searchQuery)) ?? []; return { items: emojis.filter(Boolean).slice(0, 7).map(({ emoticons = [], id, name, native, skins = [] }) => { var _skins = (0, _slicedToArray2.default)(skins, 1), firstSkin = _skins[0]; return { emoticons, id, name, native: native ?? firstSkin.native }; }), next: null }; }); function query(_x) { return _query.apply(this, arguments); } return query; }() }, { key: "filterQueryResults", value: function filterQueryResults(items) { return items.map(item => ({ ...item, ...(0, _streamChat.getTokenizedSuggestionDisplayName)({ displayName: item.id, searchToken: this.searchQuery }) })); } }]); }(_streamChat.BaseSearchSource); var DEFAULT_OPTIONS = { minChars: 1, trigger: ':' }; var createTextComposerEmojiMiddleware = ({ emojiSearchIndex, options }) => { var finalOptions = (0, _mergeWith.default)(DEFAULT_OPTIONS, options ?? {}); var emojiSearchSource = new EmojiSearchSource(emojiSearchIndex); emojiSearchSource.activate(); return { handlers: { onChange: function () { var _ref = (0, _asyncToGenerator2.default)(function* ({ complete, forward, next, state }) { if (!state.selection) { return forward(); } var triggerWithToken = (0, _streamChat.getTriggerCharWithToken)({ acceptTrailingSpaces: false, text: state.text.slice(0, state.selection.end), trigger: finalOptions.trigger }); var triggerWasRemoved = !triggerWithToken || triggerWithToken.length < finalOptions.minChars; if (triggerWasRemoved) { var hasSuggestionsForTrigger = state.suggestions?.trigger === finalOptions.trigger; var newState = { ...state }; if (hasSuggestionsForTrigger && newState.suggestions) { delete newState.suggestions; } return next(newState); } var newSearchTriggerred = triggerWithToken && triggerWithToken === finalOptions.trigger; if (newSearchTriggerred) { emojiSearchSource.resetStateAndActivate(); } var textWithReplacedWord = yield (0, _streamChat.replaceWordWithEntity)({ caretPosition: state.selection.end, getEntityString: function () { var _ref2 = (0, _asyncToGenerator2.default)(function* (word) { var _yield$emojiSearchSou = yield emojiSearchSource.query(word), items = _yield$emojiSearchSou.items; var emoji = items.filter(Boolean).slice(0, 10).find(({ emoticons }) => !!emoticons?.includes(word)); if (!emoji) { return null; } var _ref3 = emoji.skins ?? [], _ref4 = (0, _slicedToArray2.default)(_ref3, 1), firstSkin = _ref4[0]; return emoji.native ?? firstSkin.native; }); return function getEntityString(_x3) { return _ref2.apply(this, arguments); }; }(), text: state.text }); if (textWithReplacedWord !== state.text) { return complete({ ...state, suggestions: undefined, text: textWithReplacedWord }); } return complete({ ...state, suggestions: { query: triggerWithToken.slice(1), searchSource: emojiSearchSource, trigger: finalOptions.trigger } }); }); return function onChange(_x2) { return _ref.apply(this, arguments); }; }(), onSuggestionItemSelect: ({ complete, forward, state }) => { var _ref5 = state.change ?? {}, selectedSuggestion = _ref5.selectedSuggestion; if (!selectedSuggestion || state.suggestions?.trigger !== finalOptions.trigger) { return forward(); } emojiSearchSource.resetStateAndActivate(); return complete({ ...state, ...(0, _streamChat.insertItemWithTrigger)({ insertText: `${'native' in selectedSuggestion ? selectedSuggestion.native : ''} `, selection: state.selection, text: state.text, trigger: finalOptions.trigger }), suggestions: undefined }); } }, id: 'stream-io/react-native-sdk/emoji-middleware' }; }; exports.createTextComposerEmojiMiddleware = createTextComposerEmojiMiddleware; //# sourceMappingURL=emojiControl.js.map