fix: update title on type select (#196)

* fix: update title on type select

* fix: lint fix

* fix: add test
This commit is contained in:
connorhaugh
2023-01-13 14:37:52 -05:00
committed by GitHub
parent 1a370c12d9
commit 95ae45cce8
3 changed files with 16 additions and 4 deletions

View File

@@ -18,6 +18,7 @@ export const SelectTypeFooter = ({
selected,
// redux
updateField,
setBlockTitle,
// injected,
intl,
}) => (
@@ -34,7 +35,7 @@ export const SelectTypeFooter = ({
</Button>
<Button
aria-label={intl.formatMessage(messages.selectButtonAriaLabel)}
onClick={hooks.onSelect(selected, updateField)}
onClick={hooks.onSelect({ selected, updateField, setBlockTitle })}
disabled={!selected}
>
<FormattedMessage {...messages.selectButtonLabel} />
@@ -52,6 +53,7 @@ SelectTypeFooter.propTypes = {
onCancel: PropTypes.func.isRequired,
selected: PropTypes.string,
updateField: PropTypes.func.isRequired,
setBlockTitle: PropTypes.func.isRequired,
// injected
intl: intlShape.isRequired,
};
@@ -61,6 +63,7 @@ export const mapStateToProps = () => ({
export const mapDispatchToProps = {
updateField: actions.problem.updateField,
setBlockTitle: actions.app.setBlockTitle,
};
export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(SelectTypeFooter));

View File

@@ -18,13 +18,15 @@ export const selectHooks = () => {
};
};
export const onSelect = (selected, updateField) => () => {
export const onSelect = ({ selected, updateField, setBlockTitle }) => () => {
if (Object.values(AdvanceProblemKeys).includes(selected)) {
updateField({ problemType: ProblemTypeKeys.ADVANCED, rawOLX: AdvanceProblems[selected].template });
setBlockTitle(AdvanceProblems[selected].title);
} else {
const newOLX = ProblemTypes[selected].template;
const { settings, ...newState } = getDataFromOlx({ rawOLX: newOLX, rawSettings: {} });
updateField({ ...newState });
setBlockTitle(ProblemTypes[selected].title);
}
};

View File

@@ -16,6 +16,7 @@ const mockUpdateField = jest.fn().mockName('updateField');
const mockSelected = 'multiplechoiceresponse';
const mockAdvancedSelected = 'circuitschematic';
const mockSetSelected = jest.fn().mockName('setSelected');
const mocksetBlockTitle = jest.fn().mockName('setBlockTitle');
let hook;
@@ -45,20 +46,26 @@ describe('SelectTypeModal hooks', () => {
describe('onSelect', () => {
test('updateField is called with selected templated if selected is an Advanced Problem', () => {
module.onSelect(mockAdvancedSelected, mockUpdateField)();
module.onSelect({
selected: mockAdvancedSelected,
updateField: mockUpdateField,
setBlockTitle: mocksetBlockTitle,
})();
expect(mockUpdateField).toHaveBeenCalledWith({
problemType: ProblemTypeKeys.ADVANCED,
rawOLX: AdvanceProblems[mockAdvancedSelected].template,
});
expect(mocksetBlockTitle).toHaveBeenCalledWith(AdvanceProblems[mockAdvancedSelected].title);
});
test('updateField is called with selected on visual propblems', () => {
module.onSelect(mockSelected, mockUpdateField)();
module.onSelect({ selected: mockSelected, updateField: mockUpdateField, setBlockTitle: mocksetBlockTitle })();
const testOlXParser = new OLXParser(ProblemTypes[mockSelected].template);
const { settings, ...testState } = testOlXParser.getParsedOLXData();
expect(mockUpdateField).toHaveBeenCalledWith({
...testState,
rawOLX: ProblemTypes[mockSelected].template,
});
expect(mocksetBlockTitle).toHaveBeenCalledWith(ProblemTypes[mockSelected].title);
});
});