Rocket.Chat.ReactNative/app/containers/MessageComposer/components/Autocomplete/AutocompleteItem.tsx

43 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-01-25 14:11:07 +00:00
import React from 'react';
import { View } from 'react-native';
import { RectButton } from 'react-native-gesture-handler';
import { IAutocompleteItemProps, TAutocompleteItem } from '../../interfaces';
import { AutocompleteUserRoom } from './AutocompleteUserRoom';
import { AutocompleteEmoji } from './AutocompleteEmoji';
import { AutocompleteSlashCommand } from './AutocompleteSlashCommand';
import { AutocompleteCannedResponse } from './AutocompleteCannedResponse';
import { AutocompleteItemLoading } from './AutocompleteItemLoading';
import { useStyle } from './styles';
const getTestIDSuffix = (item: TAutocompleteItem) => {
if ('title' in item) {
return item.title;
}
if ('emoji' in item) {
return item.emoji;
}
return item.id;
};
export const AutocompleteItem = ({ item, onPress }: IAutocompleteItemProps) => {
const [styles, colors] = useStyle();
return (
<RectButton
onPress={() => onPress(item)}
underlayColor={colors.buttonBackgroundPrimaryPress}
style={{ backgroundColor: colors.surfaceLight }}
rippleColor={colors.buttonBackgroundPrimaryPress}
testID={`autocomplete-item-${getTestIDSuffix(item)}`}
>
<View style={styles.item}>
{item.type === '@' || item.type === '#' ? <AutocompleteUserRoom item={item} /> : null}
{item.type === ':' ? <AutocompleteEmoji item={item} /> : null}
{item.type === '/' ? <AutocompleteSlashCommand item={item} /> : null}
{item.type === '!' ? <AutocompleteCannedResponse item={item} /> : null}
{item.type === 'loading' ? <AutocompleteItemLoading /> : null}
</View>
</RectButton>
);
};