Refactor Emoji component, add more comprehensive tests
This commit is contained in:
parent
b6d2a8766d
commit
182f5e6302
|
@ -1,12 +1,23 @@
|
||||||
import React from 'react';
|
import * as React from 'react';
|
||||||
|
|
||||||
import { render, screen } from '../../../../jest/test-helpers';
|
import { render, screen } from '../../../../jest/test-helpers';
|
||||||
import Emoji from '../emoji';
|
import Emoji from '../emoji';
|
||||||
|
|
||||||
describe('<Emoji />', () => {
|
describe('<Emoji />', () => {
|
||||||
it('renders the given text', () => {
|
it('renders a simple emoji', () => {
|
||||||
render(<Emoji emoji='smile' />);
|
render(<Emoji emoji='😀' />);
|
||||||
|
|
||||||
expect(screen.getByRole('img').getAttribute('alt')).toBe('smile');
|
const img = screen.getByRole('img');
|
||||||
|
expect(img.getAttribute('src')).toBe('/packs/emoji/1f600.svg');
|
||||||
|
expect(img.getAttribute('alt')).toBe('😀');
|
||||||
|
});
|
||||||
|
|
||||||
|
// https://emojipedia.org/emoji-flag-sequence/
|
||||||
|
it('renders a sequence emoji', () => {
|
||||||
|
render(<Emoji emoji='🇺🇸' />);
|
||||||
|
|
||||||
|
const img = screen.getByRole('img');
|
||||||
|
expect(img.getAttribute('src')).toBe('/packs/emoji/1f1fa-1f1f8.svg');
|
||||||
|
expect(img.getAttribute('alt')).toBe('🇺🇸');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -29,12 +29,12 @@ const toCodePoints = (unicodeSurrogates: string): string[] => {
|
||||||
return points;
|
return points;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface IEmoji {
|
interface IEmoji extends React.ImgHTMLAttributes<HTMLImageElement> {
|
||||||
className?: string,
|
|
||||||
emoji: string,
|
emoji: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
const Emoji: React.FC<IEmoji> = ({ className, emoji }): JSX.Element | null => {
|
const Emoji: React.FC<IEmoji> = (props): JSX.Element | null => {
|
||||||
|
const { emoji, alt, ...rest } = props;
|
||||||
const codepoints = toCodePoints(removeVS16s(emoji));
|
const codepoints = toCodePoints(removeVS16s(emoji));
|
||||||
const filename = codepoints.join('-');
|
const filename = codepoints.join('-');
|
||||||
|
|
||||||
|
@ -43,9 +43,9 @@ const Emoji: React.FC<IEmoji> = ({ className, emoji }): JSX.Element | null => {
|
||||||
return (
|
return (
|
||||||
<img
|
<img
|
||||||
draggable='false'
|
draggable='false'
|
||||||
className={className}
|
alt={alt || emoji}
|
||||||
alt={emoji}
|
|
||||||
src={joinPublicPath(`packs/emoji/${filename}.svg`)}
|
src={joinPublicPath(`packs/emoji/${filename}.svg`)}
|
||||||
|
{...rest}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue