From 5864fa54545407e0dc955afa23595eabd55f6277 Mon Sep 17 00:00:00 2001
From: DD <liudi08@gmail.com>
Date: Fri, 23 Feb 2018 11:25:28 -0500
Subject: [PATCH] Add hovered sprite reducer. Rename block drag reducer to fix
 capitalization.

---
 src/containers/target-pane.jsx               | 11 +++++---
 src/lib/vm-listener-hoc.jsx                  |  2 +-
 src/reducers/{blockdrag.js => block-drag.js} |  2 +-
 src/reducers/gui.js                          |  6 +++--
 src/reducers/hovered-target-sprite.js        | 28 ++++++++++++++++++++
 5 files changed, 42 insertions(+), 7 deletions(-)
 rename src/reducers/{blockdrag.js => block-drag.js} (88%)
 create mode 100644 src/reducers/hovered-target-sprite.js

diff --git a/src/containers/target-pane.jsx b/src/containers/target-pane.jsx
index 53c0973a9..5cc156a87 100644
--- a/src/containers/target-pane.jsx
+++ b/src/containers/target-pane.jsx
@@ -9,6 +9,8 @@ import {
     closeSpriteLibrary
 } from '../reducers/modals';
 
+import {setHoveredSprite} from '../reducers/hovered-target-sprite';
+
 import TargetPaneComponent from '../components/target-pane/target-pane.jsx';
 
 class TargetPane extends React.Component {
@@ -53,10 +55,10 @@ class TargetPane extends React.Component {
         this.props.vm.duplicateSprite(id);
     }
     handleMouseOutSprite () {
-        this.props.vm.setHoveredSprite(null);
+        this.props.setHoveredSprite(null);
     }
     handleMouseOverSprite (id) {
-        this.props.vm.setHoveredSprite(id);
+        this.props.setHoveredSprite(id);
     }
     handleSelectSprite (id) {
         this.props.vm.setEditingTarget(id);
@@ -102,7 +104,7 @@ const mapStateToProps = state => ({
         return sprites;
     }, {}),
     stage: state.targets.stage,
-    raiseSprites: state.blockdrag,
+    raiseSprites: state.blockDrag,
     spriteLibraryVisible: state.modals.spriteLibrary,
     backdropLibraryVisible: state.modals.backdropLibrary
 });
@@ -116,6 +118,9 @@ const mapDispatchToProps = dispatch => ({
     },
     onRequestCloseBackdropLibrary: () => {
         dispatch(closeBackdropLibrary());
+    },
+    setHoveredSprite: spriteId => {
+        dispatch(setHoveredSprite(spriteId));
     }
 });
 
diff --git a/src/lib/vm-listener-hoc.jsx b/src/lib/vm-listener-hoc.jsx
index 707a631b6..5583fad2f 100644
--- a/src/lib/vm-listener-hoc.jsx
+++ b/src/lib/vm-listener-hoc.jsx
@@ -6,7 +6,7 @@ import VM from 'scratch-vm';
 import {connect} from 'react-redux';
 
 import {updateEditingTarget, updateTargets} from '../reducers/targets';
-import {updateBlockDrag} from '../reducers/blockdrag';
+import {updateBlockDrag} from '../reducers/block-drag';
 import {updateMonitors} from '../reducers/monitors';
 
 /*
diff --git a/src/reducers/blockdrag.js b/src/reducers/block-drag.js
similarity index 88%
rename from src/reducers/blockdrag.js
rename to src/reducers/block-drag.js
index cd424ea57..5a261ceaa 100644
--- a/src/reducers/blockdrag.js
+++ b/src/reducers/block-drag.js
@@ -1,4 +1,4 @@
-const BLOCK_DRAG_UPDATE = 'scratch-gui/blockdrag/BLOCK_DRAG_UPDATE';
+const BLOCK_DRAG_UPDATE = 'scratch-gui/block-drag/BLOCK_DRAG_UPDATE';
 
 const initialState = false;
 
diff --git a/src/reducers/gui.js b/src/reducers/gui.js
index 92cdab550..61ffa5501 100644
--- a/src/reducers/gui.js
+++ b/src/reducers/gui.js
@@ -1,7 +1,8 @@
 import {combineReducers} from 'redux';
 import colorPickerReducer from './color-picker';
 import customProceduresReducer from './custom-procedures';
-import blockDragReducer from './blockdrag';
+import blockDragReducer from './block-drag';
+import hoveredTargetSpriteReducer from './hovered-target-sprite';
 import intlReducer from './intl';
 import modalReducer from './modals';
 import monitorReducer from './monitors';
@@ -13,9 +14,10 @@ import stageSizeReducer from './stage-size';
 import {ScratchPaintReducer} from 'scratch-paint';
 
 export default combineReducers({
-    blockdrag: blockDragReducer,
+    blockDrag: blockDragReducer,
     colorPicker: colorPickerReducer,
     customProcedures: customProceduresReducer,
+    hoveredTargetSprite: hoveredTargetSpriteReducer,
     intl: intlReducer,
     stageSize: stageSizeReducer,
     modals: modalReducer,
diff --git a/src/reducers/hovered-target-sprite.js b/src/reducers/hovered-target-sprite.js
new file mode 100644
index 000000000..38da69ca1
--- /dev/null
+++ b/src/reducers/hovered-target-sprite.js
@@ -0,0 +1,28 @@
+const SET_HOVERED_SPRITE = 'scratch-gui/hovered-target-sprite/SET_HOVERED_SPRITE';
+
+const initialState = null;
+
+const reducer = function (state, action) {
+    if (typeof state === 'undefined') state = initialState;
+    switch (action.type) {
+    case SET_HOVERED_SPRITE:
+        return action.spriteId;
+    default:
+        return state;
+    }
+};
+
+const setHoveredSprite = function (spriteId) {
+    return {
+        type: SET_HOVERED_SPRITE,
+        spriteId: spriteId,
+        meta: {
+            throttle: 30
+        }
+    };
+};
+
+export {
+    reducer as default,
+    setHoveredSprite
+};
-- 
GitLab