import React, { useMemo } from 'react'; import { StyleSheet, Text, View } from 'react-native'; import { useTheme } from '../../contexts/themeContext/ThemeContext'; import { Smile } from '../../icons/emoji'; import { primitives } from '../../theme'; export type AutoCompleteSuggestionHeaderProps = { queryText?: string; triggerType?: string; }; export const CommandsHeader: React.FC = () => { const { theme: { semantics, messageComposer: { suggestions: { header: { container, title }, }, }, }, } = useTheme(); const styles = useStyles(); return ( {'Instant Commands'} ); }; export const EmojiHeader: React.FC = ({ queryText }) => { const { theme: { messageComposer: { suggestions: { header: { container, title }, }, }, semantics, }, } = useTheme(); const styles = useStyles(); return ( {`Emoji matching "${queryText}"`} ); }; const UnMemoizedAutoCompleteSuggestionHeader = ({ queryText, triggerType, }: AutoCompleteSuggestionHeaderProps) => { if (triggerType === 'command') { return ; } else if (triggerType === 'emoji') { return ; } else { return null; } }; const areEqual = ( prevProps: AutoCompleteSuggestionHeaderProps, nextProps: AutoCompleteSuggestionHeaderProps, ) => { const { queryText: prevQueryText, triggerType: prevType } = prevProps; const { queryText: nextQueryText, triggerType: nextType } = nextProps; const typeEqual = prevType === nextType; if (!typeEqual) { return false; } const valueEqual = prevQueryText === nextQueryText; if (!valueEqual) { return false; } return true; }; const MemoizedAutoCompleteSuggestionHeader = React.memo( UnMemoizedAutoCompleteSuggestionHeader, areEqual, ); export const AutoCompleteSuggestionHeader = (props: AutoCompleteSuggestionHeaderProps) => ( ); AutoCompleteSuggestionHeader.displayName = 'AutoCompleteSuggestionHeader{messageComposer{suggestions{Header}}}'; const useStyles = () => { const { theme: { semantics }, } = useTheme(); return useMemo(() => { return StyleSheet.create({ container: { alignItems: 'center', flexDirection: 'row', padding: 8, }, title: { fontSize: primitives.typographyFontSizeSm, lineHeight: primitives.typographyLineHeightNormal, fontWeight: primitives.typographyFontWeightMedium, paddingLeft: 8, color: semantics.textSecondary, }, }); }, [semantics]); };