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);