From c3e93b8e881a6be261a5cdc800a571cf1343c998 Mon Sep 17 00:00:00 2001 From: Grégoire Aubert Date: Tue, 18 Jul 2017 10:58:50 +0200 Subject: SONAR-9403 Fix metric translation for plugins metrics on project activity page --- .../apps/overview/events/PreviewGraphTooltips.js | 3 +- .../events/__tests__/PreviewGraphTooltips-test.js | 4 +- .../PreviewGraphTooltips-test.js.snap | 3 -- .../components/GraphsLegendCustom.js | 7 ++-- .../projectActivity/components/GraphsTooltips.js | 5 ++- .../components/ProjectActivityAppContainer.js | 48 +++++++++++----------- .../__snapshots__/GraphsTooltips-test.js.snap | 2 +- .../components/forms/AddGraphMetric.js | 8 +++- 8 files changed, 41 insertions(+), 39 deletions(-) (limited to 'server/sonar-web/src') diff --git a/server/sonar-web/src/main/js/apps/overview/events/PreviewGraphTooltips.js b/server/sonar-web/src/main/js/apps/overview/events/PreviewGraphTooltips.js index 982320a3a7c..3ee59922574 100644 --- a/server/sonar-web/src/main/js/apps/overview/events/PreviewGraphTooltips.js +++ b/server/sonar-web/src/main/js/apps/overview/events/PreviewGraphTooltips.js @@ -21,6 +21,7 @@ import React from 'react'; import BubblePopup from '../../../components/common/BubblePopup'; import FormattedDate from '../../../components/ui/FormattedDate'; import PreviewGraphTooltipsContent from './PreviewGraphTooltipsContent'; +import { getLocalizedMetricName } from '../../../helpers/l10n'; import type { Metric } from '../types'; import type { Serie } from '../../../components/charts/AdvancedTimeline'; @@ -68,7 +69,7 @@ export default class PreviewGraphTooltips extends React.PureComponent { ); diff --git a/server/sonar-web/src/main/js/apps/overview/events/__tests__/PreviewGraphTooltips-test.js b/server/sonar-web/src/main/js/apps/overview/events/__tests__/PreviewGraphTooltips-test.js index 10a9a0864cb..1b37aaf3691 100644 --- a/server/sonar-web/src/main/js/apps/overview/events/__tests__/PreviewGraphTooltips-test.js +++ b/server/sonar-web/src/main/js/apps/overview/events/__tests__/PreviewGraphTooltips-test.js @@ -24,7 +24,6 @@ import PreviewGraphTooltips from '../PreviewGraphTooltips'; const SERIES_OVERVIEW = [ { name: 'code_smells', - translatedName: 'Code Smells', style: 1, data: [ { @@ -39,7 +38,6 @@ const SERIES_OVERVIEW = [ }, { name: 'bugs', - translatedName: 'Bugs', style: 0, data: [ { @@ -54,7 +52,6 @@ const SERIES_OVERVIEW = [ }, { name: 'vulnerabilities', - translatedName: 'Vulnerabilities', style: 2, data: [ { @@ -70,6 +67,7 @@ const SERIES_OVERVIEW = [ ]; const METRICS = [ + { key: 'code_smells', name: 'Code Smells', type: 'INT' }, { key: 'bugs', name: 'Bugs', type: 'INT' }, { key: 'vulnerabilities', name: 'Vulnerabilities', type: 'INT', custom: true } ]; diff --git a/server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap b/server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap index e8090585551..455d71d0124 100644 --- a/server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap +++ b/server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap @@ -41,7 +41,6 @@ exports[`should render correctly 1`] = ` ], "name": "code_smells", "style": 1, - "translatedName": "Code Smells", } } translatedName="Code Smells" @@ -62,7 +61,6 @@ exports[`should render correctly 1`] = ` ], "name": "bugs", "style": 0, - "translatedName": "Bugs", } } translatedName="Bugs" @@ -83,7 +81,6 @@ exports[`should render correctly 1`] = ` ], "name": "vulnerabilities", "style": 2, - "translatedName": "Vulnerabilities", } } translatedName="Vulnerabilities" diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js index 540bb65961a..72e4009e401 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js @@ -21,13 +21,14 @@ import React from 'react'; import GraphsLegendItem from './GraphsLegendItem'; import Tooltip from '../../../components/controls/Tooltip'; import { hasDataValues } from '../utils'; -import { translate } from '../../../helpers/l10n'; +import { getLocalizedMetricName, translate } from '../../../helpers/l10n'; import type { Metric } from '../types'; +import type { Serie } from '../../../components/charts/AdvancedTimeline'; type Props = { metrics: Array, removeMetric: string => void, - series: Array<{ name: string, translatedName: string, style: string }> + series: Array }; export default function GraphsLegendCustom({ metrics, removeMetric, series }: Props) { @@ -39,7 +40,7 @@ export default function GraphsLegendCustom({ metrics, removeMetric, series }: Pr const legendItem = ( ); diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAppContainer.js b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAppContainer.js index dd3b3690c07..035693ad599 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAppContainer.js +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAppContainer.js @@ -213,34 +213,32 @@ class ProjectActivityAppContainer extends React.PureComponent { ignoreHistory ? Promise.resolve() : this.fetchMeasuresHistory(graphMetrics) ]).then(response => { if (this.mounted) { - setTimeout(() => { - const newState = { - analyses: response[0].analyses, - analysesLoading: true, - loading: false, - metrics: response[1], - paging: response[0].paging - }; - if (ignoreHistory) { - this.setState(newState); - } else { + const newState = { + analyses: response[0].analyses, + analysesLoading: true, + loading: false, + metrics: response[1], + paging: response[0].paging + }; + if (ignoreHistory) { + this.setState(newState); + } else { + this.setState({ + ...newState, + graphLoading: false, + measuresHistory: response[2] + }); + } + + this.loadAllActivities(query.project).then(({ analyses, paging }) => { + if (this.mounted) { this.setState({ - ...newState, - graphLoading: false, - measuresHistory: response[2] + analyses, + analysesLoading: false, + paging }); } - - this.loadAllActivities(query.project).then(({ analyses, paging }) => { - if (this.mounted) { - this.setState({ - analyses, - analysesLoading: false, - paging - }); - } - }); - }, 1000); + }); } }); } diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap index 8cc911548dc..ca571b58091 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap @@ -163,7 +163,7 @@ exports[`should render correctly for random graphs 1`] = ` "translatedName": "metric.bugs.name", } } - translatedName="metric.bugs.name" + translatedName="Bugs" value="Formated.0" /> ({ value: metric.key, - label: metric.custom ? metric.name : translate('metric', metric.key, 'name') + label: getLocalizedMetricName(metric) })); }; -- cgit v1.2.3 From 0c7f9f2bae260585a2bbf8c149f771bdfa7ecd90 Mon Sep 17 00:00:00 2001 From: Grégoire Aubert Date: Tue, 18 Jul 2017 11:01:43 +0200 Subject: SONAR-9403 Display project activity custom graphs on the project dashboard too --- .../js/apps/overview/components/OverviewApp.js | 9 +++--- .../main/js/apps/overview/events/PreviewGraph.js | 36 ++++++++++++++-------- 2 files changed, 28 insertions(+), 17 deletions(-) (limited to 'server/sonar-web/src') diff --git a/server/sonar-web/src/main/js/apps/overview/components/OverviewApp.js b/server/sonar-web/src/main/js/apps/overview/components/OverviewApp.js index ca6094836ef..8ca0ce8f45c 100644 --- a/server/sonar-web/src/main/js/apps/overview/components/OverviewApp.js +++ b/server/sonar-web/src/main/js/apps/overview/components/OverviewApp.js @@ -33,9 +33,9 @@ import { getAllTimeMachineData } from '../../../api/time-machine'; import { enhanceMeasuresWithMetrics } from '../../../helpers/measures'; import { getLeakPeriod } from '../../../helpers/periods'; import { TooltipsContainer } from '../../../components/mixins/tooltips-mixin'; -import { getGraph } from '../../../helpers/storage'; +import { getCustomGraph, getGraph } from '../../../helpers/storage'; import { METRICS, HISTORY_METRICS_LIST } from '../utils'; -import { GRAPHS_METRICS_DISPLAYED } from '../../projectActivity/utils'; +import { getDisplayedHistoryMetrics } from '../../projectActivity/utils'; import type { Component, History, MeasuresList, Period } from '../types'; import '../styles.css'; @@ -101,10 +101,11 @@ export default class OverviewApp extends React.PureComponent { } loadHistory(component: Component) { - let graphMetrics = GRAPHS_METRICS_DISPLAYED[getGraph()]; + let graphMetrics = getDisplayedHistoryMetrics(getGraph(), getCustomGraph()); if (!graphMetrics || graphMetrics.length <= 0) { - graphMetrics = GRAPHS_METRICS_DISPLAYED['overview']; + graphMetrics = getDisplayedHistoryMetrics('overview', []); } + const metrics = uniq(HISTORY_METRICS_LIST.concat(graphMetrics)); return getAllTimeMachineData(component.key, metrics).then(r => { if (this.mounted) { diff --git a/server/sonar-web/src/main/js/apps/overview/events/PreviewGraph.js b/server/sonar-web/src/main/js/apps/overview/events/PreviewGraph.js index 171c6d87975..73eba033873 100644 --- a/server/sonar-web/src/main/js/apps/overview/events/PreviewGraph.js +++ b/server/sonar-web/src/main/js/apps/overview/events/PreviewGraph.js @@ -21,10 +21,10 @@ import React from 'react'; import { minBy } from 'lodash'; import { AutoSizer } from 'react-virtualized'; -import { generateSeries, GRAPHS_METRICS_DISPLAYED } from '../../projectActivity/utils'; -import { getGraph } from '../../../helpers/storage'; import AdvancedTimeline from '../../../components/charts/AdvancedTimeline'; import PreviewGraphTooltips from './PreviewGraphTooltips'; +import { generateSeries, getDisplayedHistoryMetrics } from '../../projectActivity/utils'; +import { getCustomGraph, getGraph } from '../../../helpers/storage'; import { formatMeasure, getShortType } from '../../../helpers/measures'; import type { Serie } from '../../../components/charts/AdvancedTimeline'; import type { History, Metric } from '../types'; @@ -37,6 +37,7 @@ type Props = { }; type State = { + customMetrics: Array, graph: string, metricsType: string, selectedDate: ?Date, @@ -54,12 +55,14 @@ export default class PreviewGraph extends React.PureComponent { constructor(props: Props) { super(props); const graph = getGraph(); - const metricsType = this.getMetricType(props.metrics, graph); + const customMetrics = getCustomGraph(); + const metricsType = this.getMetricType(props.metrics, graph, customMetrics); this.state = { + customMetrics, graph, metricsType, selectedDate: null, - series: this.getSeries(props.history, graph, metricsType), + series: this.getSeries(props.history, graph, customMetrics, metricsType), tooltipIdx: null, tooltipXPos: null }; @@ -68,11 +71,13 @@ export default class PreviewGraph extends React.PureComponent { componentWillReceiveProps(nextProps: Props) { if (nextProps.history !== this.props.history || nextProps.metrics !== this.props.metrics) { const graph = getGraph(); - const metricsType = this.getMetricType(nextProps.metrics, graph); + const customMetrics = getCustomGraph(); + const metricsType = this.getMetricType(nextProps.metrics, graph, customMetrics); this.setState({ + customMetrics, graph, metricsType, - series: this.getSeries(nextProps.history, graph, metricsType) + series: this.getSeries(nextProps.history, graph, customMetrics, metricsType) }); } } @@ -80,20 +85,25 @@ export default class PreviewGraph extends React.PureComponent { formatValue = (tick: number | string) => formatMeasure(tick, getShortType(this.state.metricsType)); - getDisplayedMetrics = (graph: string): Array => { - const metrics: Array = GRAPHS_METRICS_DISPLAYED[graph]; + getDisplayedMetrics = (graph: string, customMetrics: Array): Array => { + const metrics: Array = getDisplayedHistoryMetrics(graph, customMetrics); if (!metrics || metrics.length <= 0) { - return GRAPHS_METRICS_DISPLAYED['overview']; + return getDisplayedHistoryMetrics('overview', customMetrics); } return metrics; }; - getSeries = (history: ?History, graph: string, metricsType: string) => { + getSeries = ( + history: ?History, + graph: string, + customMetrics: Array, + metricsType: string + ) => { const myHistory = history; if (!myHistory) { return []; } - const metrics = this.getDisplayedMetrics(graph); + const metrics = this.getDisplayedMetrics(graph, customMetrics); const firstValid = minBy( metrics.map(metric => myHistory[metric].find(p => p.value || p.value === 0)), 'date' @@ -107,8 +117,8 @@ export default class PreviewGraph extends React.PureComponent { return generateSeries(measureHistory, graph, metricsType, metrics); }; - getMetricType = (metrics: Array, graph: string) => { - const metricKey = this.getDisplayedMetrics(graph)[0]; + getMetricType = (metrics: Array, graph: string, customMetrics: Array) => { + const metricKey = this.getDisplayedMetrics(graph, customMetrics)[0]; const metric = metrics.find(metric => metric.key === metricKey); return metric ? metric.type : 'INT'; }; -- cgit v1.2.3