import { Text, TouchableOpacity, TouchableOpacityProps, View, } from 'react-native'; import { Icon, useTheme, ValueOf } from 'react-native-nucleus-ui'; import React from 'react'; import { getContainerStyle, getIconStyle, getTextStyle } from './chip.style'; import { chipVars } from './chip.vars'; export interface ChipProps extends TouchableOpacityProps { selected?: boolean; children: string; icon?: ValueOf; iconPosition?: ValueOf; } export interface ChipStatics { iconPositions: typeof chipVars.iconPositions; } function ChipComponent(props: ChipProps) { const { selected = false, iconPosition = chipVars.iconPositions.left, icon, children, onPress, ...viewProps } = props; const theme = useTheme(); const containerStyle = getContainerStyle(theme, { isSelected: selected }); const textStyle = getTextStyle(theme, { isSelected: selected }); const iconStyle = getIconStyle(theme, { isSelected: selected, iconPosition }); return ( {icon && iconPosition === chipVars.iconPositions.left ? ( ) : null} {children} {icon && iconPosition === chipVars.iconPositions.right ? ( ) : null} ); } const Chip = React.memo(ChipComponent) as React.MemoExoticComponent< typeof ChipComponent > & ChipStatics; Chip.iconPositions = chipVars.iconPositions; export { Chip };