Spaces:
Running
Running
import {FormattedMessage} from 'react-intl'; | |
import PropTypes from 'prop-types'; | |
import React from 'react'; | |
import keyMirror from 'keymirror'; | |
import classNames from 'classnames'; | |
import Box from '../box/box.jsx'; | |
import Dots from './dots.jsx'; | |
import closeIcon from '../close-button/icon--close.svg'; | |
import radarIcon from './icons/searching.png'; | |
import bluetoothIcon from './icons/bluetooth-white.svg'; | |
import backIcon from './icons/back.svg'; | |
import styles from './connection-modal.css'; | |
const PHASES = keyMirror({ | |
prescan: null, | |
pressbutton: null, | |
notfound: null | |
}); | |
const AutoScanningStep = props => ( | |
<Box className={styles.body}> | |
<Box className={styles.activityArea}> | |
<div className={styles.activityAreaInfo}> | |
<div className={styles.centeredRow}> | |
{props.phase === PHASES.prescan && ( | |
<React.Fragment> | |
<img | |
className={styles.radarBig} | |
src={radarIcon} | |
/> | |
<img | |
className={styles.bluetoothCenteredIcon} | |
src={bluetoothIcon} | |
/> | |
</React.Fragment> | |
)} | |
{props.phase === PHASES.pressbutton && ( | |
<React.Fragment> | |
<img | |
className={classNames(styles.radarBig, styles.radarSpin)} | |
src={radarIcon} | |
/> | |
<img | |
className={styles.connectionTipIcon} | |
src={props.connectionTipIconURL} | |
/> | |
</React.Fragment> | |
)} | |
{props.phase === PHASES.notfound && ( | |
<Box className={styles.instructions}> | |
<FormattedMessage | |
defaultMessage="No devices found" | |
description="Text shown when no devices could be found" | |
id="gui.connection.auto-scanning.noPeripheralsFound" | |
/> | |
</Box> | |
)} | |
</div> | |
</div> | |
</Box> | |
<Box className={styles.bottomArea}> | |
<Box className={classNames(styles.bottomAreaItem, styles.instructions)}> | |
{props.phase === PHASES.prescan && ( | |
<FormattedMessage | |
defaultMessage="Have your device nearby, then begin searching." | |
description="Prompt for beginning the search" | |
id="gui.connection.auto-scanning.prescan" | |
/> | |
)} | |
{props.phase === PHASES.pressbutton && ( | |
<FormattedMessage | |
defaultMessage="Press the button on your device." | |
description="Prompt for pushing the button on the device" | |
id="gui.connection.auto-scanning.pressbutton" | |
/> | |
)} | |
</Box> | |
<Dots | |
className={styles.bottomAreaItem} | |
counter={0} | |
total={3} | |
/> | |
<Box className={classNames(styles.bottomAreaItem, styles.buttonRow)}> | |
{props.phase === PHASES.prescan && ( | |
<button | |
className={styles.connectionButton} | |
onClick={props.onStartScan} | |
> | |
<FormattedMessage | |
defaultMessage="Start Searching" | |
description="Button in prompt for starting a search" | |
id="gui.connection.auto-scanning.start-search" | |
/> | |
</button> | |
)} | |
{props.phase === PHASES.pressbutton && ( | |
<div className={styles.segmentedButton}> | |
<button | |
disabled | |
className={styles.connectionButton} | |
> | |
<FormattedMessage | |
defaultMessage="Searching..." | |
description="Label indicating that search is in progress" | |
id="gui.connection.connecting-searchbutton" | |
/> | |
</button> | |
<button | |
className={styles.connectionButton} | |
onClick={props.onRefresh} | |
> | |
<img | |
className={styles.abortConnectingIcon} | |
src={closeIcon} | |
/> | |
</button> | |
</div> | |
)} | |
{props.phase === PHASES.notfound && ( | |
<button | |
className={styles.connectionButton} | |
onClick={props.onRefresh} | |
> | |
<img | |
className={styles.buttonIconLeft} | |
src={backIcon} | |
/> | |
<FormattedMessage | |
defaultMessage="Try again" | |
description="Button in prompt for trying a device search again" | |
id="gui.connection.auto-scanning.try-again" | |
/> | |
</button> | |
)} | |
</Box> | |
</Box> | |
</Box> | |
); | |
AutoScanningStep.propTypes = { | |
connectionTipIconURL: PropTypes.string, | |
onRefresh: PropTypes.func, | |
onStartScan: PropTypes.func, | |
phase: PropTypes.oneOf(Object.keys(PHASES)) | |
}; | |
AutoScanningStep.defaultProps = { | |
phase: PHASES.prescan | |
}; | |
export { | |
AutoScanningStep as default, | |
PHASES | |
}; | |