import React from 'react'; import { StyleSheet, Text, Pressable, View, ScrollView } from 'react-native'; import ScrollableTabView from 'react-native-scrollable-tab-view'; import { FlatList } from 'react-native-gesture-handler'; import Emoji from './message/Emoji'; import { useTheme } from '../theme'; import { TGetCustomEmoji } from '../definitions/IEmoji'; import { IReaction } from '../definitions'; import Avatar from './Avatar'; import sharedStyles from '../views/Styles'; const MIN_TAB_WIDTH = 70; const styles = StyleSheet.create({ reactionsListContainer: { height: '100%', width: '100%' }, tabBarItem: { paddingHorizontal: 10, paddingBottom: 10, justifyContent: 'center', alignItems: 'center', flexDirection: 'row' }, reactionCount: { marginLeft: 5 }, emojiName: { margin: 10 }, userItemContainer: { marginHorizontal: 10, marginVertical: 5, flexDirection: 'row' }, usernameContainer: { marginHorizontal: 10, justifyContent: 'center' }, usernameText: { fontSize: 17, ...sharedStyles.textMedium }, standardEmojiStyle: { fontSize: 20, color: '#fff' }, customEmojiStyle: { width: 25, height: 25 } }); interface IReactionsListBase { baseUrl: string; getCustomEmoji: TGetCustomEmoji; } interface IReactionsListProps extends IReactionsListBase { reactions?: IReaction[]; width: number; } interface ITabBarItem extends IReactionsListBase { tab: IReaction; index: number; goToPage?: (index: number) => void; } interface IReactionsTabBar extends IReactionsListBase { activeTab?: number; tabs?: IReaction[]; goToPage?: (index: number) => void; width: number; } const TabBarItem = ({ tab, index, goToPage, baseUrl, getCustomEmoji }: ITabBarItem) => { const { colors } = useTheme(); return ( { goToPage?.(index); }} style={({ pressed }: { pressed: boolean }) => ({ opacity: pressed ? 0.7 : 1 })} > {tab.usernames.length} ); }; const ReactionsTabBar = ({ tabs, activeTab, goToPage, baseUrl, getCustomEmoji, width }: IReactionsTabBar) => { const tabWidth = tabs && Math.max(width / tabs.length, MIN_TAB_WIDTH); const { colors } = useTheme(); return ( {tabs?.map((tab, index) => { const isActiveTab = activeTab === index; return ( ); })} ); }; const UsersList = ({ tabLabel }: { tabLabel: IReaction }) => { const { colors } = useTheme(); const { emoji, usernames } = tabLabel; return ( ( {emoji} )} renderItem={({ item }) => ( {item} )} keyExtractor={item => item} /> ); }; const ReactionsList = ({ reactions, baseUrl, getCustomEmoji, width }: IReactionsListProps): React.ReactElement => { // sorting reactions in descending order on the basic of number of users reacted const sortedReactions = reactions?.sort((reaction1, reaction2) => reaction2.usernames.length - reaction1.usernames.length); return ( }> {sortedReactions?.map(reaction => ( ))} ); }; export default ReactionsList;