@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
text/typescript
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 };
};