import React, { Component, Fragment } from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { Field, reduxForm, formValueSelector } from 'redux-form'; import { Trans, withNamespaces } from 'react-i18next'; import flow from 'lodash/flow'; import Controls from './Controls'; import AddressList from './AddressList'; import renderField from './renderField'; import { getInterfaceIp } from '../../helpers/helpers'; import { ALL_INTERFACES_IP } from '../../helpers/constants'; const required = (value) => { if (value || value === 0) { return false; } return form_error_required; }; const port = (value) => { if (value < 1 || value > 65535) { return form_error_port; } return false; }; const toNumber = value => value && parseInt(value, 10); const renderInterfaces = (interfaces => ( Object.keys(interfaces).map((item) => { const option = interfaces[item]; const { name, ip_addresses, flags, } = option; if (option && ip_addresses && ip_addresses.length > 0) { const ip = getInterfaceIp(option); const isDown = flags && flags.includes('down'); if (isDown) { return ( ); } return ( ); } return false; }) )); class Settings extends Component { componentDidMount() { const { web, dns } = this.props.config; this.props.validateForm({ web, dns, }); } render() { const { handleSubmit, handleChange, handleAutofix, webIp, webPort, dnsIp, dnsPort, interfaces, invalid, config, } = this.props; const { status: webStatus, can_autofix: isWebFixAvailable, } = config.web; const { status: dnsStatus, can_autofix: isDnsFixAvailable, } = config.dns; return (
install_settings_title
{renderInterfaces(interfaces)}
{webStatus &&
{webStatus} {isWebFixAvailable && }
}
install_settings_interface_link
install_settings_dns
{renderInterfaces(interfaces)}
{dnsStatus &&
{dnsStatus} {isDnsFixAvailable && }
}
install_settings_dns_desc
); } } Settings.propTypes = { handleSubmit: PropTypes.func.isRequired, handleChange: PropTypes.func, handleAutofix: PropTypes.func, validateForm: PropTypes.func, webIp: PropTypes.string.isRequired, dnsIp: PropTypes.string.isRequired, config: PropTypes.object.isRequired, webPort: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, ]), dnsPort: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, ]), interfaces: PropTypes.object.isRequired, invalid: PropTypes.bool.isRequired, initialValues: PropTypes.object, }; const selector = formValueSelector('install'); const SettingsForm = connect((state) => { const webIp = selector(state, 'web.ip'); const webPort = selector(state, 'web.port'); const dnsIp = selector(state, 'dns.ip'); const dnsPort = selector(state, 'dns.port'); return { webIp, webPort, dnsIp, dnsPort, }; })(Settings); export default flow([ withNamespaces(), reduxForm({ form: 'install', destroyOnUnmount: false, forceUnregisterOnUnmount: true, }), ])(SettingsForm);