diff --git a/app/screens/interactive_dialog/interactive_dialog.js b/app/screens/interactive_dialog/interactive_dialog.js index e4888ee7e6..a682c1648a 100644 --- a/app/screens/interactive_dialog/interactive_dialog.js +++ b/app/screens/interactive_dialog/interactive_dialog.js @@ -19,7 +19,7 @@ export default class InteractiveDialog extends PureComponent { static propTypes = { url: PropTypes.string.isRequired, callbackId: PropTypes.string, - elements: PropTypes.arrayOf(PropTypes.object).isRequired, + elements: PropTypes.arrayOf(PropTypes.object), notifyOnCancel: PropTypes.bool, state: PropTypes.string, theme: PropTypes.object, @@ -38,9 +38,11 @@ export default class InteractiveDialog extends PureComponent { super(props); const values = {}; - props.elements.forEach((e) => { - values[e.name] = e.default || null; - }); + if (props.elements != null) { + props.elements.forEach((e) => { + values[e.name] = e.default || null; + }); + } this.state = { values, @@ -69,18 +71,21 @@ export default class InteractiveDialog extends PureComponent { const {elements} = this.props; const values = this.state.values; const errors = {}; - elements.forEach((elem) => { - const error = checkDialogElementForError(elem, values[elem.name]); - if (error) { - errors[elem.name] = ( - - ); - } - }); + + if (elements) { + elements.forEach((elem) => { + const error = checkDialogElementForError(elem, values[elem.name]); + if (error) { + errors[elem.name] = ( + + ); + } + }); + } this.setState({errors}); @@ -152,7 +157,7 @@ export default class InteractiveDialog extends PureComponent { - {elements.map((e) => { + {elements && elements.map((e) => { return ( { marginTop: 10, }, }; -}); \ No newline at end of file +}); diff --git a/app/screens/interactive_dialog/interactive_dialog.test.js b/app/screens/interactive_dialog/interactive_dialog.test.js index 9030af5499..7de4974469 100644 --- a/app/screens/interactive_dialog/interactive_dialog.test.js +++ b/app/screens/interactive_dialog/interactive_dialog.test.js @@ -84,4 +84,26 @@ describe('InteractiveDialog', () => { wrapper.instance().navigationButtonPressed({buttonId: 'close-dialog'}); expect(baseProps.actions.submitInteractiveDialog).not.toHaveBeenCalled(); }); + + test('should handle display with no elements', async () => { + baseProps.elements = null; + + const wrapper = shallow( + , + ); + + const dialog = { + url: baseProps.url, + callback_id: baseProps.callbackId, + state: baseProps.state, + submission: {}, + }; + + wrapper.instance().handleSubmit(); + expect(baseProps.actions.submitInteractiveDialog).toHaveBeenCalledTimes(1); + expect(baseProps.actions.submitInteractiveDialog).toHaveBeenCalledWith(dialog); + }); });