fix(curriculum): stop tests running after navigating away (#38146)
This commit is contained in:
@ -34,7 +34,8 @@ import {
|
|||||||
updateChallengeMeta,
|
updateChallengeMeta,
|
||||||
challengeMounted,
|
challengeMounted,
|
||||||
consoleOutputSelector,
|
consoleOutputSelector,
|
||||||
executeChallenge
|
executeChallenge,
|
||||||
|
cancelTests
|
||||||
} from '../redux';
|
} from '../redux';
|
||||||
|
|
||||||
import './classic.css';
|
import './classic.css';
|
||||||
@ -54,12 +55,14 @@ const mapDispatchToProps = dispatch =>
|
|||||||
initTests,
|
initTests,
|
||||||
updateChallengeMeta,
|
updateChallengeMeta,
|
||||||
challengeMounted,
|
challengeMounted,
|
||||||
executeChallenge
|
executeChallenge,
|
||||||
|
cancelTests
|
||||||
},
|
},
|
||||||
dispatch
|
dispatch
|
||||||
);
|
);
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
|
cancelTests: PropTypes.func.isRequired,
|
||||||
challengeMounted: PropTypes.func.isRequired,
|
challengeMounted: PropTypes.func.isRequired,
|
||||||
createFiles: PropTypes.func.isRequired,
|
createFiles: PropTypes.func.isRequired,
|
||||||
data: PropTypes.shape({
|
data: PropTypes.shape({
|
||||||
@ -164,8 +167,9 @@ class ShowClassic extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
const { createFiles } = this.props;
|
const { createFiles, cancelTests } = this.props;
|
||||||
createFiles({});
|
createFiles({});
|
||||||
|
cancelTests();
|
||||||
}
|
}
|
||||||
|
|
||||||
getChallenge = () => this.props.data.challengeNode;
|
getChallenge = () => this.props.data.challengeNode;
|
||||||
|
@ -6,7 +6,9 @@ import {
|
|||||||
takeLatest,
|
takeLatest,
|
||||||
takeEvery,
|
takeEvery,
|
||||||
fork,
|
fork,
|
||||||
getContext
|
getContext,
|
||||||
|
take,
|
||||||
|
cancel
|
||||||
} from 'redux-saga/effects';
|
} from 'redux-saga/effects';
|
||||||
import { channel } from 'redux-saga';
|
import { channel } from 'redux-saga';
|
||||||
import escape from 'lodash/escape';
|
import escape from 'lodash/escape';
|
||||||
@ -21,7 +23,8 @@ import {
|
|||||||
logsToConsole,
|
logsToConsole,
|
||||||
updateTests,
|
updateTests,
|
||||||
isBuildEnabledSelector,
|
isBuildEnabledSelector,
|
||||||
disableBuildOnError
|
disableBuildOnError,
|
||||||
|
types
|
||||||
} from './';
|
} from './';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -36,6 +39,13 @@ import {
|
|||||||
// How long before bailing out of a preview.
|
// How long before bailing out of a preview.
|
||||||
const previewTimeout = 2500;
|
const previewTimeout = 2500;
|
||||||
|
|
||||||
|
export function* executeCancellableChallengeSaga() {
|
||||||
|
const task = yield fork(executeChallengeSaga);
|
||||||
|
|
||||||
|
yield take(types.cancelTests);
|
||||||
|
yield cancel(task);
|
||||||
|
}
|
||||||
|
|
||||||
export function* executeChallengeSaga() {
|
export function* executeChallengeSaga() {
|
||||||
const isBuildEnabled = yield select(isBuildEnabledSelector);
|
const isBuildEnabled = yield select(isBuildEnabledSelector);
|
||||||
if (!isBuildEnabled) {
|
if (!isBuildEnabled) {
|
||||||
@ -181,7 +191,7 @@ function* previewChallengeSaga() {
|
|||||||
|
|
||||||
export function createExecuteChallengeSaga(types) {
|
export function createExecuteChallengeSaga(types) {
|
||||||
return [
|
return [
|
||||||
takeLatest(types.executeChallenge, executeChallengeSaga),
|
takeLatest(types.executeChallenge, executeCancellableChallengeSaga),
|
||||||
takeLatest(
|
takeLatest(
|
||||||
[
|
[
|
||||||
types.updateFile,
|
types.updateFile,
|
||||||
|
@ -60,6 +60,7 @@ export const types = createTypes(
|
|||||||
'updateSuccessMessage',
|
'updateSuccessMessage',
|
||||||
'updateTests',
|
'updateTests',
|
||||||
'updateLogs',
|
'updateLogs',
|
||||||
|
'cancelTests',
|
||||||
|
|
||||||
'logsToConsole',
|
'logsToConsole',
|
||||||
|
|
||||||
@ -121,6 +122,7 @@ export const createFiles = createAction(types.createFiles, challengeFiles =>
|
|||||||
export const createQuestion = createAction(types.createQuestion);
|
export const createQuestion = createAction(types.createQuestion);
|
||||||
export const initTests = createAction(types.initTests);
|
export const initTests = createAction(types.initTests);
|
||||||
export const updateTests = createAction(types.updateTests);
|
export const updateTests = createAction(types.updateTests);
|
||||||
|
export const cancelTests = createAction(types.cancelTests);
|
||||||
|
|
||||||
export const initConsole = createAction(types.initConsole);
|
export const initConsole = createAction(types.initConsole);
|
||||||
export const initLogs = createAction(types.initLogs);
|
export const initLogs = createAction(types.initLogs);
|
||||||
|
Reference in New Issue
Block a user