// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import BoolSetting from 'app/components/widgets/settings/bool_setting'; import TextSetting from 'app/components/widgets/settings/text_setting'; import AutocompleteSelector from 'app/components/autocomplete_selector'; import RadioSetting from 'app/components/widgets/settings/radio_setting'; const TEXT_DEFAULT_MAX_LENGTH = 150; const TEXTAREA_DEFAULT_MAX_LENGTH = 3000; export default class DialogElement extends PureComponent { static propTypes = { displayName: PropTypes.string.isRequired, name: PropTypes.string.isRequired, type: PropTypes.string.isRequired, subtype: PropTypes.string, placeholder: PropTypes.string, helpText: PropTypes.string, errorText: PropTypes.node, maxLength: PropTypes.number, dataSource: PropTypes.string, optional: PropTypes.bool, options: PropTypes.arrayOf(PropTypes.object), value: PropTypes.any, onChange: PropTypes.func, theme: PropTypes.object, isLandscape: PropTypes.bool.isRequired, }; constructor(props) { super(props); this.state = { selected: null, }; } onChange = (name, value) => { const {type, subtype, onChange} = this.props; let newValue = value; if (type === 'text' && subtype === 'number') { newValue = parseInt(value, 10); } onChange(name, newValue); } handleAutocompleteSelect = (selected) => { if (!selected) { return; } this.setState({selected}); const {name, onChange} = this.props; onChange(name, selected.value); } render() { const { name, type, subtype, displayName, value, placeholder, helpText, errorText, optional, theme, dataSource, options, isLandscape, } = this.props; let {maxLength} = this.props; if (type === 'text' || type === 'textarea') { let keyboardType = 'default'; let multiline = false; let secureTextEntry = false; if (type === 'text') { maxLength = maxLength || TEXT_DEFAULT_MAX_LENGTH; if (subtype === 'email') { keyboardType = 'email-address'; } else if (subtype === 'number') { keyboardType = 'numeric'; } else if (subtype === 'tel') { keyboardType = 'phone-pad'; } else if (subtype === 'url') { keyboardType = 'url'; } else if (subtype === 'password') { secureTextEntry = true; } } else { multiline = true; maxLength = maxLength || TEXTAREA_DEFAULT_MAX_LENGTH; } return ( ); } else if (type === 'select') { return ( ); } else if (type === 'radio') { return ( ); } else if (type === 'bool') { return ( ); } return null; } }