/* * SonarQube * Copyright (C) 2009-2017 SonarSource SA * mailto:info AT sonarsource DOT com * * This program 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 3 of the License, or (at your option) any later version. * * This program 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 this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import React from 'react'; import sortBy from 'lodash/sortBy'; import { TYPE, QUALIFIERS_ORDER } from './constants'; import DeleteView from './delete-view'; import RadioToggle from '../../components/controls/RadioToggle'; import Checkbox from '../../components/controls/Checkbox'; import { translate } from '../../helpers/l10n'; export default React.createClass({ propTypes: { onSearch: React.PropTypes.func.isRequired }, onSubmit (e) { e.preventDefault(); this.search(); }, search () { const q = this.refs.input.value; this.props.onSearch(q); }, getTypeOptions () { return [ { value: TYPE.ALL, label: 'All' }, { value: TYPE.PROVISIONED, label: 'Provisioned' }, { value: TYPE.GHOSTS, label: 'Ghosts' } ]; }, getQualifierOptions () { const options = this.props.topLevelQualifiers.map(q => { return { value: q, label: translate('qualifiers', q) }; }); return sortBy(options, option => QUALIFIERS_ORDER.indexOf(option.value)); }, renderCheckbox () { const isAllChecked = this.props.projects.length > 0 && this.props.selection.length === this.props.projects.length; const thirdState = this.props.projects.length > 0 && this.props.selection.length > 0 && this.props.selection.length < this.props.projects.length; const checked = isAllChecked || thirdState; return ( ); }, renderSpinner () { return ; }, onCheck (checked) { if (checked) { this.props.onAllSelected(); } else { this.props.onAllDeselected(); } }, renderGhostsDescription () { if (this.props.type !== TYPE.GHOSTS || !this.props.ready) { return null; } return
{translate('bulk_deletion.ghosts.description')}
; }, deleteProjects () { new DeleteView({ deleteProjects: this.props.deleteProjects }).render(); }, renderQualifierFilter () { const options = this.getQualifierOptions(); if (options.length < 2) { return null; } return ( ); }, render () { const isSomethingSelected = this.props.projects.length > 0 && this.props.selection.length > 0; return (
{this.renderQualifierFilter()}
{this.props.ready ? this.renderCheckbox() : this.renderSpinner()}
{this.renderGhostsDescription()}
); } });