5.9.1 • Published 3 years ago

@reason-react-native/netinfo v5.9.1

Weekly downloads
9
License
MIT
Repository
github
Last release
3 years ago

@reason-react-native/netinfo

Build Status Version Chat

ReScript / Reason bindings for @react-native-community/netinfo.

Exposed as ReactNativeNetInfo module.

@reason-react-native/netinfo X.y.* means it's compatible with @react-native-community/netinfo X.y.*

Installation

When @react-native-community/netinfo is properly installed & configured by following their installation instructions, you can install the bindings:

npm install @reason-react-native/netinfo
# or
yarn add @reason-react-native/netinfo

@reason-react-native/netinfo should be added to bs-dependencies in your bsconfig.json:

{
  //...
  "bs-dependencies": [
    "reason-react",
    "reason-react-native",
    // ...
+    "@reason-react-native/netinfo"
  ],
  //...
}

Usage

Types

netInfoConfiguration

To be used only when the platform does not natively supply information on internet reachability.

PropertyTypeDescription
reachabilityUrlstringURL used to test if the internet is reachable.
reachabilityTestresponse => boolA function to handle the response object returned when the reachability URL is called. It should return true if the response indicates that the internet is reachable.
reachabilityShortTimeoutfloatNumber of seconds between internet reachability checks when the internet was not previously detected.
reachabilityLongTimeoutfloatNumber of seconds between internet reachability checks when the internet was previously detected.
reachabilityRequestTimeoutfloatNumber of milliseconds allowed before reachability check fails.

netInfoStateType

Kind of the current network connection. Valid values are:

ValuePlatformsConnection State
noneAndroid, iOS, WindowsNot active
unknownAndroid, iOS, WindowsUndetermined
cellularAndroid, iOS, WindowsActive
wifiAndroid, iOS, WindowsActive
bluetoothAndroidActive
ethernetAndroid, WindowsActive
wimaxAndroidActive
vpnAndroidActive
otherAndroid, iOS, WindowsActive

netInfoCellularGeneration

Cellular generation of the current network connection. Valid values are:

ValueNotes
net2gInlined as "2g". Returned for CDMA, EDGE, GPRS and IDEN connections
net3gInlined as "3g". Returned for EHRPD, EVDO, HSPA, HSUPA, HSDPA and UTMS connections.
net4gInlined as "4g". Returned for HSPAP and LTE connections

netInfoState

type netInfoState = {
  .
  "_type": netInfoStateType,
  "isConnected": bool,
  "isInternetReachable": bool,
  "isWifiEnabled": bool,
  "details": Js.Null.t(details),
};
  • isConnected will be true if there is an active connection (but not imply that the internet is necessarily reachable).
  • isInternetReachable will be true if the internet can be reached using the active connection
  • isWifiEnabled will be true if WiFi is enabled on the device, and false otherwise. Android only.

details key will have value Js.Null.empty (null) when _type is null or unknown.

details

details depends on _type given within netInfoState. If _type is not null or unknown, details is an object as below:

type details = {
  .
  "isConnectionExpensive": bool,
  "ssid": Js.Nullable.t(string),
  "strength": Js.Nullable.t(int),
  "ipAddress": Js.Nullable.t(string),
  "subnet": Js.Nullable.t(string),
  "cellularGeneration": Js.Nullable.t(netInfoCellularGeneration),
  "carrier": Js.Nullable.t(string),
};
PropertyPlatformTypeDescription
isConnectionExpensiveAndroid, iOS, WindowsboolIf network connection is considered expensive in either energy or monetary terms.

Note that some keys may only exist in the JS object when _type is wifi or cellular. Accordingly, in Reason, keys may have values Js.Nullable.undefined.

  • ssid, strength, ipAddress and subnet will have value Js.Nullable.undefined unless _type is wifi.
  • cellularGeneration and carrier will have value Js.Nullable.undefined unless _type is cellular.
