soiz1's picture
Upload 2891 files
6bcb42f verified
import PropTypes from 'prop-types';
import React from 'react';
import Modal from '../../containers/modal.jsx';
import Box from '../box/box.jsx';
import { defineMessages, injectIntl, intlShape, FormattedMessage } from 'react-intl';
import dropperIcon from './icon--dropper.svg';
import booleanInputIcon from './icon--boolean-input.svg';
import textInputIcon from './icon--text-input.svg';
import labelIcon from './icon--label.svg';
import stackBlockIcon from './icon--stack-block.svg';
import terminalBlockIcon from './icon--terminal-block.svg';
import reporterBlockIcon from './icon--reporter-block.svg';
import booleanBlockIcon from './icon--boolean-block.svg';
import styles from './custom-procedures.css';
const messages = defineMessages({
myblockModalTitle: {
defaultMessage: 'Make a Block',
description: 'Title for the modal where you create a custom block.',
id: 'gui.customProcedures.myblockModalTitle'
}
});
const BlockColorSection = props => (
<div className={styles.colorPickerArea}>
<div>
<button
className={styles.presetColor}
style={{ background: "#4C97FF" }}
onClick={() => props.setHexBlockColor("#4C97FF")}
/>
<button
className={styles.presetColor}
style={{ background: "#9966FF" }}
onClick={() => props.setHexBlockColor("#9966FF")}
/>
<button
className={styles.presetColor}
style={{ background: "#CF63CF" }}
onClick={() => props.setHexBlockColor("#CF63CF")}
/>
<button
className={styles.presetColor}
style={{ background: "#FFBF00" }}
onClick={() => props.setHexBlockColor("#FFBF00")}
/>
<button
className={styles.presetColor}
style={{ background: "#FFAB19" }}
onClick={() => props.setHexBlockColor("#FFAB19")}
/>
<button
className={styles.presetColor}
style={{ background: "#5CB1D6" }}
onClick={() => props.setHexBlockColor("#5CB1D6")}
/>
<button
className={styles.presetColor}
style={{ background: "#59C059" }}
onClick={() => props.setHexBlockColor("#59C059")}
/>
<button
className={styles.presetColor}
style={{ background: "#FF8C1A" }}
onClick={() => props.setHexBlockColor("#FF8C1A")}
/>
<button
className={styles.presetColor}
style={{ background: "#FF661A" }}
onClick={() => props.setHexBlockColor("#FF661A")}
/>
<button
className={styles.presetColor}
style={{ background: "#FF6680" }}
onClick={() => props.setHexBlockColor("#FF6680")}
/>
<button
className={styles.presetColor}
style={{ background: "#0FBD8C" }}
onClick={() => props.setHexBlockColor("#0FBD8C")}
/>
<button
className={styles.presetColor}
style={{ background: "#FF4C4C" }}
onClick={() => props.setHexBlockColor("#FF4C4C")}
/>
</div>
<div>
<button
className={styles.presetColor}
style={{ background: "#FF8080" }}
onClick={() => props.setHexBlockColor("#FF8080")}
/>
<button
className={styles.presetColor}
style={{ background: "#FFB980" }}
onClick={() => props.setHexBlockColor("#FFB980")}
/>
<button
className={styles.presetColor}
style={{ background: "#FFF480" }}
onClick={() => props.setHexBlockColor("#FFF480")}
/>
<button
className={styles.presetColor}
style={{ background: "#8EFF80" }}
onClick={() => props.setHexBlockColor("#8EFF80")}
/>
<button
className={styles.presetColor}
style={{ background: "#80FFBD" }}
onClick={() => props.setHexBlockColor("#80FFBD")}
/>
<button
className={styles.presetColor}
style={{ background: "#80EAFF" }}
onClick={() => props.setHexBlockColor("#80EAFF")}
/>
<button
className={styles.presetColor}
style={{ background: "#80C1FF" }}
onClick={() => props.setHexBlockColor("#80C1FF")}
/>
<button
className={styles.presetColor}
style={{ background: "#8084FF" }}
onClick={() => props.setHexBlockColor("#8084FF")}
/>
<button
className={styles.presetColor}
style={{ background: "#D375FF" }}
onClick={() => props.setHexBlockColor("#D375FF")}
/>
<button
className={styles.presetColor}
style={{ background: "#FF8AFF" }}
onClick={() => props.setHexBlockColor("#FF8AFF")}
/>
<button
className={styles.presetColor}
style={{ background: "#BBBBBB" }}
onClick={() => props.setHexBlockColor("#BBBBBB")}
/>
<div className={styles.parentCustom}>
<input
type="color"
value={props.blockColor}
className={styles.presetColor}
onChange={props.onBlockColorChange}
/>
<img
src={dropperIcon}
className={styles.customPlus}
/>
</div>
</div>
</div>
)
const CustomProcedures = props => (
<Modal
scrollable={true}
className={styles.modalContent}
contentLabel={props.intl.formatMessage(messages.myblockModalTitle)}
onRequestClose={props.onCancel}
>
<Box
className={styles.workspace}
componentRef={props.componentRef}
/>
<Box className={styles.body}>
<div className={styles.optionsRow}>
<div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={props.onAddTextNumber}
>
<img
className={styles.optionIcon}
src={textInputIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Add an input"
description="Label for button to add a number/text input"
id="gui.customProcedures.addAnInputNumberText"
/>
</div>
<div className={styles.optionDescription}>
<FormattedMessage
defaultMessage="number or text"
description="Description of the number/text input type"
id="gui.customProcedures.numberTextType"
/>
</div>
</div>
<div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={props.onAddBoolean}
>
<img
className={styles.optionIcon}
src={booleanInputIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Add an input"
description="Label for button to add a boolean input"
id="gui.customProcedures.addAnInputBoolean"
/>
</div>
<div className={styles.optionDescription}>
<FormattedMessage
defaultMessage="boolean"
description="Description of the boolean input type"
id="gui.customProcedures.booleanType"
/>
</div>
</div>
<div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={props.onAddCommand}
style={{display: "none"}} //shhh
>
<img
className={styles.optionIcon}
src={stackBlockIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Add an input"
description="Label for button to add a command input"
id="gui.customProcedures.addAnInputCommand"
/>
</div>
<div className={styles.optionDescription}>
<FormattedMessage
defaultMessage="command"
description="Description of the command input type"
id="gui.customProcedures.commandType"
/>
</div>
</div>
<div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={props.onAddLabel}
>
<img
className={styles.optionIcon}
src={labelIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Add a label"
description="Label for button to add a label"
id="gui.customProcedures.addALabel"
/>
</div>
</div>
</div>
{!props.editing && <div className={styles.optionsRow} style={{ marginTop: '1em' }}>
{props.returns ? <>
<div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={() => props.onOutputTypeChanged('string')}
>
<img
className={styles.optionIcon}
src={reporterBlockIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Return Text"
description="Label for block to return text"
id="gui.customProcedures.returnText"
/>
</div>
</div>
<div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={() => props.onOutputTypeChanged('number')}
>
<img
className={styles.optionIcon}
src={reporterBlockIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Return a Number"
description="Label for block to return a number"
id="gui.customProcedures.returnANumber"
/>
</div>
</div>
</>
: <>
<div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={() => props.onOutputTypeChanged('statement')}
>
<img
className={styles.optionIcon}
src={stackBlockIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Normal block"
description="Label for block to be a normal stack block"
id="gui.customProcedures.normalBlock"
/>
</div>
</div>
<div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={() => props.onOutputTypeChanged('end')}
>
<img
className={styles.optionIcon}
src={terminalBlockIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Ending block"
description="Label for block to be an ending block for a stack"
id="gui.customProcedures.endingBlock"
/>
</div>
</div>
</>}
{props.returns && <div
className={styles.optionCard}
role="button"
tabIndex="0"
onClick={() => props.onOutputTypeChanged('boolean')}
>
<img
className={styles.optionIcon}
src={booleanBlockIcon}
/>
<div className={styles.optionTitle}>
<FormattedMessage
defaultMessage="Return a Boolean"
description="Label for block to return a boolean"
id="gui.customProcedures.returnABoolean"
/>
</div>
</div>}
</div>}
<BlockColorSection {...props} />
<div className={styles.checkboxRow}>
<label>
<input
checked={props.warp}
type="checkbox"
onChange={props.onToggleWarp}
/>
<FormattedMessage
defaultMessage="Run without screen refresh"
description="Label for checkbox to run without screen refresh"
id="gui.customProcedures.runWithoutScreenRefresh"
/>
</label>
<br />
{!props.editing ? (<div>
<label>
<input
checked={props.returns}
type="checkbox"
onChange={props.onToggleReturns}
/>
Returns a value
</label>
</div>) : null}
</div>
<Box className={styles.buttonRow}>
<button
className={styles.cancelButton}
onClick={props.onCancel}
>
<FormattedMessage
defaultMessage="Cancel"
description="Label for button to cancel custom procedure edits"
id="gui.customProcedures.cancel"
/>
</button>
<button
className={styles.okButton}
onClick={props.onOk}
>
<FormattedMessage
defaultMessage="OK"
description="Label for button to save new custom procedure"
id="gui.customProcedures.ok"
/>
</button>
</Box>
</Box>
</Modal>
);
CustomProcedures.propTypes = {
componentRef: PropTypes.func.isRequired,
intl: intlShape,
onAddBoolean: PropTypes.func.isRequired,
onAddCommand: PropTypes.func.isRequired,
onAddLabel: PropTypes.func.isRequired,
onAddTextNumber: PropTypes.func.isRequired,
onCancel: PropTypes.func.isRequired,
onOk: PropTypes.func.isRequired,
onToggleWarp: PropTypes.func.isRequired,
onToggleReturns: PropTypes.func.isRequired,
warp: PropTypes.bool.isRequired,
returns: PropTypes.bool.isRequired,
editing: PropTypes.bool.isRequired,
selectedType: PropTypes.string.isRequired,
onOutputTypeChanged: PropTypes.func.isRequired
};
export default injectIntl(CustomProcedures);