From a4cc97679ced79e6a97914e71ae095a8f29bebc8 Mon Sep 17 00:00:00 2001 From: goooov <64647858+gvarma28@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:13:08 +0530 Subject: [PATCH] [MM-60072] Convert ./components/emoji/emoji_list_item/emoji_list_item.tsx from Class Component to Function Component (#27904) * refactor: converted emoji_list_item to functional component * feat: added suggested changes * refactor: minor change --------- Co-authored-by: Mattermost Build --- .../emoji/emoji_list_item/emoji_list_item.tsx | 115 +++++++++--------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/webapp/channels/src/components/emoji/emoji_list_item/emoji_list_item.tsx b/webapp/channels/src/components/emoji/emoji_list_item/emoji_list_item.tsx index 17439ba6c0..5c9cfc48c2 100644 --- a/webapp/channels/src/components/emoji/emoji_list_item/emoji_list_item.tsx +++ b/webapp/channels/src/components/emoji/emoji_list_item/emoji_list_item.tsx @@ -1,7 +1,7 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import React from 'react'; +import React, {useCallback, useMemo} from 'react'; import type {CustomEmoji} from '@mattermost/types/emojis'; @@ -22,72 +22,71 @@ export type Props = { actions: { deleteCustomEmoji: (emojiId: string) => void; }; -} +}; -export default class EmojiListItem extends React.PureComponent { - static defaultProps = { - emoji: {} as CustomEmoji, - currentUserId: '', - creatorDisplayName: '', - }; +const DELETE_PERMISSION = [Permissions.DELETE_EMOJIS]; +const DELETE_OTHER_PERMISSION = [Permissions.DELETE_OTHERS_EMOJIS]; - handleDelete = (): void => { - if (!this.props.emoji) { +const EmojiListItem = ({ + actions: { + deleteCustomEmoji, + }, + onDelete, + emoji = {} as CustomEmoji, + creatorUsername, + currentUserId = '', + creatorDisplayName = '', +}: Props) => { + const emoticonStyle = useMemo(() => { + return {backgroundImage: `url(${Client4.getCustomEmojiImageUrl(emoji.id)})`}; + }, [emoji.id]); + + const handleDelete = useCallback((): void => { + if (!emoji) { return; } - - if (this.props.onDelete) { - this.props.onDelete(this.props.emoji.id); + if (onDelete) { + onDelete(emoji.id); } + deleteCustomEmoji(emoji.id); + }, [deleteCustomEmoji, emoji, onDelete]); - this.props.actions.deleteCustomEmoji(this.props.emoji.id); - }; + let displayName = creatorDisplayName; + if (creatorUsername && creatorUsername !== displayName) { + displayName += ' (@' + creatorUsername + ')'; + } - render(): JSX.Element { - const emoji = this.props.emoji as CustomEmoji; - const creatorUsername = this.props.creatorUsername; - let creatorDisplayName = this.props.creatorDisplayName; + let deleteButton = ; - if (creatorUsername && creatorUsername !== creatorDisplayName) { - creatorDisplayName += ' (@' + creatorUsername + ')'; - } - - let deleteButton = ; - - if (emoji.creator_id === this.props.currentUserId) { - deleteButton = ( - + if (emoji.creator_id === currentUserId) { + deleteButton = ( + + {deleteButton} + + ); + } else { + deleteButton = ( + + {deleteButton} - ); - } else { - deleteButton = ( - - - {deleteButton} - - - ); - } - - return ( - - - {':' + emoji.name + ':'} - - - - - - {creatorDisplayName} - - - {deleteButton} - - + ); } -} + + return ( + + {':' + emoji.name + ':'} + + + + {displayName} + {deleteButton} + + ); +}; + +export default React.memo(EmojiListItem);