UNPKG

@applicaster/zapp-react-native-ui-components

Version:

Applicaster Zapp React Native ui components for the Quick Brick App

65 lines (47 loc) 2.04 kB
import * as R from "ramda"; import { NetInfoState } from "@react-native-community/netinfo"; import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils"; import { isOnline as isOnlineUtils } from "@applicaster/quick-brick-core/App/NetworkStatusProvider/utils"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { Platform } from "react-native"; type ConnectionInfo = NetInfoState & { deviceStatus: NetStatus }; type Return = { online: Nullable<boolean>; deviceOnline: Nullable<boolean>; }; const parseConnectionInfoForDefault = ( connectionInfo: ConnectionInfo ): Return => { const deviceOnline = connectionInfo?.deviceStatus?.online; const online = deviceOnline || isOnlineUtils(connectionInfo); return { online, deviceOnline }; }; const isTrue = R.equals(true); const isAllTrue = R.all(isTrue); const parseConnectionInfoForSamsung = ( connectionInfo: ConnectionInfo ): Return => { const { isConnected, isInternetReachable } = connectionInfo; const online = R.pathOr(true, ["deviceStatus", "online"], connectionInfo); const networkStatusProps = [isConnected, online]; const osVersion = Platform.Version as string; const platformOS = Platform.OS as QuickBrickPlatforms; const parsedOsVersion = parseFloat(osVersion); if (!(platformOS === "samsung_tv" && parsedOsVersion <= 5.0)) { networkStatusProps.push(isInternetReachable); } const isOnline = isAllTrue(networkStatusProps); return { online: isOnline, deviceOnline: isOnline }; }; export const parseConnectionInfo: typeof parseConnectionInfoForDefault = platformSelect({ samsung_tv: parseConnectionInfoForSamsung, default: parseConnectionInfoForDefault, }); export const useNotificationHeight = () => { const insets = useSafeAreaInsets(); const navBarHeight = platformSelect({ ios: 44, android: 56 }); const statusHeight = Platform.OS === "android" ? 0 : insets.top; const notificationHeight = statusHeight + navBarHeight; return { statusHeight, notificationHeight }; };