瀏覽代碼

Rename project activity graph Overview to Issues

tags/6.6-RC1
Grégoire Aubert 7 年之前
父節點
當前提交
544c4c57a4
共有 23 個文件被更改,包括 60 次插入51 次删除
  1. 2
    2
      server/sonar-web/src/main/js/apps/overview/components/OverviewApp.js
  2. 2
    1
      server/sonar-web/src/main/js/apps/overview/events/PreviewGraph.js
  3. 2
    1
      server/sonar-web/src/main/js/apps/overview/events/__tests__/PreviewGraphTooltips-test.js
  4. 6
    6
      server/sonar-web/src/main/js/apps/projectActivity/__tests__/utils-test.js
  5. 4
    3
      server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltips.js
  6. 2
    2
      server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentIssues.js
  7. 2
    1
      server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAppContainer.js
  8. 2
    1
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphHistory-test.js
  9. 2
    1
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsHistory-test.js
  10. 5
    4
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsTooltips-test.js
  11. 5
    5
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsTooltipsContentIssues-test.js
  12. 1
    1
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityAnalysesList-test.js
  13. 1
    1
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityApp-test.js
  14. 2
    1
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityGraphs-test.js
  15. 3
    3
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsHistory-test.js.snap
  16. 4
    4
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap
  17. 2
    2
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentIssues-test.js.snap
  18. 2
    2
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityApp-test.js.snap
  19. 2
    2
      server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityGraphs-test.js.snap
  20. 1
    1
      server/sonar-web/src/main/js/apps/projectActivity/components/projectActivity.css
  21. 6
    5
      server/sonar-web/src/main/js/apps/projectActivity/utils.js
  22. 1
    1
      server/sonar-web/src/main/js/helpers/storage.js
  23. 1
    1
      sonar-core/src/main/resources/org/sonar/l10n/core.properties

+ 2
- 2
server/sonar-web/src/main/js/apps/overview/components/OverviewApp.js 查看文件

import { TooltipsContainer } from '../../../components/mixins/tooltips-mixin'; import { TooltipsContainer } from '../../../components/mixins/tooltips-mixin';
import { getCustomGraph, getGraph } from '../../../helpers/storage'; import { getCustomGraph, getGraph } from '../../../helpers/storage';
import { METRICS, HISTORY_METRICS_LIST } from '../utils'; import { METRICS, HISTORY_METRICS_LIST } from '../utils';
import { getDisplayedHistoryMetrics } from '../../projectActivity/utils';
import { DEFAULT_GRAPH, getDisplayedHistoryMetrics } from '../../projectActivity/utils';
import type { Component, History, MeasuresList, Period } from '../types'; import type { Component, History, MeasuresList, Period } from '../types';
import '../styles.css'; import '../styles.css';


