From 1da3d252e8f4ed7e1a6573f87e6275ead403b1c1 Mon Sep 17 00:00:00 2001
From: Ajay Bura <32841439+ajbura@users.noreply.github.com>
Date: Thu, 11 Aug 2022 16:13:53 +0530
Subject: [PATCH] Add navigation bar to sticker board
---
src/app/organisms/emoji-board/EmojiBoard.jsx | 72 +++++++++----------
src/app/organisms/emoji-board/EmojiBoard.scss | 9 ++-
.../organisms/sticker-board/StickerBoard.jsx | 31 +++++++-
.../organisms/sticker-board/StickerBoard.scss | 16 +++++
4 files changed, 87 insertions(+), 41 deletions(-)
diff --git a/src/app/organisms/emoji-board/EmojiBoard.jsx b/src/app/organisms/emoji-board/EmojiBoard.jsx
index b97cab0..d976232 100644
--- a/src/app/organisms/emoji-board/EmojiBoard.jsx
+++ b/src/app/organisms/emoji-board/EmojiBoard.jsx
@@ -252,39 +252,6 @@ function EmojiBoard({ onSelect, searchRef }) {
return (
-
-
-
-
-
-
-
-
-
- {recentEmojis.length > 0 && }
- {
- availableEmojis.map((pack) => (
-
- ))
- }
- {
- emojiGroups.map((group) => (
-
- ))
- }
-
-
-
-
-
{ parse(twemoji.parse('ð')) }
-
:slight_smile:
-
-
{recentEmojis.length > 0 && (
@@ -292,7 +259,7 @@ function EmojiBoard({ onSelect, searchRef }) {
onClick={() => openGroup(0)}
src={RecentClockIC}
tooltip="Recent"
- tooltipPlacement="right"
+ tooltipPlacement="left"
/>
)}
@@ -306,7 +273,7 @@ function EmojiBoard({ onSelect, searchRef }) {
src={src}
key={pack.packIndex}
tooltip={pack.displayName ?? 'Unknown'}
- tooltipPlacement="right"
+ tooltipPlacement="left"
isImage
/>
);
@@ -330,13 +297,46 @@ function EmojiBoard({ onSelect, searchRef }) {
key={indx}
src={ico}
tooltip={name}
- tooltipPlacement="right"
+ tooltipPlacement="left"
/>
))
}
+
+
+
+
+
+
+
+
+
+ {recentEmojis.length > 0 && }
+ {
+ availableEmojis.map((pack) => (
+
+ ))
+ }
+ {
+ emojiGroups.map((group) => (
+
+ ))
+ }
+
+
+
+
+
{ parse(twemoji.parse('ð')) }
+
:slight_smile:
+
+
);
}
diff --git a/src/app/organisms/emoji-board/EmojiBoard.scss b/src/app/organisms/emoji-board/EmojiBoard.scss
index 6883e18..7bdaa06 100644
--- a/src/app/organisms/emoji-board/EmojiBoard.scss
+++ b/src/app/organisms/emoji-board/EmojiBoard.scss
@@ -26,7 +26,7 @@
min-height: 100%;
padding: 4px 6px;
background-color: var(--bg-surface-low);
- @include dir.side(border, 1px solid var(--bg-surface-border), none);
+ @include dir.side(border, none, 1px solid var(--bg-surface-border));
position: relative;
@@ -122,8 +122,11 @@
@include dir.side(margin, var(--left-margin), var(--right-margin));
}
& .emoji {
- width: 38px;
- height: 38px;
+ max-width: 38px;
+ max-height: 38px;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
object-fit: contain;
padding: var(--emoji-padding);
cursor: pointer;
diff --git a/src/app/organisms/sticker-board/StickerBoard.jsx b/src/app/organisms/sticker-board/StickerBoard.jsx
index 53b7563..91e2591 100644
--- a/src/app/organisms/sticker-board/StickerBoard.jsx
+++ b/src/app/organisms/sticker-board/StickerBoard.jsx
@@ -1,6 +1,6 @@
/* 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';
@@ -9,10 +9,12 @@ import { getRelevantPacks } from '../emoji-board/custom-emoji';
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));
@@ -38,6 +40,11 @@ function StickerBoard({ roomId, onSelect }) {
onSelect(stickerData);
};
+ const openGroup = (groupIndex) => {
+ const scrollContent = scrollRef.current.firstElementChild;
+ scrollContent.children[groupIndex].scrollIntoView();
+ };
+
const renderPack = (pack) => (
{pack.displayName ?? 'Unknown'}
@@ -50,6 +57,7 @@ function StickerBoard({ roomId, onSelect }) {
alt={sticker.shortcode}
title={sticker.body ?? sticker.shortcode}
data-mx-sticker={sticker.mxc}
+ loading="lazy"
/>
))}
@@ -58,8 +66,27 @@ function StickerBoard({ roomId, onSelect }) {
return (
+ {packs.length > 0 && (
+
+
+ {packs.map((pack, index) => {
+ const src = mx.mxcUrlToHttp(pack.avatarUrl ?? pack.getStickers()[0].mxc);
+ return (
+ openGroup(index)}
+ src={src}
+ tooltip={pack.displayName || 'Unknown'}
+ tooltipPlacement="left"
+ isImage
+ />
+ );
+ })}
+
+
+ )}
-
+
.scrollbar {
+ width: initial;
+ height: var(--sticker-board-height);
+ }
+
+ &__sidebar {
+ display: flex;
+ flex-direction: column;
+ min-height: 100%;
+ padding: 4px 6px;
+
+ background-color: var(--bg-surface-low);
+ @include dir.side(border, none, 1px solid var(--bg-surface-border));
+ }
&__container {
flex-grow: 1;
--
2.34.1