diff --git a/src/components/backpack/backpack.jsx b/src/components/backpack/backpack.jsx index 9e9a4f75c..f5f450039 100644 --- a/src/components/backpack/backpack.jsx +++ b/src/components/backpack/backpack.jsx @@ -17,7 +17,19 @@ const dragTypeMap = { // Keys correspond with the backpack-server item types sprite: DragConstants.BACKPACK_SPRITE }; -const Backpack = ({containerRef, contents, dragOver, error, expanded, loading, onToggle, onDelete}) => ( +const Backpack = ({ + blockDragOver, + containerRef, + contents, + dragOver, + error, + expanded, + loading, + onToggle, + onDelete, + onMouseEnter, + onMouseLeave +}) => (
{expanded ? (
{error ? (
@@ -66,11 +82,7 @@ const Backpack = ({containerRef, contents, dragOver, error, expanded, loading, o
) : ( contents.length > 0 ? ( -
+
{contents.map(item => ( { + // Emit resize on window to get blocks to resize + window.dispatchEvent(new Event('resize')); + }); if (newState) { this.refreshContents(); } @@ -72,6 +92,9 @@ class Backpack extends React.Component { case DragConstants.SPRITE: payloader = spritePayload; break; + case DragConstants.CODE: + payloader = codePayload; + break; } if (!payloader) return; @@ -110,15 +133,47 @@ class Backpack extends React.Component { }); } } + handleBlockDragUpdate (isOutsideWorkspace) { + this.setState({ + blockDragOutsideWorkspace: isOutsideWorkspace + }); + } + handleMouseEnter () { + if (this.state.blockDragOutsideWorkspace) { + this.setState({ + blockDragOverBackpack: true + }); + } + } + handleMouseLeave () { + this.setState({ + blockDragOverBackpack: false + }); + } + handleBlockDragEnd (blocks) { + if (this.state.blockDragOverBackpack) { + this.handleDrop({ + dragType: DragConstants.CODE, + payload: blocks + }); + } + this.setState({ + blockDragOverBackpack: false, + blockDragOutsideWorkspace: false + }); + } render () { return ( ); @@ -152,9 +207,17 @@ const getTokenAndUsername = state => { const mapStateToProps = state => Object.assign( { - vm: state.scratchGui.vm + dragInfo: state.scratchGui.assetDrag, + vm: state.scratchGui.vm, + blockDrag: state.scratchGui.blockDrag }, getTokenAndUsername(state) ); -export default connect(mapStateToProps)(Backpack); +const mapDispatchToProps = dispatch => ({ + dispatchSetHoveredSprite: spriteId => { + dispatch(setHoveredSprite(spriteId)); + } +}); + +export default connect(mapStateToProps, mapDispatchToProps)(Backpack);