import React from 'react'; import { I18nManager, StyleProp, StyleSheet, Text, TextStyle, View } from 'react-native'; import Touch from '../../utils/touch'; import { themes } from '../../lib/constants'; import sharedStyles from '../../views/Styles'; import { TSupportedThemes, useTheme } from '../../theme'; import I18n from '../../i18n'; import { Icon } from '.'; import { BASE_HEIGHT, ICON_SIZE, PADDING_HORIZONTAL } from './constants'; import { useDimensions } from '../../dimensions'; import { CustomIcon } from '../../lib/Icons'; const styles = StyleSheet.create({ container: { flex: 1, flexDirection: 'row', alignItems: 'center', justifyContent: 'center', paddingHorizontal: PADDING_HORIZONTAL }, leftContainer: { paddingRight: PADDING_HORIZONTAL }, rightContainer: { paddingLeft: PADDING_HORIZONTAL }, disabled: { opacity: 0.3 }, textContainer: { flex: 1, justifyContent: 'center' }, textAlertContainer: { flexDirection: 'row', alignItems: 'center' }, alertIcon: { paddingLeft: 4 }, title: { flexShrink: 1, fontSize: 16, ...sharedStyles.textRegular }, subtitle: { fontSize: 14, ...sharedStyles.textRegular }, actionIndicator: { ...(I18nManager.isRTL ? { transform: [{ rotate: '180deg' }] } : {}) } }); interface IListItemContent { title?: string; subtitle?: string; left?: () => JSX.Element | null; right?: () => JSX.Element | null; disabled?: boolean; theme: TSupportedThemes; testID?: string; color?: string; translateTitle?: boolean; translateSubtitle?: boolean; showActionIndicator?: boolean; alert?: boolean; heightContainer?: number; styleTitle?: StyleProp; } const Content = React.memo( ({ title, subtitle, disabled, testID, left, right, color, alert, translateTitle = true, translateSubtitle = true, showActionIndicator = false, theme, heightContainer, styleTitle }: IListItemContent) => { const { fontScale } = useDimensions(); return ( {left ? {left()} : null} {translateTitle && title ? I18n.t(title) : title} {alert ? ( ) : null} {subtitle ? ( {translateSubtitle ? I18n.t(subtitle) : subtitle} ) : null} {right || showActionIndicator ? ( {right ? right() : null} {showActionIndicator ? : null} ) : null} ); } ); interface IListButtonPress extends IListItemButton { onPress: Function; } interface IListItemButton { title?: string; disabled?: boolean; theme: TSupportedThemes; backgroundColor?: string; underlayColor?: string; } const Button = React.memo(({ onPress, backgroundColor, underlayColor, ...props }: IListButtonPress) => ( onPress(props.title)} style={{ backgroundColor: backgroundColor || themes[props.theme].backgroundColor }} underlayColor={underlayColor} enabled={!props.disabled} theme={props.theme}> )); interface IListItem extends Omit, Omit { backgroundColor?: string; onPress?: Function; } const ListItem = React.memo(({ ...props }: IListItem) => { const { theme } = useTheme(); if (props.onPress) { const { onPress } = props; return