return (
<div id="emoji-board" className="emoji-board">
- <div className="emoji-board__content">
- <div className="emoji-board__content__search">
- <RawIcon size="small" src={SearchIC} />
- <Input onChange={handleSearchChange} forwardRef={searchRef} placeholder="Search" />
- </div>
- <div className="emoji-board__content__emojis">
- <ScrollView ref={scrollEmojisRef} autoHide>
- <div onMouseMove={hoverEmoji} onClick={selectEmoji}>
- <SearchedEmoji />
- {recentEmojis.length > 0 && <EmojiGroup name="Recently used" groupEmojis={recentEmojis} />}
- {
- availableEmojis.map((pack) => (
- <EmojiGroup
- name={pack.displayName ?? 'Unknown'}
- key={pack.packIndex}
- groupEmojis={pack.getEmojis()}
- className="custom-emoji-group"
- />
- ))
- }
- {
- emojiGroups.map((group) => (
- <EmojiGroup key={group.name} name={group.name} groupEmojis={group.emojis} />
- ))
- }
- </div>
- </ScrollView>
- </div>
- <div ref={emojiInfo} className="emoji-board__content__info">
- <div>{ parse(twemoji.parse('🙂')) }</div>
- <Text>:slight_smile:</Text>
- </div>
- </div>
<ScrollView invisible>
<div className="emoji-board__nav">
{recentEmojis.length > 0 && (
onClick={() => openGroup(0)}
src={RecentClockIC}
tooltip="Recent"
- tooltipPlacement="right"
+ tooltipPlacement="left"
/>
)}
<div className="emoji-board__nav-custom">
src={src}
key={pack.packIndex}
tooltip={pack.displayName ?? 'Unknown'}
- tooltipPlacement="right"
+ tooltipPlacement="left"
isImage
/>
);
key={indx}
src={ico}
tooltip={name}
- tooltipPlacement="right"
+ tooltipPlacement="left"
/>
))
}
</div>
</div>
</ScrollView>
+ <div className="emoji-board__content">
+ <div className="emoji-board__content__search">
+ <RawIcon size="small" src={SearchIC} />
+ <Input onChange={handleSearchChange} forwardRef={searchRef} placeholder="Search" />
+ </div>
+ <div className="emoji-board__content__emojis">
+ <ScrollView ref={scrollEmojisRef} autoHide>
+ <div onMouseMove={hoverEmoji} onClick={selectEmoji}>
+ <SearchedEmoji />
+ {recentEmojis.length > 0 && <EmojiGroup name="Recently used" groupEmojis={recentEmojis} />}
+ {
+ availableEmojis.map((pack) => (
+ <EmojiGroup
+ name={pack.displayName ?? 'Unknown'}
+ key={pack.packIndex}
+ groupEmojis={pack.getEmojis()}
+ className="custom-emoji-group"
+ />
+ ))
+ }
+ {
+ emojiGroups.map((group) => (
+ <EmojiGroup key={group.name} name={group.name} groupEmojis={group.emojis} />
+ ))
+ }
+ </div>
+ </ScrollView>
+ </div>
+ <div ref={emojiInfo} className="emoji-board__content__info">
+ <div>{ parse(twemoji.parse('🙂')) }</div>
+ <Text>:slight_smile:</Text>
+ </div>
+ </div>
</div>
);
}
/* eslint-disable jsx-a11y/click-events-have-key-events */
/* eslint-disable jsx-a11y/no-static-element-interactions */
-import React from 'react';
+import React, { useRef } from 'react';
import PropTypes from 'prop-types';
import './StickerBoard.scss';
import Text from '../../atoms/text/Text';
import ScrollView from '../../atoms/scroll/ScrollView';
+import IconButton from '../../atoms/button/IconButton';
function StickerBoard({ roomId, onSelect }) {
const mx = initMatrix.matrixClient;
const room = mx.getRoom(roomId);
+ const scrollRef = useRef(null);
const parentIds = initMatrix.roomList.getAllParentSpaces(room.roomId);
const parentRooms = [...parentIds].map((id) => mx.getRoom(id));
onSelect(stickerData);
};
+ const openGroup = (groupIndex) => {
+ const scrollContent = scrollRef.current.firstElementChild;
+ scrollContent.children[groupIndex].scrollIntoView();
+ };
+
const renderPack = (pack) => (
<div className="sticker-board__pack" key={pack.id}>
<Text className="sticker-board__pack-header" variant="b2" weight="bold">{pack.displayName ?? 'Unknown'}</Text>
alt={sticker.shortcode}
title={sticker.body ?? sticker.shortcode}
data-mx-sticker={sticker.mxc}
+ loading="lazy"
/>
))}
</div>
return (
<div className="sticker-board">
+ {packs.length > 0 && (
+ <ScrollView invisible>
+ <div className="sticker-board__sidebar">
+ {packs.map((pack, index) => {
+ const src = mx.mxcUrlToHttp(pack.avatarUrl ?? pack.getStickers()[0].mxc);
+ return (
+ <IconButton
+ key={pack.id}
+ onClick={() => openGroup(index)}
+ src={src}
+ tooltip={pack.displayName || 'Unknown'}
+ tooltipPlacement="left"
+ isImage
+ />
+ );
+ })}
+ </div>
+ </ScrollView>
+ )}
<div className="sticker-board__container">
- <ScrollView autoHide>
+ <ScrollView autoHide ref={scrollRef}>
<div
onClick={handleOnSelect}
className="sticker-board__content"