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
This commit is contained in:
Jesse Hallam 2021-02-22 14:36:53 -04:00 committed by GitHub
parent 9b8ba4492e
commit c386fbb0d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 0 deletions

View file

@ -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) => {

View file

@ -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(
<DialogElement
{...baseProps}
value={'unknown'}
/>,
);
expect(wrapper.find(AutocompleteSelector).find({selected: null}).exists()).toBe(true);
});
test('handles known value', () => {
const wrapper = shallow(
<DialogElement
{...baseProps}
value={'value2'}
/>,
);
expect(wrapper.find(AutocompleteSelector).find({selected: {name: 'name2', value: 'value2'}}).exists()).toBe(true);
});
});
});