Spaces:
Running
Running
File size: 2,585 Bytes
6bcb42f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
import PropTypes from 'prop-types';
import React from 'react';
import bindAll from 'lodash.bindall';
import ScanningStepComponent from '../components/connection-modal/scanning-step.jsx';
import VM from 'scratch-vm';
class ScanningStep extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'handlePeripheralListUpdate',
'handlePeripheralScanTimeout',
'handleRefresh'
]);
this.state = {
scanning: true,
peripheralList: []
};
}
componentDidMount () {
this.props.vm.scanForPeripheral(this.props.extensionId);
this.props.vm.on(
'PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate);
this.props.vm.on(
'PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout);
}
componentWillUnmount () {
// @todo: stop the peripheral scan here
this.props.vm.removeListener(
'PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate);
this.props.vm.removeListener(
'PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout);
}
handlePeripheralScanTimeout () {
this.setState({
scanning: false,
peripheralList: []
});
}
handlePeripheralListUpdate (newList) {
// TODO: sort peripherals by signal strength? so they don't jump around
const peripheralArray = Object.keys(newList).map(id =>
newList[id]
);
this.setState({peripheralList: peripheralArray});
}
handleRefresh () {
this.props.vm.scanForPeripheral(this.props.extensionId);
this.setState({
scanning: true,
peripheralList: []
});
}
render () {
return (
<ScanningStepComponent
connectionSmallIconURL={this.props.connectionSmallIconURL}
peripheralList={this.state.peripheralList}
phase={this.state.phase}
scanning={this.state.scanning}
title={this.props.extensionId}
onConnected={this.props.onConnected}
onConnecting={this.props.onConnecting}
onRefresh={this.handleRefresh}
/>
);
}
}
ScanningStep.propTypes = {
connectionSmallIconURL: PropTypes.string,
extensionId: PropTypes.string.isRequired,
onConnected: PropTypes.func.isRequired,
onConnecting: PropTypes.func.isRequired,
vm: PropTypes.instanceOf(VM).isRequired
};
export default ScanningStep;
|