loadHistory(component: Component) { loadHistory(component: Component) {
let graphMetrics = getDisplayedHistoryMetrics(getGraph(), getCustomGraph()); let graphMetrics = getDisplayedHistoryMetrics(getGraph(), getCustomGraph());
if (!graphMetrics || graphMetrics.length <= 0) { if (!graphMetrics || graphMetrics.length <= 0) {
graphMetrics = getDisplayedHistoryMetrics('overview', []);
graphMetrics = getDisplayedHistoryMetrics(DEFAULT_GRAPH, []);
} }


const metrics = uniq(HISTORY_METRICS_LIST.concat(graphMetrics)); const metrics = uniq(HISTORY_METRICS_LIST.concat(graphMetrics));

+ 2
- 1
server/sonar-web/src/main/js/apps/overview/events/PreviewGraph.js 查看文件

import { minBy } from 'lodash'; import { minBy } from 'lodash';
import { AutoSizer } from 'react-virtualized'; import { AutoSizer } from 'react-virtualized';
import { import {
DEFAULT_GRAPH,
getDisplayedHistoryMetrics, getDisplayedHistoryMetrics,
generateSeries, generateSeries,
getSeriesMetricType, getSeriesMetricType,
getDisplayedMetrics = (graph: string, customMetrics: Array<string>): Array<string> => { getDisplayedMetrics = (graph: string, customMetrics: Array<string>): Array<string> => {
const metrics: Array<string> = getDisplayedHistoryMetrics(graph, customMetrics); const metrics: Array<string> = getDisplayedHistoryMetrics(graph, customMetrics);
if (!metrics || metrics.length <= 0) { if (!metrics || metrics.length <= 0) {
return getDisplayedHistoryMetrics('overview', customMetrics);
return getDisplayedHistoryMetrics(DEFAULT_GRAPH, customMetrics);
} }
return metrics; return metrics;
}; };

+ 2
- 1
server/sonar-web/src/main/js/apps/overview/events/__tests__/PreviewGraphTooltips-test.js 查看文件

import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import PreviewGraphTooltips from '../PreviewGraphTooltips'; import PreviewGraphTooltips from '../PreviewGraphTooltips';
import { DEFAULT_GRAPH } from '../../../projectActivity/utils';


const SERIES_OVERVIEW = [ const SERIES_OVERVIEW = [
{ {


const DEFAULT_PROPS = { const DEFAULT_PROPS = {
formatValue: val => 'Formated.' + val, formatValue: val => 'Formated.' + val,
graph: 'overview',
graph: DEFAULT_GRAPH,
graphWidth: 150, graphWidth: 150,
metrics: METRICS, metrics: METRICS,
selectedDate: new Date('2011-10-01T22:01:00.000Z'), selectedDate: new Date('2011-10-01T22:01:00.000Z'),

+ 6
- 6
server/sonar-web/src/main/js/apps/projectActivity/__tests__/utils-test.js 查看文件

const QUERY = { const QUERY = {
category: '', category: '',
from: new Date('2017-04-27T08:21:32+0200'), from: new Date('2017-04-27T08:21:32+0200'),
graph: 'overview',
graph: utils.DEFAULT_GRAPH,
project: 'foo', project: 'foo',
to: undefined, to: undefined,
selectedDate: undefined, selectedDate: undefined,
utils.getAnalysesByVersionByDay(ANALYSES, { utils.getAnalysesByVersionByDay(ANALYSES, {
category: '', category: '',
customMetrics: [], customMetrics: [],
graph: 'overview',
graph: utils.DEFAULT_GRAPH,
project: 'foo' project: 'foo'
}) })
).toMatchSnapshot(); ).toMatchSnapshot();
utils.getAnalysesByVersionByDay(ANALYSES, { utils.getAnalysesByVersionByDay(ANALYSES, {
category: 'QUALITY_PROFILE', category: 'QUALITY_PROFILE',
customMetrics: [], customMetrics: [],
graph: 'overview',
graph: utils.DEFAULT_GRAPH,
project: 'foo' project: 'foo'
}) })
).toMatchSnapshot(); ).toMatchSnapshot();
utils.getAnalysesByVersionByDay(ANALYSES, { utils.getAnalysesByVersionByDay(ANALYSES, {
category: '', category: '',
customMetrics: [], customMetrics: [],
graph: 'overview',
graph: utils.DEFAULT_GRAPH,
project: 'foo', project: 'foo',
to: new Date('2017-06-09T11:12:27+0200'), to: new Date('2017-06-09T11:12:27+0200'),
from: new Date('2017-05-18T14:13:07+0200') from: new Date('2017-05-18T14:13:07+0200')
describe('getDisplayedHistoryMetrics', () => { describe('getDisplayedHistoryMetrics', () => {
const customMetrics = ['foo', 'bar']; const customMetrics = ['foo', 'bar'];
it('should return only displayed metrics on the graph', () => { it('should return only displayed metrics on the graph', () => {
expect(utils.getDisplayedHistoryMetrics('overview', [])).toEqual([
expect(utils.getDisplayedHistoryMetrics(utils.DEFAULT_GRAPH, [])).toEqual([
'bugs', 'bugs',
'code_smells', 'code_smells',
'vulnerabilities' 'vulnerabilities'
describe('getHistoryMetrics', () => { describe('getHistoryMetrics', () => {
const customMetrics = ['foo', 'bar']; const customMetrics = ['foo', 'bar'];
it('should return all metrics', () => { it('should return all metrics', () => {
expect(utils.getHistoryMetrics('overview', [])).toEqual([
expect(utils.getHistoryMetrics(utils.DEFAULT_GRAPH, [])).toEqual([
'bugs', 'bugs',
'code_smells', 'code_smells',
'vulnerabilities', 'vulnerabilities',

+ 4
- 3
server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltips.js 查看文件

import GraphsTooltipsContentEvents from './GraphsTooltipsContentEvents'; import GraphsTooltipsContentEvents from './GraphsTooltipsContentEvents';
import GraphsTooltipsContentCoverage from './GraphsTooltipsContentCoverage'; import GraphsTooltipsContentCoverage from './GraphsTooltipsContentCoverage';
import GraphsTooltipsContentDuplication from './GraphsTooltipsContentDuplication'; import GraphsTooltipsContentDuplication from './GraphsTooltipsContentDuplication';
import GraphsTooltipsContentOverview from './GraphsTooltipsContentOverview';
import GraphsTooltipsContentIssues from './GraphsTooltipsContentIssues';
import { DEFAULT_GRAPH } from '../utils';
import type { Event, MeasureHistory } from '../types'; import type { Event, MeasureHistory } from '../types';
import type { Serie } from '../../../components/charts/AdvancedTimeline'; import type { Serie } from '../../../components/charts/AdvancedTimeline';


if (!point || (!point.y && point.y !== 0)) { if (!point || (!point.y && point.y !== 0)) {
return null; return null;
} }
if (this.props.graph === 'overview') {
if (this.props.graph === DEFAULT_GRAPH) {
return ( return (
<GraphsTooltipsContentOverview
<GraphsTooltipsContentIssues
key={serie.name} key={serie.name}
measuresHistory={measuresHistory} measuresHistory={measuresHistory}
name={serie.name} name={serie.name}

server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentOverview.js → server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentIssues.js 查看文件

code_smells: 'sqale_rating' code_smells: 'sqale_rating'
}; };


export default function GraphsTooltipsContentOverview(props: Props) {
export default function GraphsTooltipsContentIssues(props: Props) {
const rating = props.measuresHistory.find( const rating = props.measuresHistory.find(
measure => measure.metric === METRIC_RATING[props.name] measure => measure.metric === METRIC_RATING[props.name]
); );
} }
const ratingValue = rating.history[props.tooltipIdx].value; const ratingValue = rating.history[props.tooltipIdx].value;
return ( return (
<tr key={props.name} className="project-activity-graph-tooltip-overview-line">
<tr key={props.name} className="project-activity-graph-tooltip-issues-line">
<td className="thin"> <td className="thin">
<ChartLegendIcon <ChartLegendIcon
className={classNames( className={classNames(

+ 2
- 1
server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAppContainer.js 查看文件

import { getCustomGraph, getGraph } from '../../../helpers/storage'; import { getCustomGraph, getGraph } from '../../../helpers/storage';
import { import {
customMetricsChanged, customMetricsChanged,
DEFAULT_GRAPH,
getHistoryMetrics, getHistoryMetrics,
isCustomGraph, isCustomGraph,
parseQuery, parseQuery,


// if there is no filter, but there are saved preferences in the localStorage // if there is no filter, but there are saved preferences in the localStorage
const graph = getGraph(); const graph = getGraph();
return !filtered && graph != null && graph !== 'overview';
return !filtered && graph != null && graph !== DEFAULT_GRAPH;
} }
}; };



+ 2
- 1
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphHistory-test.js 查看文件

import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import GraphHistory from '../GraphHistory'; import GraphHistory from '../GraphHistory';
import { DEFAULT_GRAPH } from '../../utils';


const SERIES = [ const SERIES = [
{ {


const DEFAULT_PROPS = { const DEFAULT_PROPS = {
events: [], events: [],
graph: 'overview',
graph: DEFAULT_GRAPH,
graphEndDate: null, graphEndDate: null,
graphStartDate: null, graphStartDate: null,
leakPeriodDate: '2017-05-16T13:50:02+0200', leakPeriodDate: '2017-05-16T13:50:02+0200',

+ 2
- 1
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsHistory-test.js 查看文件

import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import GraphsHistory from '../GraphsHistory'; import GraphsHistory from '../GraphsHistory';
import { DEFAULT_GRAPH } from '../../utils';


const ANALYSES = [ const ANALYSES = [
{ {
const DEFAULT_PROPS = { const DEFAULT_PROPS = {
analyses: ANALYSES, analyses: ANALYSES,
eventFilter: '', eventFilter: '',
graph: 'overview',
graph: DEFAULT_GRAPH,
graphs: [SERIES], graphs: [SERIES],
graphEndDate: null, graphEndDate: null,
graphStartDate: null, graphStartDate: null,

+ 5
- 4
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsTooltips-test.js 查看文件

import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import GraphsTooltips from '../GraphsTooltips'; import GraphsTooltips from '../GraphsTooltips';
import { DEFAULT_GRAPH } from '../../utils';


const SERIES_OVERVIEW = [
const SERIES_ISSUES = [
{ {
name: 'bugs', name: 'bugs',
translatedName: 'Bugs', translatedName: 'Bugs',


const DEFAULT_PROPS = { const DEFAULT_PROPS = {
formatValue: val => 'Formated.' + val, formatValue: val => 'Formated.' + val,
graph: 'overview',
graph: DEFAULT_GRAPH,
graphWidth: 500, graphWidth: 500,
measuresHistory: [], measuresHistory: [],
selectedDate: new Date('2011-10-01T22:01:00.000Z'), selectedDate: new Date('2011-10-01T22:01:00.000Z'),
series: SERIES_OVERVIEW,
series: SERIES_ISSUES,
tooltipIdx: 0, tooltipIdx: 0,
tooltipPos: 666 tooltipPos: 666
}; };


it('should render correctly for overview graphs', () => {
it('should render correctly for issues graphs', () => {
expect(shallow(<GraphsTooltips {...DEFAULT_PROPS} />)).toMatchSnapshot(); expect(shallow(<GraphsTooltips {...DEFAULT_PROPS} />)).toMatchSnapshot();
}); });



server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsTooltipsContentOverview-test.js → server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsTooltipsContentIssues-test.js 查看文件

*/ */
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import GraphsTooltipsContentOverview from '../GraphsTooltipsContentOverview';
import GraphsTooltipsContentIssues from '../GraphsTooltipsContentIssues';


const MEASURES_OVERVIEW = [
const MEASURES_ISSUES = [
{ {
metric: 'bugs', metric: 'bugs',
history: [ history: [
]; ];


const DEFAULT_PROPS = { const DEFAULT_PROPS = {
measuresHistory: MEASURES_OVERVIEW,
measuresHistory: MEASURES_ISSUES,
name: 'bugs', name: 'bugs',
style: '2', style: '2',
tooltipIdx: 1, tooltipIdx: 1,
}; };


it('should render correctly', () => { it('should render correctly', () => {
expect(shallow(<GraphsTooltipsContentOverview {...DEFAULT_PROPS} />)).toMatchSnapshot();
expect(shallow(<GraphsTooltipsContentIssues {...DEFAULT_PROPS} />)).toMatchSnapshot();
}); });


it('should render correctly when rating data is missing', () => { it('should render correctly when rating data is missing', () => {
expect( expect(
shallow(<GraphsTooltipsContentOverview {...DEFAULT_PROPS} tooltipIdx={0} value="500" />)
shallow(<GraphsTooltipsContentIssues {...DEFAULT_PROPS} tooltipIdx={0} value="500" />)
).toMatchSnapshot(); ).toMatchSnapshot();
}); });

+ 1
- 1
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityAnalysesList-test.js 查看文件

deleteAnalysis: () => {}, deleteAnalysis: () => {},
deleteEvent: () => {}, deleteEvent: () => {},
loading: false, loading: false,
query: { category: '', graph: 'overview', project: 'org.sonarsource.sonarqube:sonarqube' },
query: { category: '', graph: 'issues', project: 'org.sonarsource.sonarqube:sonarqube' },
updateQuery: () => {} updateQuery: () => {}
}; };



+ 1
- 1
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityApp-test.js 查看文件

] ]
} }
], ],
query: { category: '', graph: 'overview', project: 'org.sonarsource.sonarqube:sonarqube' },
query: { category: '', graph: 'issues', project: 'org.sonarsource.sonarqube:sonarqube' },
updateQuery: () => {} updateQuery: () => {}
}; };



+ 2
- 1
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityGraphs-test.js 查看文件

import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import ProjectActivityGraphs from '../ProjectActivityGraphs'; import ProjectActivityGraphs from '../ProjectActivityGraphs';
import { DEFAULT_GRAPH } from '../../utils';


const ANALYSES = [ const ANALYSES = [
{ {
} }
], ],
metrics: METRICS, metrics: METRICS,
query: { category: '', graph: 'overview', project: 'org.sonarsource.sonarqube:sonarqube' },
query: { category: '', graph: DEFAULT_GRAPH, project: 'org.sonarsource.sonarqube:sonarqube' },
updateQuery: () => {} updateQuery: () => {}
}; };



+ 3
- 3
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsHistory-test.js.snap 查看文件

> >
<GraphHistory <GraphHistory
events={Array []} events={Array []}
graph="overview"
graph="issues"
graphEndDate={null} graphEndDate={null}
graphStartDate={null} graphStartDate={null}
isCustom={false} isCustom={false}
> >
<GraphHistory <GraphHistory
events={Array []} events={Array []}
graph="overview"
graph="issues"
graphEndDate={null} graphEndDate={null}
graphStartDate={null} graphStartDate={null}
isCustom={false} isCustom={false}
/> />
<GraphHistory <GraphHistory
events={Array []} events={Array []}
graph="overview"
graph="issues"
graphEndDate={null} graphEndDate={null}
graphStartDate={null} graphStartDate={null}
isCustom={false} isCustom={false}

+ 4
- 4
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap 查看文件

// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP


exports[`should render correctly for overview graphs 1`] = `
exports[`should render correctly for issues graphs 1`] = `
<BubblePopup <BubblePopup
customClass="bubble-popup-right" customClass="bubble-popup-right"
position={ position={
className="width-100" className="width-100"
> >
<tbody> <tbody>
<GraphsTooltipsContentOverview
<GraphsTooltipsContentIssues
measuresHistory={Array []} measuresHistory={Array []}
name="bugs" name="bugs"
style="0" style="0"
translatedName="Bugs" translatedName="Bugs"
value="Formated.3" value="Formated.3"
/> />
<GraphsTooltipsContentOverview
<GraphsTooltipsContentIssues
measuresHistory={Array []} measuresHistory={Array []}
name="code_smells" name="code_smells"
style="1" style="1"
translatedName="Code Smells" translatedName="Code Smells"
value="Formated.18" value="Formated.18"
/> />
<GraphsTooltipsContentOverview
<GraphsTooltipsContentIssues
measuresHistory={Array []} measuresHistory={Array []}
name="vulnerabilities" name="vulnerabilities"
style="2" style="2"

server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentOverview-test.js.snap → server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentIssues-test.js.snap 查看文件



exports[`should render correctly 1`] = ` exports[`should render correctly 1`] = `
<tr <tr
className="project-activity-graph-tooltip-overview-line"
className="project-activity-graph-tooltip-issues-line"
> >
<td <td
className="thin" className="thin"


exports[`should render correctly when rating data is missing 1`] = ` exports[`should render correctly when rating data is missing 1`] = `
<tr <tr
className="project-activity-graph-tooltip-overview-line"
className="project-activity-graph-tooltip-issues-line"
> >
<td <td
className="thin" className="thin"

+ 2
- 2
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityApp-test.js.snap 查看文件

query={ query={
Object { Object {
"category": "", "category": "",
"graph": "overview",
"graph": "issues",
"project": "org.sonarsource.sonarqube:sonarqube", "project": "org.sonarsource.sonarqube:sonarqube",
} }
} }
query={ query={
Object { Object {
"category": "", "category": "",
"graph": "overview",
"graph": "issues",
"project": "org.sonarsource.sonarqube:sonarqube", "project": "org.sonarsource.sonarqube:sonarqube",
} }
} }

+ 2
- 2
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityGraphs-test.js.snap 查看文件

> >
<ProjectActivityGraphsHeader <ProjectActivityGraphsHeader
addCustomMetric={[Function]} addCustomMetric={[Function]}
graph="overview"
graph="issues"
metrics={ metrics={
Array [ Array [
Object { Object {
] ]
} }
eventFilter="" eventFilter=""
graph="overview"
graph="issues"
graphEndDate={null} graphEndDate={null}
graphStartDate={null} graphStartDate={null}
graphs={ graphs={

+ 1
- 1
server/sonar-web/src/main/js/apps/projectActivity/components/projectActivity.css 查看文件

margin-top: 1px; margin-top: 1px;
} }


.project-activity-graph-tooltip-overview-line {
.project-activity-graph-tooltip-issues-line {
height: 26px; height: 26px;
padding-bottom: 4px; padding-bottom: 4px;
} }

+ 6
- 5
server/sonar-web/src/main/js/apps/projectActivity/utils.js 查看文件

import type { Serie } from '../../components/charts/AdvancedTimeline'; import type { Serie } from '../../components/charts/AdvancedTimeline';


export const EVENT_TYPES = ['VERSION', 'QUALITY_GATE', 'QUALITY_PROFILE', 'OTHER']; export const EVENT_TYPES = ['VERSION', 'QUALITY_GATE', 'QUALITY_PROFILE', 'OTHER'];
export const GRAPH_TYPES = ['overview', 'coverage', 'duplications', 'custom'];
export const DEFAULT_GRAPH = 'issues';
export const GRAPH_TYPES = ['issues', 'coverage', 'duplications', 'custom'];
export const GRAPHS_METRICS_DISPLAYED = { export const GRAPHS_METRICS_DISPLAYED = {
overview: ['bugs', 'code_smells', 'vulnerabilities'],
issues: ['bugs', 'code_smells', 'vulnerabilities'],
coverage: ['uncovered_lines', 'lines_to_cover'], coverage: ['uncovered_lines', 'lines_to_cover'],
duplications: ['duplicated_lines', 'ncloc'] duplications: ['duplicated_lines', 'ncloc']
}; };
export const GRAPHS_METRICS = { export const GRAPHS_METRICS = {
overview: GRAPHS_METRICS_DISPLAYED['overview'].concat([
issues: GRAPHS_METRICS_DISPLAYED['issues'].concat([
'reliability_rating', 'reliability_rating',
'security_rating', 'security_rating',
'sqale_rating' 'sqale_rating'


const parseGraph = (value?: string): string => { const parseGraph = (value?: string): string => {
const graph = parseAsString(value); const graph = parseAsString(value);
return GRAPH_TYPES.includes(graph) ? graph : 'overview';
return GRAPH_TYPES.includes(graph) ? graph : DEFAULT_GRAPH;
}; };


const serializeGraph = (value: string): ?string => (value === 'overview' ? undefined : value);
const serializeGraph = (value: string): ?string => (value === DEFAULT_GRAPH ? undefined : value);


export const parseQuery = (urlQuery: RawQuery): Query => ({ export const parseQuery = (urlQuery: RawQuery): Query => ({
category: parseAsString(urlQuery['category']), category: parseAsString(urlQuery['category']),

+ 1
- 1
server/sonar-web/src/main/js/helpers/storage.js 查看文件



export const saveGraph = (graph: ?string) => save(PROJECT_ACTIVITY_GRAPH, graph); export const saveGraph = (graph: ?string) => save(PROJECT_ACTIVITY_GRAPH, graph);
export const getGraph = (): string => export const getGraph = (): string =>
window.localStorage.getItem(PROJECT_ACTIVITY_GRAPH) || 'overview';
window.localStorage.getItem(PROJECT_ACTIVITY_GRAPH) || 'issues';

+ 1
- 1
sonar-core/src/main/resources/org/sonar/l10n/core.properties 查看文件

project_activity.delete_analysis.question=Are you sure you want to delete this analysis from the project history? project_activity.delete_analysis.question=Are you sure you want to delete this analysis from the project history?
project_activity.filter_events=Filter events project_activity.filter_events=Filter events


project_activity.graphs.overview=Overview
project_activity.graphs.issues=Issues
project_activity.graphs.coverage=Coverage project_activity.graphs.coverage=Coverage
project_activity.graphs.duplications=Duplications project_activity.graphs.duplications=Duplications
project_activity.graphs.custom=Custom project_activity.graphs.custom=Custom

Loading…
取消
儲存