diff --git a/webapp/channels/src/components/emoji_picker/__snapshots__/emoji_picker.test.tsx.snap b/webapp/channels/src/components/emoji_picker/__snapshots__/emoji_picker.test.tsx.snap
index ea77492c92..04027027b5 100644
--- a/webapp/channels/src/components/emoji_picker/__snapshots__/emoji_picker.test.tsx.snap
+++ b/webapp/channels/src/components/emoji_picker/__snapshots__/emoji_picker.test.tsx.snap
@@ -10,7 +10,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = `
aria-live="assertive"
class="sr-only"
>
- emoji
+ grinning emoji
- Select an Emoji
+ Preview for grinning emoji
diff --git a/webapp/channels/src/components/emoji_picker/emoji_picker.test.tsx b/webapp/channels/src/components/emoji_picker/emoji_picker.test.tsx
index 97ccb8e3ad..92effa827f 100644
--- a/webapp/channels/src/components/emoji_picker/emoji_picker.test.tsx
+++ b/webapp/channels/src/components/emoji_picker/emoji_picker.test.tsx
@@ -4,6 +4,8 @@
import React from 'react';
import {IntlProvider} from 'react-intl';
+import type {SystemEmoji} from '@mattermost/types/emojis';
+
import {render, screen} from 'tests/react_testing_utils';
import EmojiMap from 'utils/emoji_map';
@@ -12,6 +14,9 @@ import EmojiPicker from './emoji_picker';
jest.mock('components/emoji_picker/components/emoji_picker_skin', () => () => (
));
+jest.mock('components/emoji_picker/components/emoji_picker_preview', () => ({emoji}: {emoji?: SystemEmoji}) => (
+ {`Preview for ${emoji?.short_name} emoji`}
+));
describe('components/emoji_picker/EmojiPicker', () => {
const intlProviderProps = {
@@ -73,4 +78,19 @@ describe('components/emoji_picker/EmojiPicker', () => {
expect(screen.queryByLabelText('emoji_picker.recent')).not.toBeNull();
});
+
+ test('First emoji should be selected on search', () => {
+ const props = {
+ ...baseProps,
+ filter: 'wave',
+ };
+
+ render(
+
+
+ ,
+ );
+
+ expect(screen.queryByText('Preview for wave emoji')).not.toBeNull();
+ });
});
diff --git a/webapp/channels/src/components/emoji_picker/emoji_picker.tsx b/webapp/channels/src/components/emoji_picker/emoji_picker.tsx
index 6585787f09..db1705aa26 100644
--- a/webapp/channels/src/components/emoji_picker/emoji_picker.tsx
+++ b/webapp/channels/src/components/emoji_picker/emoji_picker.tsx
@@ -120,6 +120,7 @@ const EmojiPicker = ({
const [updatedCategoryOrEmojisRows, updatedEmojiPositions] = createCategoryAndEmojiRows(allEmojis, categories, filter, userSkinTone);
+ selectFirstEmoji(updatedEmojiPositions);
setCategoryOrEmojisRows(updatedCategoryOrEmojisRows);
setEmojiPositionsArray(updatedEmojiPositions);
throttledSearchCustomEmoji.current(filter, customEmojisEnabled);
@@ -159,6 +160,22 @@ const EmojiPicker = ({
return emoji;
};
+ const selectFirstEmoji = (emojiPositions: EmojiPosition[]) => {
+ if (!emojiPositions[0]) {
+ return;
+ }
+
+ const {rowIndex, emojiId} = emojiPositions[0];
+ const cursorEmoji = getEmojiById(emojiId);
+ if (cursorEmoji) {
+ setCursor({
+ rowIndex,
+ emojiId,
+ emoji: cursorEmoji,
+ });
+ }
+ };
+
const handleCategoryClick = useCallback((categoryRowIndex: CategoryOrEmojiRow['index'], categoryName: EmojiCategory, emojiId: string) => {
if (!categoryName || categoryName === activeCategory || !emojiId) {
return;