|
1 |
| -import { PureComponent } from "react"; |
2 | 1 | import * as Styles from "./style/message";
|
3 | 2 | import Tooltip from "../Tooltip";
|
4 | 3 | import webpCheck from "../utils/webpCheck";
|
5 |
| -import { memoize } from "lodash"; |
6 | 4 | import * as React from "react";
|
7 | 5 | import { Twemoji } from "../Emoji";
|
8 | 6 | import type { APIRole } from "discord-api-types/v10";
|
| 7 | +import { useTranslation } from "react-i18next"; |
9 | 8 |
|
10 | 9 | interface RoleIconProps {
|
11 | 10 | role: APIRole;
|
12 | 11 | }
|
13 | 12 |
|
14 |
| -class RoleIcon extends PureComponent<RoleIconProps> { |
15 |
| - private getRoleIcon = memoize((icon: string, roleId: string): string => |
16 |
| - webpCheck(`https://cdn.discordapp.com/role-icons/${roleId}/${icon}.webp`) |
17 |
| - ); |
18 |
| - |
19 |
| - render() { |
20 |
| - if ( |
21 |
| - this.props.role.unicode_emoji !== null && |
22 |
| - this.props.role.unicode_emoji !== undefined |
23 |
| - ) |
24 |
| - return ( |
25 |
| - <Tooltip overlay={this.props.role.name} placement="top"> |
26 |
| - <span> |
27 |
| - <Styles.RoleIcon |
28 |
| - as={Twemoji} |
29 |
| - disableTooltip={true} |
30 |
| - emojiName={this.props.role.unicode_emoji ?? "unknown emoji"} |
31 |
| - > |
32 |
| - {this.props.role.unicode_emoji} |
33 |
| - </Styles.RoleIcon> |
34 |
| - </span> |
35 |
| - </Tooltip> |
36 |
| - ); |
| 13 | +function RoleIcon(props: RoleIconProps) { |
| 14 | + const { t } = useTranslation(); |
37 | 15 |
|
38 |
| - if (this.props.role.icon === null || this.props.role.icon === undefined) { |
39 |
| - console.error( |
40 |
| - "Role icon AND unicode_emoji is null or undefined but RoleIcon was rendered." |
41 |
| - ); |
42 |
| - return null; |
43 |
| - } |
44 |
| - |
45 |
| - const iconUrl = this.getRoleIcon(this.props.role.icon, this.props.role.id); |
| 16 | + const roleIconUrl = webpCheck( |
| 17 | + `https://cdn.discordapp.com/role-icons/${props.role.id}/${props.role.icon}.webp` |
| 18 | + ); |
46 | 19 |
|
| 20 | + if ( |
| 21 | + props.role.unicode_emoji !== null && |
| 22 | + props.role.unicode_emoji !== undefined |
| 23 | + ) |
47 | 24 | return (
|
48 |
| - <Tooltip overlay={this.props.role.name} placement="top"> |
49 |
| - <Styles.RoleIcon src={iconUrl} /> |
| 25 | + <Tooltip overlay={props.role.name} placement="top"> |
| 26 | + <span> |
| 27 | + <Styles.RoleIcon |
| 28 | + as={Twemoji} |
| 29 | + disableTooltip={true} |
| 30 | + emojiName={props.role.unicode_emoji ?? t("unknownEntities.emoji")} |
| 31 | + > |
| 32 | + {props.role.unicode_emoji} |
| 33 | + </Styles.RoleIcon> |
| 34 | + </span> |
50 | 35 | </Tooltip>
|
51 | 36 | );
|
| 37 | + |
| 38 | + if (props.role.icon === null || props.role.icon === undefined) { |
| 39 | + console.error( |
| 40 | + "Role icon AND unicode_emoji is null or undefined but RoleIcon was rendered." |
| 41 | + ); |
| 42 | + return null; |
52 | 43 | }
|
| 44 | + |
| 45 | + return ( |
| 46 | + <Tooltip overlay={props.role.name} placement="top"> |
| 47 | + <Styles.RoleIcon src={roleIconUrl} /> |
| 48 | + </Tooltip> |
| 49 | + ); |
53 | 50 | }
|
54 | 51 |
|
55 | 52 | export default RoleIcon;
|
0 commit comments