import React from 'react'; import { StyleSheet, Text, FlatList, TouchableOpacity, ColorValue, } from 'react-native'; import DropdownAlert, { DropdownAlertData, DropdownAlertType, DropdownAlertColor, DropdownAlertProps, } from 'react-native-dropdownalert'; import NotificationIOS from './NotificationIOS'; import NotificationAndroid from './NotificationAndroid'; import { SafeAreaView } from 'react-native-safe-area-context'; import { Color } from './Color'; interface ListItem { name: string; alertData?: DropdownAlertData; alertProps?: DropdownAlertProps; color: ColorValue; } export default function App(): React.JSX.Element { const items: ListItem[] = [ { name: 'Warn', alertData: { type: DropdownAlertType.Warn, title: 'Warn', message: 'The device battery is low. It will go into low power mode in 5 minutes.', }, color: DropdownAlertColor.Warn, }, { name: 'Info', alertData: { type: DropdownAlertType.Info, title: 'Info', message: 'The system goes offline from midnight to 3 AM for regular maintenance.', }, color: DropdownAlertColor.Info, }, { name: 'Success', alertData: { type: DropdownAlertType.Success, title: 'Success', message: 'The order is complete and details sent to email.', }, color: DropdownAlertColor.Success, }, { name: 'Error', alertData: { type: DropdownAlertType.Error, title: 'Error', message: 'Something went wrong. Please contact support if error persists.', }, color: DropdownAlertColor.Error, }, { name: 'Custom', alertData: { type: '', title: 'Custom', message: 'This demonstrates the ability to customize image, interval and style.', source: { uri: 'https://reactnative.dev/img/pwa/manifest-icon-512.png', }, interval: 5000, }, alertProps: { alertViewStyle: { padding: 8, backgroundColor: '#6441A4', }, }, color: '#6441A4', }, { name: 'iOS notification', alertProps: { updateStatusBar: false, children: , }, color: 'gray', }, { name: 'Android notification', alertProps: { dismissInterval: 0, updateStatusBar: false, children: , }, color: '#1F89C7', }, { name: 'Cancel', alertData: { type: DropdownAlertType.Info, title: 'Info', message: 'This demonstrates an info alert with a cancel button. Tap cancel button to dismiss.', }, alertProps: { dismissInterval: 0, showCancel: true, onDismissPressDisabled: true, }, color: 'teal', }, { name: 'Bottom', alertData: { type: DropdownAlertType.Info, title: 'Info', message: 'This demonstrates an info alert with bottom alert position.', }, alertProps: { alertPosition: 'bottom', infoColor: 'green', }, color: 'green', }, ]; const [selected, setSelected] = React.useState(); const alert = React.useRef( (data?: DropdownAlertData) => new Promise(res => res(data)), ); const dismiss = React.useRef(() => {}); React.useEffect(() => { if (selected) { if ( selected.alertProps?.alertPosition || selected.alertProps?.children || selected.alertProps?.showCancel ) { dismiss.current(); } alert.current(selected.alertData); } }, [selected]); function _renderItem(item: ListItem): React.JSX.Element { return ( setSelected(item)} > {item.name} ); } function _renderFooter(): React.JSX.Element { return ( {'Dismiss'} ); } return ( `${index}`} data={items} initialNumToRender={items.length} renderItem={({ item }) => _renderItem(item)} ListFooterComponent={_renderFooter} /> {selected && ( (alert.current = func)} dismiss={func => (dismiss.current = func)} {...selected.alertProps} /> )} ); } const styles = StyleSheet.create({ item: { backgroundColor: Color.black, borderRadius: 8, margin: 8, padding: 8, }, name: { color: Color.whiteSmoke, fontSize: 18, fontWeight: 'bold', textAlign: 'center', }, view: { backgroundColor: Color.brightWhite, flex: 1, }, });