import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { kinds } from 'Helpers/Props'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import PageContent from 'Components/Page/PageContent'; import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector'; import SettingsToolbarConnector from 'Settings/SettingsToolbarConnector'; import Form from 'Components/Form/Form'; import ConfirmModal from 'Components/Modal/ConfirmModal'; import AnalyticSettings from './AnalyticSettings'; import BackupSettings from './BackupSettings'; import HostSettings from './HostSettings'; import LoggingSettings from './LoggingSettings'; import ProxySettings from './ProxySettings'; import SecuritySettings from './SecuritySettings'; import UpdateSettings from './UpdateSettings'; const requiresRestartKeys = [ 'bindAddress', 'port', 'urlBase', 'enableSsl', 'sslPort', 'sslCertPath', 'sslCertPassword', 'authenticationMethod', 'username', 'password', 'apiKey' ]; class GeneralSettings extends Component { // // Lifecycle constructor(props, context) { super(props, context); this.state = { isRestartRequiredModalOpen: false }; } componentDidUpdate(prevProps) { const { settings, isSaving, saveError } = this.props; if (isSaving || saveError || !prevProps.isSaving) { return; } const prevSettings = prevProps.settings; const pendingRestart = _.some(requiresRestartKeys, (key) => { const setting = settings[key]; const prevSetting = prevSettings[key]; if (!setting || !prevSetting) { return false; } const previousValue = prevSetting.previousValue; const value = setting.value; return previousValue != null && previousValue !== value; }); this.setState({ isRestartRequiredModalOpen: pendingRestart }); } // // Listeners onConfirmRestart = () => { this.setState({ isRestartRequiredModalOpen: false }); this.props.onConfirmRestart(); } onCloseRestartRequiredModalOpen = () => { this.setState({ isRestartRequiredModalOpen: false }); } // // Render render() { const { advancedSettings, isFetching, isPopulated, error, settings, hasSettings, isResettingApiKey, isWindows, isWindowsService, isDocker, mode, packageUpdateMechanism, onInputChange, onConfirmResetApiKey, ...otherProps } = this.props; return ( { isFetching && !isPopulated && } { !isFetching && error &&
Unable to load General settings
} { hasSettings && isPopulated && !error &&
}
); } } GeneralSettings.propTypes = { advancedSettings: PropTypes.bool.isRequired, isFetching: PropTypes.bool.isRequired, isPopulated: PropTypes.bool.isRequired, error: PropTypes.object, isSaving: PropTypes.bool.isRequired, saveError: PropTypes.object, settings: PropTypes.object.isRequired, isResettingApiKey: PropTypes.bool.isRequired, hasSettings: PropTypes.bool.isRequired, isWindows: PropTypes.bool.isRequired, isWindowsService: PropTypes.bool.isRequired, isDocker: PropTypes.bool.isRequired, mode: PropTypes.string.isRequired, packageUpdateMechanism: PropTypes.string.isRequired, onInputChange: PropTypes.func.isRequired, onConfirmResetApiKey: PropTypes.func.isRequired, onConfirmRestart: PropTypes.func.isRequired }; export default GeneralSettings;