UNPKG

matrix-react-sdk

Version:
109 lines (106 loc) 15.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _EmojiPicker = require("./EmojiPicker"); var _LazyRenderList = _interopRequireDefault(require("../elements/LazyRenderList")); var _Emoji = _interopRequireDefault(require("./Emoji")); /* Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. Copyright 2019 Tulir Asokan <tulir@maunium.net> SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const OVERFLOW_ROWS = 3; function hexEncode(str) { let hex; let i; let result = ""; for (i = 0; i < str.length; i++) { hex = str.charCodeAt(i).toString(16); result += ("000" + hex).slice(-4); } return result; } class Category extends _react.default.PureComponent { constructor(...args) { super(...args); (0, _defineProperty2.default)(this, "renderEmojiRow", rowIndex => { const { onClick, onMouseEnter, onMouseLeave, selectedEmojis, emojis } = this.props; const emojisForRow = emojis.slice(rowIndex * 8, (rowIndex + 1) * 8); return /*#__PURE__*/_react.default.createElement("div", { key: rowIndex, role: "row" }, emojisForRow.map(emoji => /*#__PURE__*/_react.default.createElement(_Emoji.default, { key: emoji.hexcode, emoji: emoji, selectedEmojis: selectedEmojis, onClick: onClick, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, disabled: this.props.isEmojiDisabled?.(emoji.unicode), id: `mx_EmojiPicker_item_${this.props.id}_${hexEncode(emoji.unicode)}`, role: "gridcell" }))); }); } render() { const { emojis, name, heightBefore, viewportHeight, scrollTop } = this.props; if (!emojis || emojis.length === 0) { return null; } const rows = new Array(Math.ceil(emojis.length / _EmojiPicker.EMOJIS_PER_ROW)); for (let counter = 0; counter < rows.length; ++counter) { rows[counter] = counter; } const viewportTop = scrollTop; const viewportBottom = viewportTop + viewportHeight; const listTop = heightBefore + _EmojiPicker.CATEGORY_HEADER_HEIGHT; const listBottom = listTop + rows.length * _EmojiPicker.EMOJI_HEIGHT; const top = Math.max(viewportTop, listTop); const bottom = Math.min(viewportBottom, listBottom); // the viewport height and scrollTop passed to the LazyRenderList // is capped at the intersection with the real viewport, so lists // out of view are passed height 0, so they won't render any items. const localHeight = Math.max(0, bottom - top); const localScrollTop = Math.max(0, scrollTop - listTop); return /*#__PURE__*/_react.default.createElement("section", { id: `mx_EmojiPicker_category_${this.props.id}`, className: "mx_EmojiPicker_category", "data-category-id": this.props.id, role: "tabpanel", "aria-label": name }, /*#__PURE__*/_react.default.createElement("h2", { className: "mx_EmojiPicker_category_label" }, name), /*#__PURE__*/_react.default.createElement(_LazyRenderList.default, { className: "mx_EmojiPicker_list", itemHeight: _EmojiPicker.EMOJI_HEIGHT, items: rows, scrollTop: localScrollTop, height: localHeight, overflowItems: OVERFLOW_ROWS, overflowMargin: 0, renderItem: this.renderEmojiRow, role: "grid" })); } } var _default = exports.default = Category; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9FbW9qaVBpY2tlciIsIl9MYXp5UmVuZGVyTGlzdCIsIl9FbW9qaSIsIk9WRVJGTE9XX1JPV1MiLCJoZXhFbmNvZGUiLCJzdHIiLCJoZXgiLCJpIiwicmVzdWx0IiwibGVuZ3RoIiwiY2hhckNvZGVBdCIsInRvU3RyaW5nIiwic2xpY2UiLCJDYXRlZ29yeSIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiYXJncyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0Iiwicm93SW5kZXgiLCJvbkNsaWNrIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwic2VsZWN0ZWRFbW9qaXMiLCJlbW9qaXMiLCJwcm9wcyIsImVtb2ppc0ZvclJvdyIsImNyZWF0ZUVsZW1lbnQiLCJrZXkiLCJyb2xlIiwibWFwIiwiZW1vamkiLCJoZXhjb2RlIiwiZGlzYWJsZWQiLCJpc0Vtb2ppRGlzYWJsZWQiLCJ1bmljb2RlIiwiaWQiLCJyZW5kZXIiLCJuYW1lIiwiaGVpZ2h0QmVmb3JlIiwidmlld3BvcnRIZWlnaHQiLCJzY3JvbGxUb3AiLCJyb3dzIiwiQXJyYXkiLCJNYXRoIiwiY2VpbCIsIkVNT0pJU19QRVJfUk9XIiwiY291bnRlciIsInZpZXdwb3J0VG9wIiwidmlld3BvcnRCb3R0b20iLCJsaXN0VG9wIiwiQ0FURUdPUllfSEVBREVSX0hFSUdIVCIsImxpc3RCb3R0b20iLCJFTU9KSV9IRUlHSFQiLCJ0b3AiLCJtYXgiLCJib3R0b20iLCJtaW4iLCJsb2NhbEhlaWdodCIsImxvY2FsU2Nyb2xsVG9wIiwiY2xhc3NOYW1lIiwiaXRlbUhlaWdodCIsIml0ZW1zIiwiaGVpZ2h0Iiwib3ZlcmZsb3dJdGVtcyIsIm92ZXJmbG93TWFyZ2luIiwicmVuZGVySXRlbSIsInJlbmRlckVtb2ppUm93IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZW1vamlwaWNrZXIvQ2F0ZWdvcnkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5Db3B5cmlnaHQgMjAxOSBUdWxpciBBc29rYW4gPHR1bGlyQG1hdW5pdW0ubmV0PlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBEQVRBX0JZX0NBVEVHT1JZLCBFbW9qaSBhcyBJRW1vamkgfSBmcm9tIFwiQG1hdHJpeC1vcmcvZW1vamliYXNlLWJpbmRpbmdzXCI7XG5cbmltcG9ydCB7IENBVEVHT1JZX0hFQURFUl9IRUlHSFQsIEVNT0pJX0hFSUdIVCwgRU1PSklTX1BFUl9ST1cgfSBmcm9tIFwiLi9FbW9qaVBpY2tlclwiO1xuaW1wb3J0IExhenlSZW5kZXJMaXN0IGZyb20gXCIuLi9lbGVtZW50cy9MYXp5UmVuZGVyTGlzdFwiO1xuaW1wb3J0IEVtb2ppIGZyb20gXCIuL0Vtb2ppXCI7XG5pbXBvcnQgeyBCdXR0b25FdmVudCB9IGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5cbmNvbnN0IE9WRVJGTE9XX1JPV1MgPSAzO1xuXG5leHBvcnQgdHlwZSBDYXRlZ29yeUtleSA9IGtleW9mIHR5cGVvZiBEQVRBX0JZX0NBVEVHT1JZIHwgXCJyZWNlbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ2F0ZWdvcnkge1xuICAgIGlkOiBDYXRlZ29yeUtleTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgIHJlZjogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50Pjtcbn1cblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW1vamlzOiBJRW1vamlbXTtcbiAgICBzZWxlY3RlZEVtb2ppcz86IFNldDxzdHJpbmc+O1xuICAgIGhlaWdodEJlZm9yZTogbnVtYmVyO1xuICAgIHZpZXdwb3J0SGVpZ2h0OiBudW1iZXI7XG4gICAgc2Nyb2xsVG9wOiBudW1iZXI7XG4gICAgb25DbGljayhldjogQnV0dG9uRXZlbnQsIGVtb2ppOiBJRW1vamkpOiB2b2lkO1xuICAgIG9uTW91c2VFbnRlcihlbW9qaTogSUVtb2ppKTogdm9pZDtcbiAgICBvbk1vdXNlTGVhdmUoZW1vamk6IElFbW9qaSk6IHZvaWQ7XG4gICAgaXNFbW9qaURpc2FibGVkPzogKHVuaWNvZGU6IHN0cmluZykgPT4gYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gaGV4RW5jb2RlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgaGV4OiBzdHJpbmc7XG4gICAgbGV0IGk6IG51bWJlcjtcblxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaGV4ID0gc3RyLmNoYXJDb2RlQXQoaSkudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXN1bHQgKz0gKFwiMDAwXCIgKyBoZXgpLnNsaWNlKC00KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5jbGFzcyBDYXRlZ29yeSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8SVByb3BzPiB7XG4gICAgcHJpdmF0ZSByZW5kZXJFbW9qaVJvdyA9IChyb3dJbmRleDogbnVtYmVyKTogSlNYLkVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCB7IG9uQ2xpY2ssIG9uTW91c2VFbnRlciwgb25Nb3VzZUxlYXZlLCBzZWxlY3RlZEVtb2ppcywgZW1vamlzIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBlbW9qaXNGb3JSb3cgPSBlbW9qaXMuc2xpY2Uocm93SW5kZXggKiA4LCAocm93SW5kZXggKyAxKSAqIDgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e3Jvd0luZGV4fSByb2xlPVwicm93XCI+XG4gICAgICAgICAgICAgICAge2Vtb2ppc0ZvclJvdy5tYXAoKGVtb2ppKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxFbW9qaVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtlbW9qaS5oZXhjb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk9e2Vtb2ppfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRFbW9qaXM9e3NlbGVjdGVkRW1vamlzfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXtvbk1vdXNlTGVhdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5pc0Vtb2ppRGlzYWJsZWQ/LihlbW9qaS51bmljb2RlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgbXhfRW1vamlQaWNrZXJfaXRlbV8ke3RoaXMucHJvcHMuaWR9XyR7aGV4RW5jb2RlKGVtb2ppLnVuaWNvZGUpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgY29uc3QgeyBlbW9qaXMsIG5hbWUsIGhlaWdodEJlZm9yZSwgdmlld3BvcnRIZWlnaHQsIHNjcm9sbFRvcCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKCFlbW9qaXMgfHwgZW1vamlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93cyA9IG5ldyBBcnJheShNYXRoLmNlaWwoZW1vamlzLmxlbmd0aCAvIEVNT0pJU19QRVJfUk9XKSk7XG4gICAgICAgIGZvciAobGV0IGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgcm93cy5sZW5ndGg7ICsrY291bnRlcikge1xuICAgICAgICAgICAgcm93c1tjb3VudGVyXSA9IGNvdW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aWV3cG9ydFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArIHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgICBjb25zdCBsaXN0VG9wID0gaGVpZ2h0QmVmb3JlICsgQ0FURUdPUllfSEVBREVSX0hFSUdIVDtcbiAgICAgICAgY29uc3QgbGlzdEJvdHRvbSA9IGxpc3RUb3AgKyByb3dzLmxlbmd0aCAqIEVNT0pJX0hFSUdIVDtcbiAgICAgICAgY29uc3QgdG9wID0gTWF0aC5tYXgodmlld3BvcnRUb3AsIGxpc3RUb3ApO1xuICAgICAgICBjb25zdCBib3R0b20gPSBNYXRoLm1pbih2aWV3cG9ydEJvdHRvbSwgbGlzdEJvdHRvbSk7XG4gICAgICAgIC8vIHRoZSB2aWV3cG9ydCBoZWlnaHQgYW5kIHNjcm9sbFRvcCBwYXNzZWQgdG8gdGhlIExhenlSZW5kZXJMaXN0XG4gICAgICAgIC8vIGlzIGNhcHBlZCBhdCB0aGUgaW50ZXJzZWN0aW9uIHdpdGggdGhlIHJlYWwgdmlld3BvcnQsIHNvIGxpc3RzXG4gICAgICAgIC8vIG91dCBvZiB2aWV3IGFyZSBwYXNzZWQgaGVpZ2h0IDAsIHNvIHRoZXkgd29uJ3QgcmVuZGVyIGFueSBpdGVtcy5cbiAgICAgICAgY29uc3QgbG9jYWxIZWlnaHQgPSBNYXRoLm1heCgwLCBib3R0b20gLSB0b3ApO1xuICAgICAgICBjb25zdCBsb2NhbFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCAtIGxpc3RUb3ApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgICAgIGlkPXtgbXhfRW1vamlQaWNrZXJfY2F0ZWdvcnlfJHt0aGlzLnByb3BzLmlkfWB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfRW1vamlQaWNrZXJfY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgIGRhdGEtY2F0ZWdvcnktaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgICAgcm9sZT1cInRhYnBhbmVsXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtuYW1lfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJteF9FbW9qaVBpY2tlcl9jYXRlZ29yeV9sYWJlbFwiPntuYW1lfTwvaDI+XG4gICAgICAgICAgICAgICAgPExhenlSZW5kZXJMaXN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0Vtb2ppUGlja2VyX2xpc3RcIlxuICAgICAgICAgICAgICAgICAgICBpdGVtSGVpZ2h0PXtFTU9KSV9IRUlHSFR9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zPXtyb3dzfVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A9e2xvY2FsU2Nyb2xsVG9wfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e2xvY2FsSGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd0l0ZW1zPXtPVkVSRkxPV19ST1dTfVxuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd01hcmdpbj17MH1cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySXRlbT17dGhpcy5yZW5kZXJFbW9qaVJvd31cbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXRlZ29yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFTQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxlQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQVVBLE1BQU1JLGFBQWEsR0FBRyxDQUFDO0FBMEJ2QixTQUFTQyxTQUFTQSxDQUFDQyxHQUFXLEVBQVU7RUFDcEMsSUFBSUMsR0FBVztFQUNmLElBQUlDLENBQVM7RUFFYixJQUFJQyxNQUFNLEdBQUcsRUFBRTtFQUNmLEtBQUtELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsR0FBRyxDQUFDSSxNQUFNLEVBQUVGLENBQUMsRUFBRSxFQUFFO0lBQzdCRCxHQUFHLEdBQUdELEdBQUcsQ0FBQ0ssVUFBVSxDQUFDSCxDQUFDLENBQUMsQ0FBQ0ksUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUNwQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHRixHQUFHLEVBQUVNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNyQztFQUVBLE9BQU9KLE1BQU07QUFDakI7QUFFQSxNQUFNSyxRQUFRLFNBQVNDLGNBQUssQ0FBQ0MsYUFBYSxDQUFTO0VBQUFDLFlBQUEsR0FBQUMsSUFBQTtJQUFBLFNBQUFBLElBQUE7SUFBQSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBLDBCQUNyQkMsUUFBZ0IsSUFBa0I7TUFDeEQsTUFBTTtR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