* Remove the hackcheck for upgrades * Rename the PostEmbeds folder to match the codebase style * Updates to latest lex refactor * Update to use new bsky agent * Update to use api package's richtext library * Switch to upsertProfile * Add TextEncoder/TextDecoder polyfill * Add Intl.Segmenter polyfill * Update composer to calculate lengths by grapheme * Fix detox * Fix login in e2e * Create account e2e passing * Implement an e2e mocking framework * Don't use private methods on mobx models as mobx can't track them * Add tooling for e2e-specific builds and add e2e media-picker mock * Add some tests and fix some bugs around profile editing * Add shell tests * Add home screen tests * Add thread screen tests * Add tests for other user profile screens * Add search screen tests * Implement profile imagery change tools and tests * Update to new embed behaviors * Add post tests * Fix to profile-screen test * Fix session resumption * Update web composer to new api * 1.11.0 * Fix pagination cursor parameters * Add quote posts to notifications * Fix embed layouts * Remove youtube inline player and improve tap handling on link cards * Reset minimal shell mode on all screen loads and feed swipes (close #299) * Update podfile.lock * Improve post notfound UI (close #366) * Bump atproto packages
45 lines
1 KiB
TypeScript
45 lines
1 KiB
TypeScript
import React, {useState} from 'react'
|
|
import {View} from 'react-native'
|
|
import {RadioButton} from './RadioButton'
|
|
import {ButtonType} from './Button'
|
|
import {s} from 'lib/styles'
|
|
|
|
export interface RadioGroupItem {
|
|
label: string
|
|
key: string
|
|
}
|
|
|
|
export function RadioGroup({
|
|
testID,
|
|
type,
|
|
items,
|
|
initialSelection = '',
|
|
onSelect,
|
|
}: {
|
|
testID?: string
|
|
type?: ButtonType
|
|
items: RadioGroupItem[]
|
|
initialSelection?: string
|
|
onSelect: (key: string) => void
|
|
}) {
|
|
const [selection, setSelection] = useState<string>(initialSelection)
|
|
const onSelectInner = (key: string) => {
|
|
setSelection(key)
|
|
onSelect(key)
|
|
}
|
|
return (
|
|
<View>
|
|
{items.map((item, i) => (
|
|
<RadioButton
|
|
key={item.key}
|
|
testID={testID ? `${testID}-${item.key}` : undefined}
|
|
style={i !== 0 ? s.mt2 : undefined}
|
|
type={type}
|
|
label={item.label}
|
|
isSelected={item.key === selection}
|
|
onPress={() => onSelectInner(item.key)}
|
|
/>
|
|
))}
|
|
</View>
|
|
)
|
|
}
|