Skip to content

Commit 62e36fd

Browse files
towerofnixbenjiwheeler
authored andcommitted
Separate workspaceMetrics into a reducer
1 parent 5ea74c6 commit 62e36fd

File tree

3 files changed

+56
-16
lines changed

3 files changed

+56
-16
lines changed

src/containers/blocks.jsx

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {activateColorPicker} from '../reducers/color-picker';
2525
import {closeExtensionLibrary, openSoundRecorder, openConnectionModal} from '../reducers/modals';
2626
import {activateCustomProcedures, deactivateCustomProcedures} from '../reducers/custom-procedures';
2727
import {setConnectionModalExtensionId} from '../reducers/connection-modal';
28+
import {updateMetrics} from '../reducers/workspace-metrics';
2829

2930
import {
3031
activateTab,
@@ -79,7 +80,6 @@ class Blocks extends React.Component {
7980
this.ScratchBlocks.recordSoundCallback = this.handleOpenSoundRecorder;
8081

8182
this.state = {
82-
workspaceMetrics: {},
8383
prompt: null
8484
};
8585
this.onTargetsUpdate = debounce(this.onTargetsUpdate, 100);
@@ -301,14 +301,12 @@ class Blocks extends React.Component {
301301
onWorkspaceMetricsChange () {
302302
const target = this.props.vm.editingTarget;
303303
if (target && target.id) {
304-
const workspaceMetrics = Object.assign({}, this.state.workspaceMetrics, {
305-
[target.id]: {
306-
scrollX: this.workspace.scrollX,
307-
scrollY: this.workspace.scrollY,
308-
scale: this.workspace.scale
309-
}
304+
this.props.updateMetrics({
305+
targetID: target.id,
306+
scrollX: this.workspace.scrollX,
307+
scrollY: this.workspace.scrollY,
308+
scale: this.workspace.scale
310309
});
311-
this.setState({workspaceMetrics});
312310
}
313311
}
314312
onScriptGlowOn (data) {
@@ -355,7 +353,7 @@ class Blocks extends React.Component {
355353
this.props.updateToolboxState(toolboxXML);
356354
}
357355

358-
if (this.props.vm.editingTarget && !this.state.workspaceMetrics[this.props.vm.editingTarget.id]) {
356+
if (this.props.vm.editingTarget && !this.props.workspaceMetrics[this.props.vm.editingTarget.id]) {
359357
this.onWorkspaceMetricsChange();
360358
}
361359

@@ -381,8 +379,8 @@ class Blocks extends React.Component {
381379
}
382380
this.workspace.addChangeListener(this.props.vm.blockListener);
383381

384-
if (this.props.vm.editingTarget && this.state.workspaceMetrics[this.props.vm.editingTarget.id]) {
385-
const {scrollX, scrollY, scale} = this.state.workspaceMetrics[this.props.vm.editingTarget.id];
382+
if (this.props.vm.editingTarget && this.props.workspaceMetrics[this.props.vm.editingTarget.id]) {
383+
const {scrollX, scrollY, scale} = this.props.workspaceMetrics[this.props.vm.editingTarget.id];
386384
this.workspace.scrollX = scrollX;
387385
this.workspace.scrollY = scrollY;
388386
this.workspace.scale = scale;
@@ -506,7 +504,7 @@ class Blocks extends React.Component {
506504
});
507505
}
508506
render () {
509-
/* eslint-disable no-unused-vars */
507+
/* eslint-disable no-unused-vars, no-shadow */
510508
const {
511509
anyModalVisible,
512510
canUseCloud,
@@ -525,9 +523,11 @@ class Blocks extends React.Component {
525523
onRequestCloseExtensionLibrary,
526524
onRequestCloseCustomProcedures,
527525
toolboxXML,
526+
workspaceMetrics,
527+
updateMetrics,
528528
...props
529529
} = this.props;
530-
/* eslint-enable no-unused-vars */
530+
/* eslint-enable no-unused-vars, no-shadow */
531531
return (
532532
<React.Fragment>
533533
<DroppableBlocks
@@ -654,7 +654,8 @@ const mapStateToProps = state => ({
654654
locale: state.locales.locale,
655655
messages: state.locales.messages,
656656
toolboxXML: state.scratchGui.toolbox.toolboxXML,
657-
customProceduresVisible: state.scratchGui.customProcedures.active
657+
customProceduresVisible: state.scratchGui.customProcedures.active,
658+
workspaceMetrics: state.scratchGui.workspaceMetrics
658659
});
659660

660661
const mapDispatchToProps = dispatch => ({
@@ -676,6 +677,9 @@ const mapDispatchToProps = dispatch => ({
676677
},
677678
updateToolboxState: toolboxXML => {
678679
dispatch(updateToolbox(toolboxXML));
680+
},
681+
updateMetrics: metrics => {
682+
dispatch(updateMetrics(metrics));
679683
}
680684
});
681685

src/reducers/gui.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import timeoutReducer, {timeoutInitialState} from './timeout';
2525
import toolboxReducer, {toolboxInitialState} from './toolbox';
2626
import vmReducer, {vmInitialState} from './vm';
2727
import vmStatusReducer, {vmStatusInitialState} from './vm-status';
28+
import workspaceMetricsReducer, {workspaceMetricsInitialState} from './workspace-metrics';
2829
import throttle from 'redux-throttle';
2930

3031
import decks from '../lib/libraries/decks/index.jsx';
@@ -57,7 +58,8 @@ const guiInitialState = {
5758
timeout: timeoutInitialState,
5859
toolbox: toolboxInitialState,
5960
vm: vmInitialState,
60-
vmStatus: vmStatusInitialState
61+
vmStatus: vmStatusInitialState,
62+
workspaceMetrics: workspaceMetricsInitialState
6163
};
6264

6365
const initPlayer = function (currentState) {
@@ -155,7 +157,8 @@ const guiReducer = combineReducers({
155157
timeout: timeoutReducer,
156158
toolbox: toolboxReducer,
157159
vm: vmReducer,
158-
vmStatus: vmStatusReducer
160+
vmStatus: vmStatusReducer,
161+
workspaceMetrics: workspaceMetricsReducer
159162
});
160163

161164
export {

src/reducers/workspace-metrics.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const UPDATE_METRICS = 'scratch-gui/workspace-metrics/UPDATE_METRICS';
2+
3+
const initialState = {};
4+
5+
const reducer = function (state, action) {
6+
if (typeof state === 'undefined') state = initialState;
7+
8+
switch (action.type) {
9+
case UPDATE_METRICS:
10+
return Object.assign({}, state, {
11+
[action.targetID]: {
12+
scrollX: action.scrollX,
13+
scrollY: action.scrollY,
14+
scale: action.scale
15+
}
16+
});
17+
default:
18+
return state;
19+
}
20+
};
21+
22+
const updateMetrics = function (metrics) {
23+
return {
24+
type: UPDATE_METRICS,
25+
...metrics
26+
};
27+
};
28+
29+
export {
30+
reducer as default,
31+
initialState as workspaceMetricsInitialState,
32+
updateMetrics
33+
};

0 commit comments

Comments
 (0)