npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@rescript-react-native/netinfo

v5.9.2

Published

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

Downloads

1,155

Readme

@rescript-react-native/netinfo

Build Status Version ReScript Forum

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

Exposed as ReactNativeNetInfo module.

@rescript-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 @rescript-react-native/netinfo
# or
yarn add @rescript-react-native/netinfo

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

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

Usage

Types

netInfoConfiguration

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

| Property | Type | Description | | ---------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | reachabilityUrl | string | URL used to test if the internet is reachable. | | reachabilityTest | response => bool | A 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. | | reachabilityShortTimeout | float | Number of seconds between internet reachability checks when the internet was not previously detected. | | reachabilityLongTimeout | float | Number of seconds between internet reachability checks when the internet was previously detected. | | reachabilityRequestTimeout | float | Number of milliseconds allowed before reachability check fails. |

netInfoStateType

Kind of the current network connection. Valid values are:

| Value | Platforms | Connection State | | ----------- | --------------------- | ---------------- | | none | Android, iOS, Windows | Not active | | unknown | Android, iOS, Windows | Undetermined | | cellular | Android, iOS, Windows | Active | | wifi | Android, iOS, Windows | Active | | bluetooth | Android | Active | | ethernet | Android, Windows | Active | | wimax | Android | Active | | vpn | Android | Active | | other | Android, iOS, Windows | Active |

netInfoCellularGeneration

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

| Value | Notes | | ------- | ----------------------------------------------------------------------------------- | | net2g | Inlined as "2g". Returned for CDMA, EDGE, GPRS and IDEN connections | | net3g | Inlined as "3g". Returned for EHRPD, EVDO, HSPA, HSUPA, HSDPA and UTMS connections. | | net4g | Inlined 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),
};

| Property | Platform | Type | Description | | ----------------------- | --------------------- | ------ | ----------------------------------------------------------------------------------- | | isConnectionExpensive | Android, iOS, Windows | bool | If 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

| Property | Platform | Type | Description | | ----------- | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | ssid | Android, 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. | | strength | Android | Js.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. | | ipAddress | Android, iOS | Js.Nullable.t(string) | External IP address. Can be in IPv4 or IPv6 format. May have value Js.Nullable.undefined if undetermined. | | subnet | Android, iOS | Js.Nullable.t(string) | The subnet mask in IPv4 format. May have value Js.Nullable.undefined if undetermined. |

type is cellular

| Property | Platform | Type | Description | | -------------------- | --------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | cellularGeneration | Android, iOS, Windows | NetInfoCellularGeneration | Generation 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. | | carrier | Android, iOS | string | The 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.