mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
Auto select first emoji in emoji picker (#26165)
This commit is contained in:
@@ -10,7 +10,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = `
|
||||
aria-live="assertive"
|
||||
class="sr-only"
|
||||
>
|
||||
emoji
|
||||
grinning emoji
|
||||
</div>
|
||||
<div
|
||||
class="emoji-picker__search-container"
|
||||
@@ -159,9 +159,9 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = `
|
||||
class="emoji-picker__footer"
|
||||
>
|
||||
<div
|
||||
class="emoji-picker__preview emoji-picker__preview-placeholder"
|
||||
class="emoji-picker__preview"
|
||||
>
|
||||
Select an Emoji
|
||||
Preview for grinning emoji
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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', () => () => (
|
||||
<div/>
|
||||
));
|
||||
jest.mock('components/emoji_picker/components/emoji_picker_preview', () => ({emoji}: {emoji?: SystemEmoji}) => (
|
||||
<div className='emoji-picker__preview'>{`Preview for ${emoji?.short_name} emoji`}</div>
|
||||
));
|
||||
|
||||
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(
|
||||
<IntlProvider {...intlProviderProps}>
|
||||
<EmojiPicker {...props}/>
|
||||
</IntlProvider>,
|
||||
);
|
||||
|
||||
expect(screen.queryByText('Preview for wave emoji')).not.toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user