Skip to content

Commit d992e34

Browse files
committed
fix: ensure first tracking events for html and python projects only fire once
1 parent f9a64e5 commit d992e34

2 files changed

Lines changed: 12 additions & 5 deletions

File tree

src/components/WebComponentProject/WebComponentProject.jsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useState } from "react";
1+
import React, { useEffect, useRef, useState } from "react";
22
import { useDispatch, useSelector } from "react-redux";
33
import { useMediaQuery } from "react-responsive";
44
import { marked } from "marked";
@@ -64,6 +64,7 @@ const WebComponentProject = ({
6464
);
6565
const isMobile = useMediaQuery({ query: MOBILE_MEDIA_QUERY });
6666
const [codeHasRun, setCodeHasRun] = useState(codeHasBeenRun);
67+
const prevCodeRunTriggeredRef = useRef(false);
6768
const dispatch = useDispatch();
6869
const renderer = new marked.Renderer();
6970

@@ -120,10 +121,15 @@ const WebComponentProject = ({
120121
}, [dispatch, projectInstructions, permitInstructionsOverride]);
121122

122123
useEffect(() => {
123-
if (codeRunTriggered) {
124+
if (codeRunTriggered && !prevCodeRunTriggeredRef.current) {
124125
document.dispatchEvent(runStartedEvent({ step: currentStepPosition }));
125126
setCodeHasRun(true);
126-
} else if (codeHasRun) {
127+
}
128+
prevCodeRunTriggeredRef.current = codeRunTriggered;
129+
}, [codeRunTriggered, currentStepPosition]);
130+
131+
useEffect(() => {
132+
if (!codeRunTriggered && codeHasRun) {
127133
const mz_criteria = Sk.sense_hat
128134
? Sk.sense_hat.mz_criteria
129135
: { ...defaultMZCriteria };

src/components/WebComponentProject/WebComponentProject.test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const renderWebComponentProject = ({
6565

6666
describe("When state set", () => {
6767
beforeEach(() => {
68+
runStartedHandler.mockClear();
6869
renderWebComponentProject({
6970
instructions: "My amazing instructions",
7071
codeRunTriggered: true,
@@ -83,8 +84,8 @@ describe("When state set", () => {
8384
expect(codeChangedHandler.mock.lastCall[0].detail).toHaveProperty("step");
8485
});
8586

86-
test("Triggers runStarted event", () => {
87-
expect(runStartedHandler).toHaveBeenCalled();
87+
test("Triggers runStarted event once", () => {
88+
expect(runStartedHandler).toHaveBeenCalledTimes(1);
8889
expect(runStartedHandler.mock.lastCall[0].detail).toHaveProperty("step");
8990
});
9091

0 commit comments

Comments
 (0)