58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
|
import { Toast, useToastController, useToastState } from '@tamagui/toast'
|
||
|
import { Button, H4, XStack, YStack, isWeb } from 'tamagui'
|
||
|
|
||
|
export function CurrentToast() {
|
||
|
const currentToast = useToastState()
|
||
|
|
||
|
if (!currentToast || currentToast.isHandledNatively) return null
|
||
|
|
||
|
return (
|
||
|
<Toast
|
||
|
key={currentToast.id}
|
||
|
duration={currentToast.duration}
|
||
|
viewportName={currentToast.viewportName}
|
||
|
enterStyle={{ opacity: 0, scale: 0.5, y: -25 }}
|
||
|
exitStyle={{ opacity: 0, scale: 1, y: -20 }}
|
||
|
y={isWeb ? '$12' : 0}
|
||
|
theme="purple"
|
||
|
br="$6"
|
||
|
animation="quick"
|
||
|
>
|
||
|
<YStack ai="center" p="$2" gap="$2">
|
||
|
<Toast.Title fow="bold">{currentToast.title}</Toast.Title>
|
||
|
{!!currentToast.message && (
|
||
|
<Toast.Description>{currentToast.message}</Toast.Description>
|
||
|
)}
|
||
|
</YStack>
|
||
|
</Toast>
|
||
|
)
|
||
|
}
|
||
|
|
||
|
export function ToastControl() {
|
||
|
const toast = useToastController()
|
||
|
|
||
|
return (
|
||
|
<YStack gap="$2" ai="center">
|
||
|
<H4>Toast demo</H4>
|
||
|
<XStack gap="$2" jc="center">
|
||
|
<Button
|
||
|
onPress={() => {
|
||
|
toast.show('Successfully saved!', {
|
||
|
message: "Don't worry, we've got your data.",
|
||
|
})
|
||
|
}}
|
||
|
>
|
||
|
Show
|
||
|
</Button>
|
||
|
<Button
|
||
|
onPress={() => {
|
||
|
toast.hide()
|
||
|
}}
|
||
|
>
|
||
|
Hide
|
||
|
</Button>
|
||
|
</XStack>
|
||
|
</YStack>
|
||
|
)
|
||
|
}
|