Sonarr/frontend/src/Settings/SettingsToolbar.js

107 lines
2.7 KiB
JavaScript

import PropTypes from 'prop-types';
import React, { Component } from 'react';
import keyboardShortcuts, { shortcuts } from 'Components/keyboardShortcuts';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import { icons } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AdvancedSettingsButton from './AdvancedSettingsButton';
import PendingChangesModal from './PendingChangesModal';
class SettingsToolbar extends Component {
//
// Lifecycle
componentDidMount() {
this.props.bindShortcut(shortcuts.SAVE_SETTINGS.key, this.saveSettings, { isGlobal: true });
}
//
// Control
saveSettings = (event) => {
event.preventDefault();
const {
hasPendingChanges,
onSavePress
} = this.props;
if (hasPendingChanges) {
onSavePress();
}
};
//
// Render
render() {
const {
advancedSettings,
showSave,
isSaving,
hasPendingChanges,
hasPendingLocation,
additionalButtons,
onSavePress,
onConfirmNavigation,
onCancelNavigation,
onAdvancedSettingsPress
} = this.props;
return (
<PageToolbar>
<PageToolbarSection>
<AdvancedSettingsButton
advancedSettings={advancedSettings}
onAdvancedSettingsPress={onAdvancedSettingsPress}
/>
{
showSave &&
<PageToolbarButton
label={hasPendingChanges ? translate('SaveChanges') : translate('NoChanges')}
iconName={icons.SAVE}
isSpinning={isSaving}
isDisabled={!hasPendingChanges}
onPress={onSavePress}
/>
}
{
additionalButtons
}
</PageToolbarSection>
<PendingChangesModal
isOpen={hasPendingLocation}
onConfirm={onConfirmNavigation}
onCancel={onCancelNavigation}
/>
</PageToolbar>
);
}
}
SettingsToolbar.propTypes = {
advancedSettings: PropTypes.bool.isRequired,
showSave: PropTypes.bool.isRequired,
isSaving: PropTypes.bool,
hasPendingLocation: PropTypes.bool.isRequired,
hasPendingChanges: PropTypes.bool,
additionalButtons: PropTypes.node,
onSavePress: PropTypes.func,
onAdvancedSettingsPress: PropTypes.func.isRequired,
onConfirmNavigation: PropTypes.func.isRequired,
onCancelNavigation: PropTypes.func.isRequired,
bindShortcut: PropTypes.func.isRequired
};
SettingsToolbar.defaultProps = {
showSave: true
};
export default keyboardShortcuts(SettingsToolbar);