Spaces:
Running
Running
File size: 2,788 Bytes
f2bee8a |
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 80 81 82 83 84 85 86 87 88 |
import PropTypes from 'prop-types';
import React from 'react';
import bindAll from 'lodash.bindall';
import ScanningStepComponent, {PHASES} from '../components/connection-modal/auto-scanning-step.jsx';
import VM from 'scratch-vm';
class AutoScanningStep extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'handlePeripheralListUpdate',
'handlePeripheralScanTimeout',
'handleStartScan',
'handleRefresh'
]);
this.state = {
phase: PHASES.prescan
};
}
componentWillUnmount () {
// @todo: stop the peripheral scan here
this.unbindPeripheralUpdates();
}
handlePeripheralScanTimeout () {
this.setState({
phase: PHASES.notfound
});
this.unbindPeripheralUpdates();
}
handlePeripheralListUpdate (newList) {
// TODO: sort peripherals by signal strength? so they don't jump around
const peripheralArray = Object.keys(newList).map(id =>
newList[id]
);
if (peripheralArray.length > 0) {
this.props.onConnecting(peripheralArray[0].peripheralId);
}
}
bindPeripheralUpdates () {
this.props.vm.on(
'PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate);
this.props.vm.on(
'PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout);
}
unbindPeripheralUpdates () {
this.props.vm.removeListener(
'PERIPHERAL_LIST_UPDATE', this.handlePeripheralListUpdate);
this.props.vm.removeListener(
'PERIPHERAL_SCAN_TIMEOUT', this.handlePeripheralScanTimeout);
}
handleRefresh () {
// @todo: stop the peripheral scan here, it is more important for auto scan
// due to timeout and cancellation
this.setState({
phase: PHASES.prescan
});
this.unbindPeripheralUpdates();
}
handleStartScan () {
this.bindPeripheralUpdates();
this.props.vm.scanForPeripheral(this.props.extensionId);
this.setState({
phase: PHASES.pressbutton
});
}
render () {
return (
<ScanningStepComponent
connectionTipIconURL={this.props.connectionTipIconURL}
phase={this.state.phase}
title={this.props.extensionId}
onRefresh={this.handleRefresh}
onStartScan={this.handleStartScan}
/>
);
}
}
AutoScanningStep.propTypes = {
connectionTipIconURL: PropTypes.string,
extensionId: PropTypes.string.isRequired,
onConnecting: PropTypes.func.isRequired,
vm: PropTypes.instanceOf(VM).isRequired
};
export default AutoScanningStep;
|