From 292bf3e54e03ae56f7c75cc2d93351f39a7e59e7 Mon Sep 17 00:00:00 2001 From: DD Liu <liudi@media.mit.edu> Date: Tue, 30 May 2017 12:23:59 -0400 Subject: [PATCH] move the conversion of monitor record to monitor component proptypes to the monitor container --- src/components/monitor-list/monitor-list.jsx | 10 +++++----- src/components/monitor/monitor.jsx | 1 + src/containers/monitor.jsx | 14 ++++++++++++-- src/lib/monitor-adapter.js | 5 ++--- src/lib/monitor-record.js | 12 ------------ src/reducers/monitors.js | 4 +--- 6 files changed, 21 insertions(+), 25 deletions(-) delete mode 100644 src/lib/monitor-record.js diff --git a/src/components/monitor-list/monitor-list.jsx b/src/components/monitor-list/monitor-list.jsx index 78a895d05..fd9631e23 100644 --- a/src/components/monitor-list/monitor-list.jsx +++ b/src/components/monitor-list/monitor-list.jsx @@ -11,14 +11,14 @@ const MonitorList = props => ( <Box className={styles.monitorList} > - {props.monitors.valueSeq().map(monitorData => ( + {props.monitors.valueSeq().map((monitorData, index) => ( <Monitor - category={monitorData.category} + id={monitorData.id} + index={index} key={monitorData.id} - label={monitorData.label} + opcode={monitorData.opcode} + params={monitorData.params} value={monitorData.value} - x={monitorData.x} - y={monitorData.y} onDragEnd={props.onMonitorChange} /> ))} diff --git a/src/components/monitor/monitor.jsx b/src/components/monitor/monitor.jsx index 54b1ebe8a..9973d801e 100644 --- a/src/components/monitor/monitor.jsx +++ b/src/components/monitor/monitor.jsx @@ -40,6 +40,7 @@ MonitorComponent.categories = categories; MonitorComponent.propTypes = { category: PropTypes.oneOf(Object.keys(categories)), + index: PropTypes.number, label: PropTypes.string.isRequired, onDragEnd: PropTypes.func.isRequired, value: PropTypes.string.isRequired, diff --git a/src/containers/monitor.jsx b/src/containers/monitor.jsx index 4ec868157..9bed328d4 100644 --- a/src/containers/monitor.jsx +++ b/src/containers/monitor.jsx @@ -1,6 +1,8 @@ const bindAll = require('lodash.bindall'); const React = require('react'); +const PropTypes = require('prop-types'); +const monitorAdapter = require('../lib/monitor-adapter.js'); const MonitorComponent = require('../components/monitor/monitor.jsx'); class Monitor extends React.Component { @@ -18,15 +20,23 @@ class Monitor extends React.Component { ); } render () { + const monitorProps = monitorAdapter(this.props); return ( <MonitorComponent - {...this.props} + {...monitorProps} onDragEnd={this.handleDragEnd} /> ); } } -Monitor.propTypes = MonitorComponent.propTypes; +Monitor.propTypes = { + id: PropTypes.string.isRequired, + index: PropTypes.number.isRequired, // eslint-disable-line react/no-unused-prop-types + onDragEnd: PropTypes.func.isRequired, + opcode: PropTypes.string.isRequired, // eslint-disable-line react/no-unused-prop-types + params: PropTypes.object, // eslint-disable-line react/no-unused-prop-types, react/forbid-prop-types + value: PropTypes.string.isRequired // eslint-disable-line react/no-unused-prop-types +}; module.exports = Monitor; diff --git a/src/lib/monitor-adapter.js b/src/lib/monitor-adapter.js index 60afdc3e5..dc66fd0b8 100644 --- a/src/lib/monitor-adapter.js +++ b/src/lib/monitor-adapter.js @@ -4,14 +4,13 @@ * - Add missing XY position data if needed */ const OpcodeLabels = require('./opcode-labels.js'); -const MonitorRecord = require('./monitor-record'); const PADDING = 5; const MONITOR_HEIGHT = 23; const isUndefined = a => typeof a === 'undefined'; -module.exports = function ([key, {id, opcode, params, value, x, y}], index) { +module.exports = function ({id, index, opcode, params, value, x, y}) { let {label, category, labelFn} = OpcodeLabels(opcode); // Use labelFn if provided for dynamic labelling (e.g. variables) @@ -23,5 +22,5 @@ module.exports = function ([key, {id, opcode, params, value, x, y}], index) { if (isUndefined(x)) x = PADDING; if (isUndefined(y)) y = PADDING + (index * (PADDING + MONITOR_HEIGHT)); - return [key, MonitorRecord({id, label, category, value, x, y})]; + return {id, label, category, value, x, y}; }; diff --git a/src/lib/monitor-record.js b/src/lib/monitor-record.js deleted file mode 100644 index e468a7ac0..000000000 --- a/src/lib/monitor-record.js +++ /dev/null @@ -1,12 +0,0 @@ -const {Record} = require('immutable'); - -const MonitorRecord = Record({ - id: null, - label: null, - value: null, - category: null, - x: null, - y: null -}); - -module.exports = MonitorRecord; diff --git a/src/reducers/monitors.js b/src/reducers/monitors.js index b2a74ec5e..e21e67a01 100644 --- a/src/reducers/monitors.js +++ b/src/reducers/monitors.js @@ -1,5 +1,3 @@ -const monitorAdapter = require('../lib/monitor-adapter.js'); - const UPDATE_MONITORS = 'scratch-gui/monitors/UPDATE_MONITORS'; const {OrderedMap} = require('immutable'); @@ -9,7 +7,7 @@ const reducer = function (state, action) { if (typeof state === 'undefined') state = initialState; switch (action.type) { case UPDATE_MONITORS: - return action.monitors.mapEntries(monitorAdapter); + return action.monitors; default: return state; } -- GitLab