import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import sortByName from 'Utilities/Array/sortByName'; import createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector'; import SelectInput from './SelectInput'; function createMapStateToProps() { return createSelector( createSortedSectionSelector('settings.languageProfiles', sortByName), (state, { includeNoChange }) => includeNoChange, (state, { includeMixed }) => includeMixed, (languageProfiles, includeNoChange, includeMixed) => { const values = _.map(languageProfiles.items, (languageProfile) => { return { key: languageProfile.id, value: languageProfile.name }; }); if (includeNoChange) { values.unshift({ key: 'noChange', value: 'No Change', disabled: true }); } if (includeMixed) { values.unshift({ key: 'mixed', value: '(Mixed)', disabled: true }); } return { values }; } ); } class LanguageProfileSelectInputConnector extends Component { // // Lifecycle componentDidMount() { const { name, value, values } = this.props; if (!value || !_.some(values, (option) => parseInt(option.key) === value)) { const firstValue = _.find(values, (option) => !isNaN(parseInt(option.key))); if (firstValue) { this.onChange({ name, value: firstValue.key }); } } } // // Listeners onChange = ({ name, value }) => { this.props.onChange({ name, value: parseInt(value) }); } // // Render render() { return ( ); } } LanguageProfileSelectInputConnector.propTypes = { name: PropTypes.string.isRequired, value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), values: PropTypes.arrayOf(PropTypes.object).isRequired, includeNoChange: PropTypes.bool.isRequired, onChange: PropTypes.func.isRequired }; LanguageProfileSelectInputConnector.defaultProps = { includeNoChange: false }; export default connect(createMapStateToProps)(LanguageProfileSelectInputConnector);