_type is wifi
PropertyPlatformTypeDescription
ssidAndroid, iOS (not tvOS)Js.Nullable.t(string)SSID of the network. May have value Js.Nullable.undefined, Js.Nullable.null, or be an empty string if undetermined. On iOS, make sure your app meets at least one of the following requirements. On Android, make sure the ACCESS_FINE_LOCATION permission is listed in AndroidManifest.xml and accepted by the user.
strengthAndroidJs.Nullable.t(string)If signal strength can be determined, will be an integer number from 0 to 5. May have value Js.Nullable.undefined otherwise.
ipAddressAndroid, iOSJs.Nullable.t(string)External IP address. Can be in IPv4 or IPv6 format. May have value Js.Nullable.undefined if undetermined.
subnetAndroid, iOSJs.Nullable.t(string)The subnet mask in IPv4 format. May have value Js.Nullable.undefined if undetermined.
type is cellular
PropertyPlatformTypeDescription
cellularGenerationAndroid, iOS, WindowsNetInfoCellularGenerationGeneration of cell network the user is connected to. This can give an indication of speed, but no guarantees. May have value Js.Nullable.null if generation cannot be determined.
carrierAndroid, iOSstringThe network carrier name. May have value Js.Nullable.undefined or may be empty if undetermined.

Methods

configure

configure: netInfoConfiguration => unit

fetch

To query state of the active connection, returns netInfoState wrapped in a Promise.

fetch: unit => Js.Promise.t(netInfoState)

Below example demonstrates determination of the cellular connection generation, using this method.

React.useEffect0(() => {
  Js.Promise.(
    ReactNativeNetInfo.fetch()
    |> then_(w =>
         {
           switch (w##details->Js.Null.toOption) {
           | None => "Connection type is none or unknown"->Js.Console.warn
           | Some(x) =>
             let y = x##cellularGeneration;
             switch (y->Js.Nullable.toOption) {
             | None =>
               if (y == Js.Nullable.undefined) {
                 "Connection type is wifi, bluetooth, ethernet, wimax, vpn or other"
                 ->Js.Console.warn;
               } else {
                 "Connection generation unknown"->Js.Console.warn;
               }
             | Some(z) =>
               if (z == ReactNativeNetInfo.net2G) {
                 "2G connection"->Js.Console.warn;
               } else if (z == ReactNativeNetInfo.net3G) {
                 "3G connection"->Js.Console.warn;
               } else {
                 "4G connection"->Js.Console.warn;
               }
             };
           };
         }
         ->resolve
       )
    |> catch(err => "error"->Js.Console.warn->resolve)
    |> ignore
  );
  None;
});

fetchInterface

To query the connection state for a particular interface.

fetchInterface: [ | `cellular | `ethernet | `wifi] => Js.Promise.t(netInfoState)

addEventListener

To subscribe to the connection state; accepts a listener of type netInfoState => unit and returns an unsubscribe method of type unit => unit. The listener will be called once following subscription and each time connection state changes.

addEventListener: (netInfoState => unit) => t

where

type t = unit => unit

Below example demonstrates subscribing to changes in connection state:

React.useEffect0(() => {
  let remove =
    ReactNativeNetInfo.addEventListener(w =>
      (
        switch (w##details->Js.Null.toOption) {
        | None => "Connection type is none or unknown"
        | Some(x) =>
          let y = x##cellularGeneration;
          switch (y->Js.Nullable.toOption) {
          | None =>
            if (y == Js.Nullable.undefined) {
              "Connection type is wifi, bluetooth, ethernet, wimax, vpn or other";
            } else {
              "Connection generation unknown";
            }
          | Some(z) =>
            if (z == ReactNativeNetInfo.net2G) {
              "2G connection";
            } else if (z == ReactNativeNetInfo.net3G) {
              "3G connection";
            } else {
              "4G connection";
            }
          };
        }
      )
      ->Js.Console.warn
    );
  Js.Console.warn(remove);
  Some(() => remove());
});

useNetInfo

This method returns a React Hook with type netInfoState

useNetInfo: unit => netInfoState

Below example demonstrates its use within a Text component:

<Text>
  (
    switch (ReactNativeNetInfo.useNetInfo()##details->Js.Null.toOption) {
    | None => "Connection type is none or unknown"
    | Some(x) =>
      let y = x##cellularGeneration;
      switch (y->Js.Nullable.toOption) {
      | None =>
        if (y == Js.Nullable.undefined) {
          "Connection type is wifi, bluetooth, ethernet, wimax, vpn or other";
        } else {
          "Connection generation unknown";
        }
      | Some(z) =>
        if (z == ReactNativeNetInfo.net2G) {
          "2G connection";
        } else if (z == ReactNativeNetInfo.net3G) {
          "3G connection";
        } else {
          "4G connection";
        }
      };
    }
  )
  ->React.string
</Text>

Changelog

Check the changelog for more informations about recent releases.


Contribute

Read the contribution guidelines before contributing.

Code of Conduct

We want this community to be friendly and respectful to each other. Please read our full code of conduct so that you can understand what actions will and will not be tolerated.