/*
* SonarQube :: Web
* Copyright (C) 2009-2016 SonarSource SA
* mailto:contact 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 _ from 'underscore';
import React from 'react';
import { Treemap } from '../../../components/charts/treemap';
import { getChildren } from '../../../api/components';
import { formatMeasure } from '../../../helpers/measures';
import { getComponentUrl } from '../../../helpers/urls';
import { translate, translateWithParameters } from '../../../helpers/l10n';
const HEIGHT = 302;
export class DomainTreemap extends React.Component {
constructor (props) {
super(props);
this.state = {
loading: true,
files: [],
sizeMetric: this.getMetricObject(props.metrics, props.sizeMetric),
colorMetric: props.colorMetric ? this.getMetricObject(props.metrics, props.colorMetric) : null,
breadcrumbs: []
};
}
componentDidMount () {
this.requestComponents(this.props.component.key);
}
requestComponents (componentKey) {
let metrics = [this.props.sizeMetric, this.props.colorMetric];
return getChildren(componentKey, metrics).then(r => {
let components = r.map(component => {
let measures = {};
(component.msr || []).forEach(measure => {
measures[measure.key] = measure.val;
});
return _.extend(component, {
measures,
key: component.copy ? `${component.copy}` : component.key
});
});
this.setState({ loading: false, components });
});
}
getMetricObject (metrics, metricKey) {
return _.findWhere(metrics, { key: metricKey });
}
getTooltip (component) {
let inner = [
component.name,
`${this.state.sizeMetric.name}:
${formatMeasure(component.measures[this.props.sizeMetric], this.state.sizeMetric.type)}`
];
if (this.state.colorMetric) {
let measure = component.measures[this.props.colorMetric];
let formatted = measure != null ? formatMeasure(measure, this.state.colorMetric.type) : '—';
inner.push(`${this.state.colorMetric.name}: ${formatted}`);
}
inner = inner.join('
');
return `