soiz1's picture
Upload 2891 files
6bcb42f verified
import React from 'react';
import classNames from 'classnames';
import Box from '../box/box.jsx';
import Monitor from '../../containers/monitor.jsx';
import PropTypes from 'prop-types';
import {OrderedMap} from 'immutable';
import {stageSizeToTransform} from '../../lib/screen-utils';
import styles from './monitor-list.css';
let different = 0;
const MonitorList = props => (
<Box
// Use static `monitor-overlay` class for bounds of draggables
className={classNames(styles.monitorList, 'monitor-overlay')}
style={{
width: props.stageSize.width,
height: props.stageSize.height
}}
>
<Box
className={styles.monitorListScaler}
style={stageSizeToTransform(props.stageSize)}
>
{(props.monitors.valueSeq().filter(m => m.visible)
.map(monitorData => (
<Monitor
draggable={props.draggable}
height={monitorData.height}
id={monitorData.id}
isDiscrete={monitorData.isDiscrete}
key={monitorData.id}
max={monitorData.sliderMax}
min={monitorData.sliderMin}
mode={monitorData.mode}
opcode={monitorData.opcode}
params={monitorData.params}
spriteName={monitorData.spriteName}
targetId={monitorData.targetId}
value={monitorData.value}
width={monitorData.width}
x={monitorData.x}
y={monitorData.y}
onDragEnd={props.onMonitorChange}
needsUpdate={monitorData.value?._monitorUpToDate ? different : ++different}
/>
)))}
</Box>
</Box>
);
MonitorList.propTypes = {
draggable: PropTypes.bool.isRequired,
monitors: PropTypes.instanceOf(OrderedMap),
onMonitorChange: PropTypes.func.isRequired,
stageSize: PropTypes.shape({
width: PropTypes.number,
height: PropTypes.number,
widthDefault: PropTypes.number,
heightDefault: PropTypes.number
}).isRequired
};
export default MonitorList;