From 2c73429ff8f3d1d13aa4d3f5aa39f5f6cf0c9437 Mon Sep 17 00:00:00 2001 From: Danish Date: Fri, 26 Aug 2022 19:48:15 +0530 Subject: [PATCH] Refactoring --- app/containers/EmojiPicker/categories.ts | 14 +---- app/containers/EmojiPicker/index.tsx | 76 ++++++++++++++---------- app/definitions/IEmoji.ts | 21 +++++++ 3 files changed, 66 insertions(+), 45 deletions(-) diff --git a/app/containers/EmojiPicker/categories.ts b/app/containers/EmojiPicker/categories.ts index b0592ad7a..0eaca271b 100644 --- a/app/containers/EmojiPicker/categories.ts +++ b/app/containers/EmojiPicker/categories.ts @@ -1,19 +1,9 @@ import { TIconsName } from '../CustomIcon'; +import { IEmojiCategoryName } from '../../definitions'; -export type IEmojiCategory = - | 'frequentlyUsed' - | 'custom' - | 'people' - | 'nature' - | 'food' - | 'activity' - | 'travel' - | 'objects' - | 'symbols' - | 'flags'; const tabs: { key: TIconsName; - title: IEmojiCategory; + title: IEmojiCategoryName; }[] = [ { key: 'clock', diff --git a/app/containers/EmojiPicker/index.tsx b/app/containers/EmojiPicker/index.tsx index 6e6664e68..f01368f72 100644 --- a/app/containers/EmojiPicker/index.tsx +++ b/app/containers/EmojiPicker/index.tsx @@ -7,17 +7,44 @@ import TabBar from './TabBar'; import EmojiCategory from './EmojiCategory'; import Footer from './Footer'; import styles from './styles'; -import categories, { IEmojiCategory } from './categories'; +import categories from './categories'; import { emojisByCategory } from './emojis'; import shortnameToUnicode from '../../lib/methods/helpers/shortnameToUnicode'; import log from '../../lib/methods/helpers/log'; import { useTheme } from '../../theme'; -import { IEmoji, ICustomEmojis } from '../../definitions'; +import { IEmoji, ICustomEmojis, IEmojiPickerCategory, IEmojiCategoryName } from '../../definitions'; import { useAppSelector } from '../../lib/hooks'; import { IEmojiPickerProps, EventTypes } from './interfaces'; import { useFrequentlyUsedEmoji, addFrequentlyUsed } from './frequentlyUsedEmojis'; import { TIconsName } from '../CustomIcon'; +const Category = ({ + title, + frequentlyUsed, + customEmojis, + handleEmojiSelect, + baseUrl, + tabsCount +}: IEmojiPickerCategory): React.ReactElement => { + let emojis: (IEmoji | string)[] = []; + if (title === 'frequentlyUsed') { + emojis = frequentlyUsed; + } else if (title === 'custom') { + emojis = customEmojis; + } else { + emojis = emojisByCategory[title]; + } + return ( + handleEmojiSelect(emoji)} + style={styles.categoryContainer} + baseUrl={baseUrl} + tabsCount={tabsCount} + /> + ); +}; + const EmojiPicker = ({ onItemClicked, isEmojiKeyboard = false, @@ -31,7 +58,7 @@ const EmojiPicker = ({ const baseUrl = useAppSelector(state => state.server?.server); const allCustomEmojis: ICustomEmojis = useAppSelector(state => state.customEmojis, shallowEqual); - const customEmojis = useMemo( + const customEmojis: IEmoji[] = useMemo( () => Object.keys(allCustomEmojis) .filter(item => item === allCustomEmojis[item].name) @@ -66,29 +93,9 @@ const EmojiPicker = ({ const tabsCount = frequentlyUsed.length === 0 ? categories.length - 1 : categories.length; - const Category = React.memo(({ title }: { title: IEmojiCategory }) => { - let emojis = []; - if (title === 'frequentlyUsed') { - emojis = frequentlyUsed; - } else if (title === 'custom') { - emojis = customEmojis; - } else { - emojis = emojisByCategory[title]; - } - return ( - handleEmojiSelect(emoji)} - style={styles.categoryContainer} - baseUrl={baseUrl} - tabsCount={tabsCount} - /> - ); - }); - type Route = { - key: string; - title: string; + key: TIconsName; + title: IEmojiCategoryName; }; type State = NavigationState; const renderTabBar = (props: SceneRendererProps & { navigationState: State }) => ( @@ -113,14 +120,17 @@ const EmojiPicker = ({ } + renderScene={({ route }: { route: Route }) => ( + + )} onIndexChange={setIndex} style={{ backgroundColor: colors.focusedBackground }} renderTabBar={renderTabBar} diff --git a/app/definitions/IEmoji.ts b/app/definitions/IEmoji.ts index 495a5587f..855141a8d 100644 --- a/app/definitions/IEmoji.ts +++ b/app/definitions/IEmoji.ts @@ -36,6 +36,27 @@ export interface IEmojiCategory { tabsCount: number; } +export type IEmojiCategoryName = + | 'frequentlyUsed' + | 'custom' + | 'people' + | 'nature' + | 'food' + | 'activity' + | 'travel' + | 'objects' + | 'symbols' + | 'flags'; + +export interface IEmojiPickerCategory { + title: IEmojiCategoryName; + frequentlyUsed: (IEmoji | string)[]; + customEmojis: IEmoji[]; + handleEmojiSelect: (emoji: IEmoji | string) => void; + baseUrl: string; + tabsCount: number; +} + export type TGetCustomEmoji = (name: string) => any; export type TFrequentlyUsedEmojiModel = IEmoji & Model;