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 ( ); } } 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;