import React, { useCallback, useMemo, useState } from 'react';
import { Platform, StyleSheet, Text } from 'react-native';
import { Pressable } from 'react-native-gesture-handler';
import { emojis } from './emojis';
import { useHasOwnReaction } from './hooks/useHasOwnReaction';
import { toUnicodeScalarString } from './utils/toUnicodeScalarString';
import { useTheme } from '../../contexts/themeContext/ThemeContext';
import { useStableCallback } from '../../hooks';
import { primitives } from '../../theme';
import { StreamBottomSheetModalFlatList } from '../UIComponents';
const EMOJI_SIZE = Platform.OS === 'ios' ? 32 : 28;
const emojiKeyExtractor = (item: string) => `unicode-${item}`;
export const Emoji = ({ item, size }: { item: string; size: number }) => {
const styles = useStyles();
return (
{item}
);
};
export const EmojiPickerListItem = ({
emoji,
onSelectEmoji,
}: {
emoji: string;
onSelectEmoji: (emoji: string) => void;
}) => {
const styles = useStyles();
const [emojiScalar] = useState(() => toUnicodeScalarString(emoji));
const hasOwnReaction = useHasOwnReaction(emojiScalar);
return (
onSelectEmoji(emoji)}
style={[styles.emojiContainer, hasOwnReaction ? styles.selectedEmoji : null]}
>
);
};
export const EmojiPickerList = ({
onSelectReaction,
renderFullInitially = true,
}: {
onSelectReaction: (unicode: string) => void;
// whether all of the items should be rendered initially or not
renderFullInitially?: boolean;
}) => {
const styles = useStyles();
const onSelectEmoji = useStableCallback((emoji: string) => {
const scalarString = toUnicodeScalarString(emoji);
onSelectReaction(scalarString);
});
const renderEmoji = useCallback(
({ item }: { item: string }) => {
return ;
},
[onSelectEmoji],
);
return (
);
};
const useStyles = () => {
const {
theme: { semantics },
} = useTheme();
return useMemo(
() =>
StyleSheet.create({
bottomSheetColumnWrapper: {
alignItems: 'center',
justifyContent: 'center',
width: '100%',
height: 54,
},
bottomSheetContentContainer: { paddingBottom: 16 },
emojiContainer: {
alignItems: 'center',
justifyContent: 'center',
borderRadius: primitives.radiusMax,
padding: primitives.spacingXs,
},
emojiText: {
textAlign: 'center',
},
selectedEmoji: {
backgroundColor: semantics.backgroundUtilitySelected,
},
}),
[semantics.backgroundUtilitySelected],
);
};