Skip to content

Commit 421d3d5

Browse files
committed
Fix importing blocks with extensions from backpack
1 parent 276e027 commit 421d3d5

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

src/containers/blocks.jsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import {
4242
} from '../reducers/editor-tab';
4343
import AddonHooks from '../addons/hooks.js';
4444
import LoadScratchBlocksHOC from '../lib/tw-load-scratch-blocks-hoc.jsx';
45+
import {findTopBlock} from '../lib/backpack/code-payload.js';
4546

4647
// TW: Strings we add to scratch-blocks are localized here
4748
const messages = defineMessages({
@@ -628,9 +629,9 @@ class Blocks extends React.Component {
628629
handleDrop (dragInfo) {
629630
fetch(dragInfo.payload.bodyUrl)
630631
.then(response => response.json())
631-
.then(blocks => {
632-
// based on https://github.com/ScratchAddons/ScratchAddons/pull/7028/files
633-
const topBlock = blocks.find(block => block.topLevel);
632+
.then(payload => {
633+
// based on https://github.com/ScratchAddons/ScratchAddons/pull/7028
634+
const topBlock = findTopBlock(payload);
634635
if (topBlock) {
635636
const metrics = this.props.workspaceMetrics.targets[this.props.vm.editingTarget.id];
636637
if (metrics) {
@@ -643,7 +644,7 @@ class Blocks extends React.Component {
643644
topBlock.y = (-metrics.scrollY - top + y) / metrics.scale;
644645
}
645646
}
646-
return this.props.vm.shareBlocksToTarget(blocks, this.props.vm.editingTarget.id);
647+
return this.props.vm.shareBlocksToTarget(payload, this.props.vm.editingTarget.id);
647648
})
648649
.then(() => {
649650
this.props.vm.refreshWorkspace();

src/containers/target-pane.jsx

+4-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {fetchSprite, fetchCode} from '../lib/backpack-api';
2424
import randomizeSpritePosition from '../lib/randomize-sprite-position';
2525
import downloadBlob from '../lib/download-blob';
2626
import log from '../lib/log';
27+
import {findTopBlock} from '../lib/backpack/code-payload.js';
2728

2829
class TargetPane extends React.Component {
2930
constructor (props) {
@@ -166,9 +167,9 @@ class TargetPane extends React.Component {
166167
this.props.onReceivedBlocks(true);
167168
}
168169
}
169-
shareBlocks (blocks, targetId, optFromTargetId) {
170+
shareBlocks (payload, targetId, optFromTargetId) {
170171
// Position the top-level block based on the scroll position.
171-
const topBlock = blocks.find(block => block.topLevel);
172+
const topBlock = findTopBlock(payload);
172173
if (topBlock) {
173174
let metrics;
174175
if (this.props.workspaceMetrics.targets[targetId]) {
@@ -196,7 +197,7 @@ class TargetPane extends React.Component {
196197
topBlock.y = posY / scale;
197198
}
198199

199-
return this.props.vm.shareBlocksToTarget(blocks, targetId, optFromTargetId);
200+
return this.props.vm.shareBlocksToTarget(payload, targetId, optFromTargetId);
200201
}
201202
handleDrop (dragInfo) {
202203
const {sprite: targetId} = this.props.hoveredTarget;

src/lib/backpack/code-payload.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,12 @@ const codePayload = ({blockObjects, topBlockId}) => {
2020
});
2121
};
2222

23-
export default codePayload;
23+
const findTopBlock = payload => {
24+
const blocks = payload.extensionURLs ? payload.blocks : payload;
25+
return blocks.find(i => i.topLevel);
26+
};
27+
28+
export {
29+
codePayload as default,
30+
findTopBlock
31+
};

0 commit comments

Comments
 (0)