import React from 'react' import { StyleProp, StyleSheet, Text, View, ViewStyle } from 'react-native' import { ScrollView } from 'react-native-gesture-handler' import Touchable from 'src/components/Touchable' import DownArrowIcon from 'src/icons/DownArrowIcon' import Colors from 'src/styles/colors' import { typeScale } from 'src/styles/fonts' import { Spacing } from 'src/styles/styles' import { NetworkId } from 'src/transactions/types' interface BaseFilterChip { id: string name: string isSelected: boolean } export interface BooleanFilterChip extends BaseFilterChip { filterFn: (t: T) => boolean } export interface NetworkFilterChip extends BaseFilterChip { filterFn: (t: T, n: NetworkId[]) => boolean allNetworkIds: NetworkId[] selectedNetworkIds: NetworkId[] } export function isNetworkChip(chip: FilterChip): chip is NetworkFilterChip { return 'allNetworkIds' in chip } export type FilterChip = BooleanFilterChip | NetworkFilterChip interface Props { chips: FilterChip[] onSelectChip(chip: FilterChip): void style?: StyleProp contentContainerStyle?: StyleProp forwardedRef?: React.RefObject scrollEnabled?: boolean } function FilterChipsCarousel({ chips, onSelectChip, style, contentContainerStyle, forwardedRef, scrollEnabled = true, }: Props) { return ( {chips.map((chip) => { return ( { onSelectChip(chip) }} style={styles.filterChip} > {chip.name} {isNetworkChip(chip) && ( )} ) })} ) } const styles = StyleSheet.create({ container: { marginHorizontal: -Spacing.Thick24, }, contentContainer: { paddingHorizontal: Spacing.Thick24, gap: Spacing.Smallest8, }, filterChipBackground: { overflow: 'hidden', borderRadius: 94, borderWidth: 1, }, filterChip: { minHeight: 32, minWidth: 42, justifyContent: 'center', alignItems: 'center', paddingHorizontal: Spacing.Regular16, }, filterChipText: { ...typeScale.labelXSmall, }, filterChipTextWrapper: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', }, }) export default FilterChipsCarousel