/* * This file is part of Cockpit. * * Copyright (C) 2016 Red Hat, Inc. * * Cockpit is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * Cockpit is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Cockpit; If not, see . */ var cockpit = require("cockpit"); var React = require("react"); var _ = cockpit.gettext; /* Performance profile entry * Expected props: * - name (key) * - recommended (boolean) * - active (boolean) * - selected (boolean) * - title * - description * - click (callback function) */ var TunedDialogProfile = React.createClass({ propTypes: { name: React.PropTypes.string.isRequired, recommended: React.PropTypes.bool.isRequired, active: React.PropTypes.bool.isRequired, selected: React.PropTypes.bool.isRequired, title: React.PropTypes.string.isRequired, description: React.PropTypes.string.isRequired, click: React.PropTypes.func.isRequired, }, render: function() { var classes = "list-group-item"; if (this.props.selected) classes += " active"; var recommended; if (this.props.recommended) recommended = { _("recommended") }; return (
{recommended}

{ this.props.title }

{ this.props.description }
); } }); /* dialog body with list of performance profiles * Expected props: * - active_profile (key of the active profile) * - change_selected callback, called with profile name each time the selected entry changes * - profiles (array of entries passed to TunedDialogProfile) * - name (string, key) * - recommended (boolean) * - active (boolean) * - title (string) * - description (string) */ var TunedDialogBody = React.createClass({ propTypes: { active_profile: React.PropTypes.string.isRequired, change_selected: React.PropTypes.func.isRequired, profiles: React.PropTypes.array.isRequired, }, getInitialState: function() { return { selected_profile: this.props.active_profile, }; }, handleProfileClick: function(profile) { if (profile != this.state.selected_profile) { this.setState( { selected_profile: profile } ); this.props.change_selected(profile); } }, render: function() { var self = this; var profiles = this.props.profiles.map(function(itm) { itm.active = (self.props.active_profile == itm.profile); itm.selected = (self.state.selected_profile == itm.name); itm.click = self.handleProfileClick.bind(self, itm.name); return ; }); return (
{ profiles }
); } }); var TunedLink = React.createClass({ render: function() { var self = this; var text = self.props.active; var disabled = false; if (self.props.failed) { text = _("tuned-failure", "error"); disabled = true; } else if (self.props.state != "running") { text = _("tuned-not-running", "none"); } if (self.props.state == "not-installed") disabled = true; var opts = { }; var classes = "action-trigger"; if (disabled) { opts['disabled'] = 'disabled'; classes += " disabled"; } return (
{ text }
); } }); module.exports = { dialog: TunedDialogBody, link: TunedLink, };