ConnectionBanner.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import React, { useEffect, useState } from 'react';
  2. import { View, Text } from 'react-native';
  3. import { useConnection } from 'src/contexts/ConnectionContext';
  4. import { styles } from './styles';
  5. const ConnectionBanner = () => {
  6. const netInfo = useConnection();
  7. const [visible, setVisible] = useState(false);
  8. const [bannerMessage, setBannerMessage] = useState('');
  9. const [hadConnection, setHadConnection] = useState(netInfo?.isInternetReachable);
  10. useEffect(() => {
  11. if (netInfo?.isInternetReachable !== null) {
  12. if (hadConnection === false && netInfo?.isInternetReachable) {
  13. setBannerMessage('Internet connection restored!');
  14. showBanner();
  15. } else if (netInfo?.isInternetReachable === false) {
  16. setBannerMessage('No internet connection!');
  17. showBanner();
  18. }
  19. setHadConnection(netInfo?.isInternetReachable);
  20. }
  21. }, [netInfo?.isInternetReachable]);
  22. const showBanner = () => {
  23. setVisible(true);
  24. setTimeout(() => {
  25. setVisible(false);
  26. }, 3000);
  27. };
  28. if (!visible) return null;
  29. return (
  30. <View style={styles.banner}>
  31. <Text style={styles.text}>{bannerMessage}</Text>
  32. </View>
  33. );
  34. };
  35. export default ConnectionBanner;