From c386fbb0d90380033ecb955b2bf11146fd283b3e Mon Sep 17 00:00:00 2001 From: Jesse Hallam Date: Mon, 22 Feb 2021 14:36:53 -0400 Subject: [PATCH] MM-32851: honour defaults in interactive dialogs (#5183) The `select` support for interactive dialogs was missing support for handling the default value provided by the server. Fixes: https://mattermost.atlassian.net/browse/MM-32851 --- .../interactive_dialog/dialog_element.js | 7 ++++ .../interactive_dialog/dialog_element.test.js | 37 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/app/screens/interactive_dialog/dialog_element.js b/app/screens/interactive_dialog/dialog_element.js index 5c09bd9a7..daa322eff 100644 --- a/app/screens/interactive_dialog/dialog_element.js +++ b/app/screens/interactive_dialog/dialog_element.js @@ -36,6 +36,13 @@ export default class DialogElement extends PureComponent { this.state = { selected: null, }; + + if (props.type === 'select' && props.value) { + const selected = props.options.find((option) => option.value === props.value); + if (selected) { + this.state.selected = selected; + } + } } onChange = (name, value) => { diff --git a/app/screens/interactive_dialog/dialog_element.test.js b/app/screens/interactive_dialog/dialog_element.test.js index bf6e48ce3..42ff1fcff 100644 --- a/app/screens/interactive_dialog/dialog_element.test.js +++ b/app/screens/interactive_dialog/dialog_element.test.js @@ -7,6 +7,7 @@ import {shallow} from 'enzyme'; import Preferences from '@mm-redux/constants/preferences'; import RadioSetting from 'app/components/widgets/settings/radio_setting'; import BoolSetting from 'app/components/widgets/settings/bool_setting'; +import AutocompleteSelector from 'app/components/autocomplete_selector'; import DialogElement from './dialog_element.js'; describe('DialogElement', () => { @@ -96,4 +97,40 @@ describe('DialogElement', () => { expect(wrapper.find(BoolSetting).find({value: false}).exists()).toBe(true); }); }); + + describe('select', () => { + const baseProps = { + ...baseDialogProps, + theme, + display_name: 'Select', + name: 'select', + optional: false, + type: 'select', + options: [ + {name: 'name1', value: 'value1'}, + {name: 'name2', value: 'value2'}, + {name: 'name3', value: 'value3'}, + ], + }; + + test('handles unknown value', () => { + const wrapper = shallow( + , + ); + expect(wrapper.find(AutocompleteSelector).find({selected: null}).exists()).toBe(true); + }); + + test('handles known value', () => { + const wrapper = shallow( + , + ); + expect(wrapper.find(AutocompleteSelector).find({selected: {name: 'name2', value: 'value2'}}).exists()).toBe(true); + }); + }); });