import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector'; import sortByName from 'Utilities/Array/sortByName'; import translate from 'Utilities/String/translate'; import EnhancedSelectInput from './EnhancedSelectInput'; function createMapStateToProps() { return createSelector( createSortedSectionSelector('settings.qualityProfiles', sortByName), (state, { includeNoChange }) => includeNoChange, (state, { includeNoChangeDisabled }) => includeNoChangeDisabled, (state, { includeMixed }) => includeMixed, (qualityProfiles, includeNoChange, includeNoChangeDisabled = true, includeMixed) => { const values = _.map(qualityProfiles.items, (qualityProfile) => { return { key: qualityProfile.id, value: qualityProfile.name }; }); if (includeNoChange) { values.unshift({ key: 'noChange', value: translate('NoChange'), isDisabled: includeNoChangeDisabled }); } if (includeMixed) { values.unshift({ key: 'mixed', value: '(Mixed)', isDisabled: true }); } return { values }; } ); } class QualityProfileSelectInputConnector extends Component { // // Lifecycle componentDidMount() { const { name, value, values } = this.props; if (!value || !values.some((option) => option.key === value || parseInt(option.key) === value)) { const firstValue = values.find((option) => !isNaN(parseInt(option.key))); if (firstValue) { this.onChange({ name, value: firstValue.key }); } } } // // Listeners onChange = ({ name, value }) => { this.props.onChange({ name, value: value === 'noChange' ? value : parseInt(value) }); }; // // Render render() { return ( ); } } QualityProfileSelectInputConnector.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 }; QualityProfileSelectInputConnector.defaultProps = { includeNoChange: false }; export default connect(createMapStateToProps)(QualityProfileSelectInputConnector);