|
1 | | -import React, { useEffect, useState } from "react"; |
| 1 | +import React, { useEffect, useRef, useState } from "react"; |
2 | 2 | import { useDispatch, useSelector } from "react-redux"; |
3 | 3 | import { useMediaQuery } from "react-responsive"; |
4 | 4 | import { marked } from "marked"; |
@@ -64,6 +64,7 @@ const WebComponentProject = ({ |
64 | 64 | ); |
65 | 65 | const isMobile = useMediaQuery({ query: MOBILE_MEDIA_QUERY }); |
66 | 66 | const [codeHasRun, setCodeHasRun] = useState(codeHasBeenRun); |
| 67 | + const prevCodeRunTriggeredRef = useRef(false); |
67 | 68 | const dispatch = useDispatch(); |
68 | 69 | const renderer = new marked.Renderer(); |
69 | 70 |
|
@@ -120,10 +121,15 @@ const WebComponentProject = ({ |
120 | 121 | }, [dispatch, projectInstructions, permitInstructionsOverride]); |
121 | 122 |
|
122 | 123 | useEffect(() => { |
123 | | - if (codeRunTriggered) { |
| 124 | + if (codeRunTriggered && !prevCodeRunTriggeredRef.current) { |
124 | 125 | document.dispatchEvent(runStartedEvent({ step: currentStepPosition })); |
125 | 126 | setCodeHasRun(true); |
126 | | - } else if (codeHasRun) { |
| 127 | + } |
| 128 | + prevCodeRunTriggeredRef.current = codeRunTriggered; |
| 129 | + }, [codeRunTriggered, currentStepPosition]); |
| 130 | + |
| 131 | + useEffect(() => { |
| 132 | + if (!codeRunTriggered && codeHasRun) { |
127 | 133 | const mz_criteria = Sk.sense_hat |
128 | 134 | ? Sk.sense_hat.mz_criteria |
129 | 135 | : { ...defaultMZCriteria }; |
|
0 commit comments