import React from 'react'; import { I18nManager, StyleSheet, Text, View } from 'react-native'; import Touch from '../../utils/touch'; import { themes } from '../../constants/colors'; import sharedStyles from '../../views/Styles'; import { withTheme } from '../../theme'; import I18n from '../../i18n'; import { Icon } from '.'; import { BASE_HEIGHT, ICON_SIZE, PADDING_HORIZONTAL } from './constants'; import { withDimensions } 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; testID?: string; theme?: string; color?: string; translateTitle?: boolean; translateSubtitle?: boolean; showActionIndicator?: boolean; fontScale?: number; alert?: boolean; } const Content = React.memo( ({ title, subtitle, disabled, testID, left, right, color, theme, fontScale, alert, translateTitle = true, translateSubtitle = true, showActionIndicator = false }: IListItemContent) => ( {left ? {left()} : null} {translateTitle ? I18n.t(title) : title} {alert ? ( ) : null} {subtitle ? ( {translateSubtitle ? I18n.t(subtitle) : subtitle} ) : null} {right || showActionIndicator ? ( {right ? right() : null} {showActionIndicator ? : null} ) : null} ) ); interface IListButtonPress { onPress?: Function; } interface IListItemButton extends IListButtonPress { title?: string; disabled?: boolean; theme?: string; backgroundColor?: string; underlayColor?: string; } const Button = React.memo(({ onPress, backgroundColor, underlayColor, ...props }: IListItemButton) => ( onPress!(props.title)} style={{ backgroundColor: backgroundColor || themes[props.theme!].backgroundColor }} underlayColor={underlayColor} enabled={!props.disabled} theme={props.theme!}> )); interface IListItem extends IListItemContent, IListButtonPress { backgroundColor?: string; } const ListItem = React.memo(({ ...props }: IListItem) => { if (props.onPress) { return