import * as React from 'react'
import { StyleSheet, Text, View } from 'react-native'
import ListItem from 'src/components/ListItem'
import Switch from 'src/components/Switch'
import ForwardChevron from 'src/icons/ForwardChevron'
import OpenLinkIcon from 'src/icons/OpenLinkIcon'
import colors from 'src/styles/colors'
import { typeScale } from 'src/styles/fonts'
import { Spacing } from 'src/styles/styles'
interface WrapperProps {
testID?: string
onPress?: () => void
children: React.ReactNode
borderless?: boolean
}
function Wrapper({ testID, onPress, borderless, children }: WrapperProps) {
return (
{children}
)
}
function Title({ value }: { value: string }) {
return {{value}}
}
type BaseProps = {
title: string
icon?: React.ReactNode
} & Omit
type SettingsItemTextValueProps = {
value?: string | null
showChevron?: boolean
isValueActionable?: boolean
isExternalLink?: boolean
} & BaseProps
export function SettingsItemTextValue({
testID,
title,
value,
showChevron,
onPress,
isValueActionable,
icon,
borderless,
isExternalLink,
}: SettingsItemTextValueProps) {
return (
{!!icon && {icon}}
{!!value && (
{value}
)}
{(!!value || showChevron) && (
)}
{isExternalLink && }
)
}
type SettingsItemSwitchProps = {
value: boolean
onValueChange: (value: boolean) => void
details?: string | null
} & Omit
export function SettingsItemSwitch({
testID,
title,
onValueChange,
value,
details,
}: SettingsItemSwitchProps) {
return (
{!!details && (
{details}
)}
)
}
type SettingsExpandedItemProps = {
details?: string | null
} & BaseProps
export function SettingsExpandedItem({
testID,
title,
details,
onPress,
borderless,
icon,
}: SettingsExpandedItemProps) {
return (
{!!icon && {icon}}
{!!details && (
{details}
)}
)
}
type SettingsItemCtaProps = {
cta: JSX.Element
showChevron?: boolean
} & BaseProps
export function SettingsItemCta({
testID,
showChevron,
title,
cta,
onPress,
}: SettingsItemCtaProps) {
return (
{cta}
{showChevron && }
)
}
const styles = StyleSheet.create({
container: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
},
left: {
justifyContent: 'center',
flex: 1,
},
title: {
...typeScale.bodyMedium,
},
value: {
...typeScale.bodyMedium,
color: colors.contentSecondary,
marginRight: 8,
},
valueActionable: {
...typeScale.bodyMedium,
color: colors.accent,
marginRight: 8,
},
details: {
...typeScale.bodySmall,
color: colors.contentSecondary,
paddingTop: 16,
paddingRight: 16,
},
right: {
flexDirection: 'row',
alignItems: 'center',
},
iconContainer: {
paddingRight: Spacing.Smallest8,
},
})