packages/@fbcmobile-ui/Components/Views/WiFiScanResults.js (57 lines of code) (raw):
/**
* Copyright (c) Facebook, Inc. and its affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
*/
'use strict';
import * as React from 'react';
import Text from '@fbcmobile/ui/Components/Core/Text';
import WifiSignalIcon from '@fbcmobile/ui/Components/WifiSignalIcon';
import {Colors} from '@fbcmobile/ui/Theme';
import {Icon} from 'react-native-material-ui';
import {StyleSheet, View} from 'react-native';
export const WIFI_SECURITY_CAPABILITIES = ['WEP', 'WPA', 'WPA2', 'WPA_EAP'];
export type WiFiScanData = {|
timestamp: number,
frequency: number,
channel: number,
bssid: string,
strength: number,
ssid?: ?string,
band?: ?string,
channelWidth?: ?number,
capabilities?: ?string,
latitude?: ?number,
longitude?: ?number,
altitude?: ?number,
heading?: ?number,
rssi?: ?number,
|};
type Props = {|
+scanResults: Array<WiFiScanData>,
|};
const WiFiScanResults = ({scanResults}: Props) => {
return (
<View style={styles.root}>
{scanResults.map(wifi => {
if (wifi != null) {
const ssidText =
wifi.ssid === '' || wifi.ssid == null ? '' : `${wifi.ssid}, `;
return (
<View style={styles.entry} key={wifi.bssid}>
<Text color="gray" style={styles.ssidName}>
{`${ssidText}${wifi.channel}-${wifi.band ?? ''}`}
</Text>
{wifi.capabilities != null &&
WIFI_SECURITY_CAPABILITIES.some(s =>
wifi.capabilities?.includes(s),
) ? (
<Icon
style={styles.lockIcon}
name="lock"
iconSet="MaterialCommunityIcons"
color={Colors.Gray80}
size={16}
/>
) : null}
<WifiSignalIcon signalStrength={wifi.strength} />
</View>
);
}
})}
</View>
);
};
const styles = StyleSheet.create({
root: {
flex: 1,
},
entry: {
display: 'flex',
flexDirection: 'row',
justifyContent: 'flex-start',
alignItems: 'center',
paddingVertical: 12,
},
ssidName: {
flexGrow: 1,
},
lockIcon: {
marginRight: 4,
},
});
export default WiFiScanResults;