@reason-react-native/netinfo
v5.9.1
Published
ReScript bindings for @react-native-community/netinfo.
Downloads
9
Readme
@reason-react-native/netinfo
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.
| 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 betrue
if there is an active connection (but not imply that the internet is necessarily reachable).isInternetReachable
will betrue
if the internet can be reached using the active connectionisWifiEnabled
will betrue
if WiFi is enabled on the device, andfalse
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
andsubnet
will have valueJs.Nullable.undefined
unless_type
iswifi
.cellularGeneration
andcarrier
will have valueJs.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.