From f7807cca224184478d2b04d0b9b2adc4847f6a18 Mon Sep 17 00:00:00 2001
From: Paul Kaplan <pkaplan@media.mit.edu>
Date: Mon, 9 Jul 2018 13:26:59 -0400
Subject: [PATCH] Use keymirror instead of strings for phase management

---
 .../connection-modal/connection-modal.jsx     | 23 ++++++++++++++-----
 src/containers/connection-modal.jsx           | 12 +++++-----
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/src/components/connection-modal/connection-modal.jsx b/src/components/connection-modal/connection-modal.jsx
index 3f642fdfe..985f13513 100644
--- a/src/components/connection-modal/connection-modal.jsx
+++ b/src/components/connection-modal/connection-modal.jsx
@@ -1,5 +1,6 @@
 import PropTypes from 'prop-types';
 import React from 'react';
+import keyMirror from 'keymirror';
 
 import Box from '../box/box.jsx';
 import Modal from '../modal/modal.jsx';
@@ -11,6 +12,13 @@ import ErrorStep from './error-step.jsx';
 
 import styles from './connection-modal.css';
 
+const PHASES = keyMirror({
+    scanning: null,
+    connecting: null,
+    connected: null,
+    error: null
+});
+
 const ConnectionModalComponent = props => (
     <Modal
         className={styles.modalContent}
@@ -19,18 +27,21 @@ const ConnectionModalComponent = props => (
         onRequestClose={props.onCancel}
     >
         <Box className={styles.body}>
-            {props.phase === 'scanning' && <ScanningStep {...props} />}
-            {props.phase === 'connecting' && <ConnectingStep {...props} />}
-            {props.phase === 'connected' && <ConnectedStep {...props} />}
-            {props.phase === 'error' && <ErrorStep {...props} />}
+            {props.phase === PHASES.scanning && <ScanningStep {...props} />}
+            {props.phase === PHASES.connecting && <ConnectingStep {...props} />}
+            {props.phase === PHASES.connected && <ConnectedStep {...props} />}
+            {props.phase === PHASES.error && <ErrorStep {...props} />}
         </Box>
     </Modal>
 );
 
 ConnectionModalComponent.propTypes = {
     onCancel: PropTypes.func.isRequired,
-    phase: PropTypes.string.isRequired,
+    phase: PropTypes.oneOf(Object.keys(PHASES)).isRequired,
     title: PropTypes.string.isRequired
 };
 
-export default ConnectionModalComponent;
+export {
+    ConnectionModalComponent as default,
+    PHASES
+};
diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx
index 73a353865..5443646e4 100644
--- a/src/containers/connection-modal.jsx
+++ b/src/containers/connection-modal.jsx
@@ -1,7 +1,7 @@
 import PropTypes from 'prop-types';
 import React from 'react';
 import bindAll from 'lodash.bindall';
-import ConnectionModalComponent from '../components/connection-modal/connection-modal.jsx';
+import ConnectionModalComponent, {PHASES} from '../components/connection-modal/connection-modal.jsx';
 import VM from 'scratch-vm';
 
 class ConnectionModal extends React.Component {
@@ -15,7 +15,7 @@ class ConnectionModal extends React.Component {
             'handleError'
         ]);
         this.state = {
-            phase: 'scanning'
+            phase: PHASES.scanning
         };
     }
     componentDidMount () {
@@ -34,13 +34,13 @@ class ConnectionModal extends React.Component {
     }
     handleScanning () {
         this.setState({
-            phase: 'scanning'
+            phase: PHASES.scanning
         });
     }
     handleConnecting (peripheralId) {
         this.props.vm.connectToPeripheral(this.props.extensionId, peripheralId);
         this.setState({
-            phase: 'connecting'
+            phase: PHASES.connecting
         });
     }
     handleDisconnect () {
@@ -58,13 +58,13 @@ class ConnectionModal extends React.Component {
     handleError () {
         this.props.onStatusButtonUpdate(this.props.extensionId, 'not ready');
         this.setState({
-            phase: 'error'
+            phase: PHASES.error
         });
     }
     handleConnected () {
         this.props.onStatusButtonUpdate(this.props.extensionId, 'ready');
         this.setState({
-            phase: 'connected'
+            phase: PHASES.connected
         });
     }
     handleHelp () {
-- 
GitLab