Auto select first emoji in emoji picker (#26165)
Этот коммит содержится в:
@@ -10,7 +10,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = `
|
|||||||
aria-live="assertive"
|
aria-live="assertive"
|
||||||
class="sr-only"
|
class="sr-only"
|
||||||
>
|
>
|
||||||
emoji
|
grinning emoji
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="emoji-picker__search-container"
|
class="emoji-picker__search-container"
|
||||||
@@ -159,9 +159,9 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = `
|
|||||||
class="emoji-picker__footer"
|
class="emoji-picker__footer"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="emoji-picker__preview emoji-picker__preview-placeholder"
|
class="emoji-picker__preview"
|
||||||
>
|
>
|
||||||
Select an Emoji
|
Preview for grinning emoji
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {IntlProvider} from 'react-intl';
|
import {IntlProvider} from 'react-intl';
|
||||||
|
|
||||||
|
import type {SystemEmoji} from '@mattermost/types/emojis';
|
||||||
|
|
||||||
import {render, screen} from 'tests/react_testing_utils';
|
import {render, screen} from 'tests/react_testing_utils';
|
||||||
import EmojiMap from 'utils/emoji_map';
|
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_skin', () => () => (
|
||||||
<div/>
|
<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', () => {
|
describe('components/emoji_picker/EmojiPicker', () => {
|
||||||
const intlProviderProps = {
|
const intlProviderProps = {
|
||||||
@@ -73,4 +78,19 @@ describe('components/emoji_picker/EmojiPicker', () => {
|
|||||||
|
|
||||||
expect(screen.queryByLabelText('emoji_picker.recent')).not.toBeNull();
|
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);
|
const [updatedCategoryOrEmojisRows, updatedEmojiPositions] = createCategoryAndEmojiRows(allEmojis, categories, filter, userSkinTone);
|
||||||
|
|
||||||
|
selectFirstEmoji(updatedEmojiPositions);
|
||||||
setCategoryOrEmojisRows(updatedCategoryOrEmojisRows);
|
setCategoryOrEmojisRows(updatedCategoryOrEmojisRows);
|
||||||
setEmojiPositionsArray(updatedEmojiPositions);
|
setEmojiPositionsArray(updatedEmojiPositions);
|
||||||
throttledSearchCustomEmoji.current(filter, customEmojisEnabled);
|
throttledSearchCustomEmoji.current(filter, customEmojisEnabled);
|
||||||
@@ -159,6 +160,22 @@ const EmojiPicker = ({
|
|||||||
return emoji;
|
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) => {
|
const handleCategoryClick = useCallback((categoryRowIndex: CategoryOrEmojiRow['index'], categoryName: EmojiCategory, emojiId: string) => {
|
||||||
if (!categoryName || categoryName === activeCategory || !emojiId) {
|
if (!categoryName || categoryName === activeCategory || !emojiId) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user