import PropTypes from 'prop-types'; import React from 'react'; import bindAll from 'lodash.bindall'; import PromptComponent from '../components/prompt/prompt.jsx'; import VM from 'scratch-vm'; import {SCRATCH_MAX_CLOUD_VARIABLES} from '../lib/tw-cloud-limits.js'; class Prompt extends React.Component { constructor (props) { super(props); bindAll(this, [ 'handleOk', 'handleScopeOptionSelection', 'handleCancel', 'handleChange', 'handleKeyPress', 'handleCloudVariableOptionChange' ]); this.state = { isAddingCloudVariableScratchSafe: ( props.vm && props.vm.runtime.getNumberOfCloudVariables() < SCRATCH_MAX_CLOUD_VARIABLES ) || false, inputValue: '', globalSelected: true, cloudSelected: false, canAddCloudVariable: (props.vm && props.vm.runtime.canAddCloudVariable()) || false }; } handleKeyPress (event) { if (event.key === 'Enter') this.handleOk(); } handleFocus (event) { event.target.select(); } handleOk () { this.props.onOk(this.state.inputValue, { scope: this.state.globalSelected ? 'global' : 'local', isCloud: this.state.cloudSelected }); } handleCancel () { this.props.onCancel(); } handleChange (e) { this.setState({inputValue: e.target.value}); } handleScopeOptionSelection (e) { this.setState({globalSelected: (e.target.value === 'global')}); } handleCloudVariableOptionChange (e) { if (!this.props.showCloudOption) return; const checked = e.target.checked; this.setState({cloudSelected: checked}); if (checked) { this.setState({globalSelected: true}); } } render () { return ( ); } } Prompt.propTypes = { defaultValue: PropTypes.string, isStage: PropTypes.bool.isRequired, showListMessage: PropTypes.bool.isRequired, label: PropTypes.string.isRequired, onCancel: PropTypes.func.isRequired, onOk: PropTypes.func.isRequired, showCloudOption: PropTypes.bool.isRequired, showVariableOptions: PropTypes.bool.isRequired, title: PropTypes.string.isRequired, vm: PropTypes.instanceOf(VM) }; export default Prompt;