From 7f2e977d6854f1473ebbb072085b0132eca216c2 Mon Sep 17 00:00:00 2001 From: Paul Kaplan <pkaplan@media.mit.edu> Date: Thu, 9 Mar 2017 10:21:19 -0500 Subject: [PATCH] Add unstyled delete button for sprites --- .../sprite-selector-item/sprite-selector-item.css | 5 +++++ .../sprite-selector-item/sprite-selector-item.jsx | 7 +++++++ src/components/sprite-selector/sprite-selector.jsx | 3 +++ src/components/target-pane/target-pane.jsx | 3 +++ src/containers/sprite-selector-item.jsx | 12 +++++++++++- src/containers/target-pane.jsx | 5 +++++ 6 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/components/sprite-selector-item/sprite-selector-item.css b/src/components/sprite-selector-item/sprite-selector-item.css index f3a365512..3a8ddba26 100644 --- a/src/components/sprite-selector-item/sprite-selector-item.css +++ b/src/components/sprite-selector-item/sprite-selector-item.css @@ -49,3 +49,8 @@ white-space: nowrap; min-width: 0; } + +.sprite-delete-button { + background: red; + color: white; +} diff --git a/src/components/sprite-selector-item/sprite-selector-item.jsx b/src/components/sprite-selector-item/sprite-selector-item.jsx index 549faedf6..8d2937fb5 100644 --- a/src/components/sprite-selector-item/sprite-selector-item.jsx +++ b/src/components/sprite-selector-item/sprite-selector-item.jsx @@ -25,6 +25,12 @@ const SpriteSelectorItem = props => ( /> ) : null} <div className={styles.spriteName}>{props.name}</div> + <div + className={styles.spriteDeleteButton} + onClick={props.onDeleteButtonClick} + > + 𝘅 + </div> </Box> ); @@ -33,6 +39,7 @@ SpriteSelectorItem.propTypes = { costumeURL: React.PropTypes.string, name: React.PropTypes.string, onClick: React.PropTypes.func, + onDeleteButtonClick: React.PropTypes.func, selected: React.PropTypes.bool }; diff --git a/src/components/sprite-selector/sprite-selector.jsx b/src/components/sprite-selector/sprite-selector.jsx index e33ccaf29..8d8ff9ca3 100644 --- a/src/components/sprite-selector/sprite-selector.jsx +++ b/src/components/sprite-selector/sprite-selector.jsx @@ -13,6 +13,7 @@ const SpriteSelectorComponent = function (props) { onChangeSpriteVisibility, onChangeSpriteX, onChangeSpriteY, + onDeleteSprite, onSelectSprite, selectedId, sprites, @@ -59,6 +60,7 @@ const SpriteSelectorComponent = function (props) { name={sprites[id].name} selected={id === selectedId} onClick={onSelectSprite} + onDeleteButtonClick={onDeleteSprite} /> )) } @@ -75,6 +77,7 @@ SpriteSelectorComponent.propTypes = { onChangeSpriteVisibility: React.PropTypes.func, onChangeSpriteX: React.PropTypes.func, onChangeSpriteY: React.PropTypes.func, + onDeleteSprite: React.PropTypes.func, onSelectSprite: React.PropTypes.func, selectedId: React.PropTypes.string, sprites: React.PropTypes.shape({ diff --git a/src/components/target-pane/target-pane.jsx b/src/components/target-pane/target-pane.jsx index c918b034e..29bb8c7d4 100644 --- a/src/components/target-pane/target-pane.jsx +++ b/src/components/target-pane/target-pane.jsx @@ -43,6 +43,7 @@ class TargetPane extends React.Component { onChangeSpriteVisibility, onChangeSpriteX, onChangeSpriteY, + onDeleteSprite, onNewSpriteClick, onNewBackdropClick, onRequestCloseBackdropLibrary, @@ -69,6 +70,7 @@ class TargetPane extends React.Component { onChangeSpriteVisibility={onChangeSpriteVisibility} onChangeSpriteX={onChangeSpriteX} onChangeSpriteY={onChangeSpriteY} + onDeleteSprite={onDeleteSprite} onSelectSprite={onSelectSprite} /> <Box className={styles.stageSelectorWrapper}> @@ -150,6 +152,7 @@ TargetPane.propTypes = { onChangeSpriteVisibility: React.PropTypes.func, onChangeSpriteX: React.PropTypes.func, onChangeSpriteY: React.PropTypes.func, + onDeleteSprite: React.PropTypes.func, onNewBackdropClick: React.PropTypes.func, onNewSpriteClick: React.PropTypes.func, onRequestCloseBackdropLibrary: React.PropTypes.func, diff --git a/src/containers/sprite-selector-item.jsx b/src/containers/sprite-selector-item.jsx index 9ea66dcf3..a9e538f30 100644 --- a/src/containers/sprite-selector-item.jsx +++ b/src/containers/sprite-selector-item.jsx @@ -7,22 +7,31 @@ class SpriteSelectorItem extends React.Component { constructor (props) { super(props); bindAll(this, [ - 'handleClick' + 'handleClick', + 'handleDelete' ]); } handleClick (e) { e.preventDefault(); this.props.onClick(this.props.id); } + handleDelete () { + // eslint-disable-next-line no-alert + if (window.confirm('Are you sure you want to delete this sprite?')) { + this.props.onDeleteButtonClick(this.props.id); + } + } render () { const { id, // eslint-disable-line no-unused-vars onClick, // eslint-disable-line no-unused-vars + onDeleteButtonClick, // eslint-disable-line no-unused-vars ...props } = this.props; return ( <SpriteSelectorItemComponent onClick={this.handleClick} + onDeleteButtonClick={this.handleDelete} {...props} /> ); @@ -34,6 +43,7 @@ SpriteSelectorItem.propTypes = { id: React.PropTypes.string, name: React.PropTypes.string, onClick: React.PropTypes.func, + onDeleteButtonClick: React.PropTypes.func, selected: React.PropTypes.bool }; diff --git a/src/containers/target-pane.jsx b/src/containers/target-pane.jsx index 45033a72f..4afcfed2c 100644 --- a/src/containers/target-pane.jsx +++ b/src/containers/target-pane.jsx @@ -23,6 +23,7 @@ class TargetPane extends React.Component { 'handleChangeSpriteVisibility', 'handleChangeSpriteX', 'handleChangeSpriteY', + 'handleDeleteSprite', 'handleSelectSprite' ]); } @@ -44,6 +45,9 @@ class TargetPane extends React.Component { handleChangeSpriteY (y) { this.props.vm.postSpriteInfo({y}); } + handleDeleteSprite (id) { + this.props.vm.deleteSprite(id); + } handleSelectSprite (id) { this.props.vm.setEditingTarget(id); } @@ -57,6 +61,7 @@ class TargetPane extends React.Component { onChangeSpriteVisibility={this.handleChangeSpriteVisibility} onChangeSpriteX={this.handleChangeSpriteX} onChangeSpriteY={this.handleChangeSpriteY} + onDeleteSprite={this.handleDeleteSprite} onSelectSprite={this.handleSelectSprite} /> ); -- GitLab