useState(val),
@@ -198,7 +198,10 @@ export const timerCardHooks = (updateSettings) => ({
export const typeRowHooks = ({
answers,
+ blockTitle,
correctAnswerCount,
+ problemType,
+ setBlockTitle,
typeKey,
updateField,
updateAnswer,
@@ -211,6 +214,9 @@ export const typeRowHooks = ({
});
}
}
+ if (blockTitle === ProblemTypes[problemType].title) {
+ setBlockTitle(ProblemTypes[typeKey].title);
+ }
updateField({ problemType: typeKey });
};
return {
diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/hooks.test.js b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/hooks.test.js
index 8f907c4a1..03d3a68c3 100644
--- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/hooks.test.js
+++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/hooks.test.js
@@ -251,6 +251,9 @@ describe('Problem settings hooks', () => {
describe('Type row hooks', () => {
test('test onClick', () => {
const typekey = 'multiplechoiceresponse';
+ const problemType = 'choiceresponse';
+ const blockTitle = 'Multi-select';
+ const setBlockTitle = jest.fn();
const updateField = jest.fn();
const updateAnswer = jest.fn();
const answers = [{
@@ -263,12 +266,16 @@ describe('Problem settings hooks', () => {
}];
output = hooks.typeRowHooks({
answers,
+ blockTitle,
correctAnswerCount: 2,
+ problemType,
+ setBlockTitle,
typeKey: typekey,
updateField,
updateAnswer,
});
output.onClick();
+ expect(setBlockTitle).toHaveBeenCalledWith('Single select');
expect(updateAnswer).toHaveBeenNthCalledWith(1, { ...answers[0], correct: false });
expect(updateAnswer).toHaveBeenNthCalledWith(2, { ...answers[1], correct: false });
expect(updateField).toHaveBeenCalledWith({ problemType: typekey });
diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/index.jsx b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/index.jsx
index 229363a32..109cb92e2 100644
--- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/index.jsx
+++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/index.jsx
@@ -24,8 +24,10 @@ export const SettingsWidget = ({
problemType,
// redux
answers,
+ blockTitle,
correctAnswerCount,
settings,
+ setBlockTitle,
updateSettings,
updateField,
updateAnswer,
@@ -36,8 +38,10 @@ export const SettingsWidget = ({
@@ -99,8 +103,10 @@ SettingsWidget.propTypes = {
title: PropTypes.string,
unselectedFeedback: PropTypes.string,
})).isRequired,
+ blockTitle: PropTypes.string.isRequired,
correctAnswerCount: PropTypes.number.isRequired,
problemType: PropTypes.string.isRequired,
+ setBlockTitle: PropTypes.func.isRequired,
updateAnswer: PropTypes.func.isRequired,
updateField: PropTypes.func.isRequired,
updateSettings: PropTypes.func.isRequired,
@@ -111,10 +117,12 @@ SettingsWidget.propTypes = {
const mapStateToProps = (state) => ({
settings: selectors.problem.settings(state),
answers: selectors.problem.answers(state),
+ blockTitle: selectors.app.blockTitle(state),
correctAnswerCount: selectors.problem.correctAnswerCount(state),
});
export const mapDispatchToProps = {
+ setBlockTitle: actions.app.setBlockTitle,
updateSettings: actions.problem.updateSettings,
updateField: actions.problem.updateField,
updateAnswer: actions.problem.updateAnswer,
diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/index.test.jsx b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/index.test.jsx
index 0150d483e..d2daba09b 100644
--- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/index.test.jsx
+++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/index.test.jsx
@@ -46,6 +46,12 @@ describe('SettingsWidget', () => {
});
});
+ describe('mapDispatchToProps', () => {
+ test('setBlockTitle from actions.app.setBlockTitle', () => {
+ expect(mapDispatchToProps.setBlockTitle).toEqual(actions.app.setBlockTitle);
+ });
+ });
+
describe('mapDispatchToProps', () => {
test('updateSettings from actions.problem.updateSettings', () => {
expect(mapDispatchToProps.updateSettings).toEqual(actions.problem.updateSettings);
@@ -57,4 +63,10 @@ describe('SettingsWidget', () => {
expect(mapDispatchToProps.updateField).toEqual(actions.problem.updateField);
});
});
+
+ describe('mapDispatchToProps', () => {
+ test('updateAnswer from actions.problem.updateAnswer', () => {
+ expect(mapDispatchToProps.updateAnswer).toEqual(actions.problem.updateAnswer);
+ });
+ });
});
diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeCard.jsx b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeCard.jsx
index c73779a04..aa6808196 100644
--- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeCard.jsx
+++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeCard.jsx
@@ -8,8 +8,10 @@ import TypeRow from './TypeRow';
export const TypeCard = ({
answers,
+ blockTitle,
correctAnswerCount,
problemType,
+ setBlockTitle,
updateField,
updateAnswer,
// inject
@@ -27,12 +29,15 @@ export const TypeCard = ({
{problemTypeKeysArray.map((typeKey, i) => (
@@ -49,8 +54,10 @@ TypeCard.propTypes = {
title: PropTypes.string,
unselectedFeedback: PropTypes.string,
})).isRequired,
+ blockTitle: PropTypes.string.isRequired,
correctAnswerCount: PropTypes.number.isRequired,
problemType: PropTypes.string.isRequired,
+ setBlockTitle: PropTypes.func.isRequired,
updateField: PropTypes.func.isRequired,
updateAnswer: PropTypes.func.isRequired,
// injected
diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeCard.test.jsx b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeCard.test.jsx
index d2a2f8518..d22ce280d 100644
--- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeCard.test.jsx
+++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeCard.test.jsx
@@ -7,8 +7,10 @@ import { ProblemTypeKeys } from '../../../../../../data/constants/problem';
describe('TypeCard', () => {
const props = {
answers: [],
+ blockTitle: 'BLocktiTLE',
correctAnswerCount: 0,
problemType: ProblemTypeKeys.TEXTINPUT,
+ setBlockTitle: jest.fn().mockName('args.setBlockTitle'),
updateField: jest.fn().mockName('args.updateField'),
updateAnswer: jest.fn().mockName('args.updateAnswer'),
// injected
diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeRow.jsx b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeRow.jsx
index a42f99d05..cc9c44ca8 100644
--- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeRow.jsx
+++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeRow.jsx
@@ -8,17 +8,23 @@ import Button from '../../../../../../sharedComponents/Button';
export const TypeRow = ({
answers,
+ blockTitle,
correctAnswerCount,
typeKey,
label,
selected,
+ problemType,
lastRow,
+ setBlockTitle,
updateField,
updateAnswer,
}) => {
const { onClick } = typeRowHooks({
answers,
+ blockTitle,
correctAnswerCount,
+ problemType,
+ setBlockTitle,
typeKey,
updateField,
updateAnswer,
@@ -43,11 +49,14 @@ TypeRow.propTypes = {
title: PropTypes.string,
unselectedFeedback: PropTypes.string,
})).isRequired,
+ blockTitle: PropTypes.string.isRequired,
correctAnswerCount: PropTypes.number.isRequired,
typeKey: PropTypes.string.isRequired,
label: PropTypes.string.isRequired,
selected: PropTypes.bool.isRequired,
lastRow: PropTypes.bool.isRequired,
+ problemType: PropTypes.string.isRequired,
+ setBlockTitle: PropTypes.func.isRequired,
updateAnswer: PropTypes.func.isRequired,
updateField: PropTypes.func.isRequired,
};
diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeRow.test.jsx b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeRow.test.jsx
index 2065e57c0..495231ce0 100644
--- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeRow.test.jsx
+++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/TypeRow.test.jsx
@@ -11,11 +11,14 @@ describe('TypeRow', () => {
const typeKey = 'TEXTINPUT';
const props = {
answers: [],
+ blockTitle: 'bLoCkTiTLE',
correctAnswerCount: 0,
typeKey,
label: 'Text Input Problem',
selected: true,
lastRow: false,
+ problemType: 'prOBlEMtyPE',
+ setBlockTitle: jest.fn().mockName('args.setBlockTitle'),
updateField: jest.fn().mockName('args.updateField'),
updateAnswer: jest.fn().mockName('args.updateAnswer'),
};
@@ -31,8 +34,11 @@ describe('TypeRow', () => {
shallow();
expect(typeRowHooks).toHaveBeenCalledWith({
answers: props.answers,
+ blockTitle: props.blockTitle,
correctAnswerCount: props.correctAnswerCount,
+ problemType: props.problemType,
typeKey,
+ setBlockTitle: props.setBlockTitle,
updateField: props.updateField,
updateAnswer: props.updateAnswer,
});
diff --git a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/__snapshots__/TypeCard.test.jsx.snap b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/__snapshots__/TypeCard.test.jsx.snap
index e22a1adad..5e5a13565 100644
--- a/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/__snapshots__/TypeCard.test.jsx.snap
+++ b/src/editors/containers/ProblemEditor/components/EditProblemView/SettingsWidget/settingsComponents/__snapshots__/TypeCard.test.jsx.snap
@@ -9,55 +9,70 @@ exports[`TypeCard snapshot snapshot: renders type setting card 1`] = `
>