import { noop } from 'lodash'
import React, { memo, useMemo, useState } from 'react'
import { StyleSheet, View } from 'react-native'
import { AlertTypes, hideAlert } from 'src/alert/actions'
import { Alert, ErrorDisplayType } from 'src/alert/reducer'
import { NotificationVariant } from 'src/components/InLineNotification'
import SmartTopAlert from 'src/components/SmartTopAlert'
import Toast from 'src/components/Toast'
import { useDispatch, useSelector } from 'src/redux/hooks'
function AlertBanner() {
const [toastAlert, setToastAlert] = useState<(Alert & { isActive: boolean }) | null>(null)
const alert = useSelector((state) => state.alert)
const dispatch = useDispatch()
const onPressToast = () => {
if (toastAlert?.action) {
dispatch(toastAlert.action ?? hideAlert())
}
}
const displayAlert = useMemo(() => {
setToastAlert((prev) => {
if (alert?.type === AlertTypes.TOAST) {
return { ...alert, isActive: true }
}
return prev === null ? null : { ...prev, isActive: false }
})
if (alert?.displayMethod === ErrorDisplayType.BANNER && (alert.title || alert.message)) {
const onPress = () => {
const action = alert?.action ?? hideAlert()
dispatch(action)
}
const { type, title, message, buttonMessage, dismissAfter } = alert
return {
type,
title,
message,
buttonMessage,
dismissAfter,
onPress,
}
} else {
return null
}
}, [alert])
// avoid conditionally rendering the Toast component to preserve the dismiss animation
return (
<>
{
dispatch(hideAlert())
}}
/>
>
)
}
const styles = StyleSheet.create({
floating: {
position: 'absolute',
top: 0,
left: 0,
right: 0,
},
})
export default memo(AlertBanner)