From f829d03bf840fa059e00eb92f11e5646c0eaa67b Mon Sep 17 00:00:00 2001
From: Paul Kaplan <pkaplan@media.mit.edu>
Date: Wed, 22 Nov 2017 09:08:29 -0500
Subject: [PATCH] Fix extensions disappearing when switching sprites

---
 src/containers/blocks.jsx | 4 +++-
 test/integration/test.js  | 3 +++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx
index 47d12661c..c1a7a2f60 100644
--- a/src/containers/blocks.jsx
+++ b/src/containers/blocks.jsx
@@ -175,7 +175,9 @@ class Blocks extends React.Component {
         // When we change sprites, update the toolbox to have the new sprite's blocks
         if (this.props.vm.editingTarget) {
             const target = this.props.vm.editingTarget;
-            this.props.updateToolboxState(makeToolboxXML(target.isStage, target.id));
+            const dynamicBlocksXML = this.props.vm.runtime.getBlocksXML();
+            const toolboxXML = makeToolboxXML(target.isStage, target.id, dynamicBlocksXML);
+            this.props.updateToolboxState(toolboxXML);
         }
 
         if (this.props.vm.editingTarget && !this.state.workspaceMetrics[this.props.vm.editingTarget.id]) {
diff --git a/test/integration/test.js b/test/integration/test.js
index 4096c2d90..9624fb8a7 100644
--- a/test/integration/test.js
+++ b/test/integration/test.js
@@ -156,6 +156,9 @@ describe('costumes, sounds and variables', () => {
         await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for scroll animation
         await clickText('stamp', blocksTabScope); // Would fail if didn't scroll back
 
+        // Make sure switching sprites doesn't clear extensions
+        await clickText('Backdrops'); // Switch to the backdrop
+        await findByText('Pen', blocksTabScope); // Pen extension should still be loaded
 
         const logs = await getLogs(errorWhitelist);
         await expect(logs).toEqual([]);
-- 
GitLab