Ver código fonte

SONAR-10983 Drop the "Effort" display mode on the Issues page (#487)

tags/7.5
Stas Vilchik 6 anos atrás
pai
commit
95f2e757b8
24 arquivos alterados com 24 adições e 163 exclusões
  1. 0
    7
      server/sonar-web/src/main/js/api/issues.ts
  2. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/AssigneeFacet.tsx
  3. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/AuthorFacet.tsx
  4. 1
    3
      server/sonar-web/src/main/js/apps/issues/sidebar/CreationDateFacet.tsx
  5. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx
  6. 0
    63
      server/sonar-web/src/main/js/apps/issues/sidebar/FacetMode.tsx
  7. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx
  8. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacet.tsx
  9. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/ModuleFacet.tsx
  10. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx
  11. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/ResolutionFacet.tsx
  12. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx
  13. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/SeverityFacet.tsx
  14. 0
    16
      server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx
  15. 1
    1
      server/sonar-web/src/main/js/apps/issues/sidebar/StandardFacet.tsx
  16. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/StatusFacet.tsx
  17. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx
  18. 1
    2
      server/sonar-web/src/main/js/apps/issues/sidebar/TypeFacet.tsx
  19. 0
    1
      server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/AssigneeFacet-test.tsx
  20. 0
    6
      server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/Sidebar-test.tsx.snap
  21. 2
    6
      server/sonar-web/src/main/js/apps/issues/utils.ts
  22. 7
    21
      server/sonar-web/src/main/js/apps/overview/main/CodeSmells.tsx
  23. 0
    9
      server/sonar-web/src/main/js/helpers/__tests__/query-test.ts
  24. 0
    4
      server/sonar-web/src/main/js/helpers/query.ts

+ 0
- 7
server/sonar-web/src/main/js/api/issues.ts Ver arquivo

@@ -108,13 +108,6 @@ export function getProjects(query: RequestData) {
return getFacet(query, 'projectUuids').then(r => extractProjects(r.facet, r.response));
}

export function getIssuesCount(query: RequestData): Promise<any> {
const data = { ...query, ps: 1, facetMode: 'effort' };
return searchIssues(data).then(r => {
return { issues: r.paging.total, debt: r.debtTotal };
});
}

export function searchIssueTags(
data: { organization?: string; ps?: number; q?: string } = { ps: 100 }
): Promise<string[]> {

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/AssigneeFacet.tsx Ver arquivo

@@ -33,7 +33,6 @@ export interface Props {
assigned: boolean;
assignees: string[];
component: Component | undefined;
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -168,7 +167,7 @@ export default class AssigneeFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.getAssigneeName(assignee)}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(assignee), this.props.facetMode)}
stat={formatFacetStat(this.getStat(assignee))}
tooltip={this.props.assignees.length === 1 && !this.isAssigneeActive(assignee)}
value={assignee}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/AuthorFacet.tsx Ver arquivo

@@ -27,7 +27,6 @@ import FacetItemsList from '../../../components/facet/FacetItemsList';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -88,7 +87,7 @@ export default class AuthorFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={author}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(author), this.props.facetMode)}
stat={formatFacetStat(this.getStat(author))}
tooltip={this.props.authors.length === 1 && !this.props.authors.includes(author)}
value={author}
/>

+ 1
- 3
server/sonar-web/src/main/js/apps/issues/sidebar/CreationDateFacet.tsx Ver arquivo

@@ -40,7 +40,6 @@ interface Props {
createdAt: string;
createdBefore: Date | undefined;
createdInLast: string;
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -180,8 +179,7 @@ export default class CreationDateFacet extends React.PureComponent<Props> {
const width = barsWidth * data.length - 1 + 10;

const maxValue = max(data.map(d => d.y));
const format = this.props.facetMode === 'count' ? 'SHORT_INT' : 'SHORT_WORK_DUR';
const xValues = data.map(d => (d.y === maxValue ? formatMeasure(maxValue, format) : ''));
const xValues = data.map(d => (d.y === maxValue ? formatMeasure(maxValue, 'SHORT_INT') : ''));

return (
<BarChart

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx Ver arquivo

@@ -30,7 +30,6 @@ import { collapsePath } from '../../../helpers/path';

interface Props {
directories: string[];
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -103,7 +102,7 @@ export default class DirectoryFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.renderName(directory)}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(directory), this.props.facetMode)}
stat={formatFacetStat(this.getStat(directory))}
tooltip={
this.props.directories.length === 1 && !this.props.directories.includes(directory)
}

+ 0
- 63
server/sonar-web/src/main/js/apps/issues/sidebar/FacetMode.tsx Ver arquivo

@@ -1,63 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2018 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 * as React from 'react';
import { Query } from '../utils';
import FacetBox from '../../../components/facet/FacetBox';
import FacetHeader from '../../../components/facet/FacetHeader';
import FacetItem from '../../../components/facet/FacetItem';
import FacetItemsList from '../../../components/facet/FacetItemsList';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
onChange: (changes: Partial<Query>) => void;
}

export default class FacetMode extends React.PureComponent<Props> {
property = 'facetMode';

handleItemClick = (itemValue: string) => {
this.props.onChange({ [this.property]: itemValue });
};

render() {
const { facetMode } = this.props;
const modes = ['count', 'effort'];

return (
<FacetBox property={this.property}>
<FacetHeader name={translate('issues.facet.mode')} open={false} />

<FacetItemsList>
{modes.map(mode => (
<FacetItem
active={facetMode === mode}
halfWidth={true}
key={mode}
name={translate('issues.facet.mode', mode)}
onClick={this.handleItemClick}
value={mode}
/>
))}
</FacetItemsList>
</FacetBox>
);
}
}

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx Ver arquivo

@@ -29,7 +29,6 @@ import { translate } from '../../../helpers/l10n';
import { collapsePath } from '../../../helpers/path';

interface Props {
facetMode: string;
files: string[];
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
@@ -106,7 +105,7 @@ export default class FileFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.renderName(file)}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(file), this.props.facetMode)}
stat={formatFacetStat(this.getStat(file))}
tooltip={this.props.files.length === 1 && !this.props.files.includes(file)}
value={file}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacet.tsx Ver arquivo

@@ -28,7 +28,6 @@ import FacetItemsList from '../../../components/facet/FacetItemsList';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
languages: string[];
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
@@ -100,7 +99,7 @@ export default class LanguageFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.getLanguageName(language)}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(language), this.props.facetMode)}
stat={formatFacetStat(this.getStat(language))}
tooltip={this.props.languages.length === 1 && !this.props.languages.includes(language)}
value={language}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/ModuleFacet.tsx Ver arquivo

@@ -28,7 +28,6 @@ import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
loading?: boolean;
modules: string[];
onChange: (changes: Partial<Query>) => void;
@@ -104,7 +103,7 @@ export default class ModuleFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.renderName(module)}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(module), this.props.facetMode)}
stat={formatFacetStat(this.getStat(module))}
tooltip={this.props.modules.length === 1 && !this.props.modules.includes(module)}
value={module}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx Ver arquivo

@@ -33,7 +33,6 @@ import { translate } from '../../../helpers/l10n';

interface Props {
component: Component | undefined;
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -158,7 +157,7 @@ export default class ProjectFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.renderName(project)}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(project), this.props.facetMode)}
stat={formatFacetStat(this.getStat(project))}
tooltip={this.props.projects.length === 1 && !this.props.projects.includes(project)}
value={project}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/ResolutionFacet.tsx Ver arquivo

@@ -27,7 +27,6 @@ import FacetItemsList from '../../../components/facet/FacetItemsList';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -99,7 +98,7 @@ export default class ResolutionFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.getFacetItemName(resolution)}
onClick={this.handleItemClick}
stat={formatFacetStat(stat, this.props.facetMode)}
stat={formatFacetStat(stat)}
tooltip={
this.props.resolutions.length === 1 &&
resolution !== '' &&

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx Ver arquivo

@@ -29,7 +29,6 @@ import FacetFooter from '../../../components/facet/FacetFooter';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
languages: string[];
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
@@ -116,7 +115,7 @@ export default class RuleFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.getRuleName(rule)}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(rule), this.props.facetMode)}
stat={formatFacetStat(this.getStat(rule))}
tooltip={this.props.rules.length === 1 && !this.props.rules.includes(rule)}
value={rule}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/SeverityFacet.tsx Ver arquivo

@@ -28,7 +28,6 @@ import SeverityHelper from '../../../components/shared/SeverityHelper';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -84,7 +83,7 @@ export default class SeverityFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={<SeverityHelper severity={severity} />}
onClick={this.handleItemClick}
stat={formatFacetStat(stat, this.props.facetMode)}
stat={formatFacetStat(stat)}
tooltip={this.props.severities.length === 1 && !this.props.severities.includes(severity)}
value={severity}
/>

+ 0
- 16
server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx Ver arquivo

@@ -22,7 +22,6 @@ import AssigneeFacet from './AssigneeFacet';
import AuthorFacet from './AuthorFacet';
import CreationDateFacet from './CreationDateFacet';
import DirectoryFacet from './DirectoryFacet';
import FacetMode from './FacetMode';
import FileFacet from './FileFacet';
import LanguageFacet from './LanguageFacet';
import ModuleFacet from './ModuleFacet';
@@ -77,9 +76,7 @@ export default class Sidebar extends React.PureComponent<Props> {

return (
<div className="search-navigator-facets-list">
<FacetMode facetMode={query.facetMode} onChange={this.props.onFilterChange} />
<TypeFacet
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -88,7 +85,6 @@ export default class Sidebar extends React.PureComponent<Props> {
types={query.types}
/>
<SeverityFacet
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -97,7 +93,6 @@ export default class Sidebar extends React.PureComponent<Props> {
stats={facets.severities}
/>
<ResolutionFacet
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -107,7 +102,6 @@ export default class Sidebar extends React.PureComponent<Props> {
stats={facets.resolutions}
/>
<StatusFacet
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -121,7 +115,6 @@ export default class Sidebar extends React.PureComponent<Props> {
createdAt={query.createdAt}
createdBefore={query.createdBefore}
createdInLast={query.createdInLast}
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -130,7 +123,6 @@ export default class Sidebar extends React.PureComponent<Props> {
stats={facets.createdAt}
/>
<LanguageFacet
facetMode={query.facetMode}
languages={query.languages}
loading={this.props.loading}
onChange={this.props.onFilterChange}
@@ -140,7 +132,6 @@ export default class Sidebar extends React.PureComponent<Props> {
stats={facets.languages}
/>
<RuleFacet
facetMode={query.facetMode}
languages={query.languages}
loading={this.props.loading}
onChange={this.props.onFilterChange}
@@ -168,7 +159,6 @@ export default class Sidebar extends React.PureComponent<Props> {
/>
<TagFacet
component={component}
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -180,7 +170,6 @@ export default class Sidebar extends React.PureComponent<Props> {
{displayProjectsFacet && (
<ProjectFacet
component={component}
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -193,7 +182,6 @@ export default class Sidebar extends React.PureComponent<Props> {
)}
{displayModulesFacet && (
<ModuleFacet
facetMode={query.facetMode}
loading={this.props.loading}
modules={query.modules}
onChange={this.props.onFilterChange}
@@ -206,7 +194,6 @@ export default class Sidebar extends React.PureComponent<Props> {
{displayDirectoriesFacet && (
<DirectoryFacet
directories={query.directories}
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -217,7 +204,6 @@ export default class Sidebar extends React.PureComponent<Props> {
)}
{displayFilesFacet && (
<FileFacet
facetMode={query.facetMode}
files={query.files}
loading={this.props.loading}
onChange={this.props.onFilterChange}
@@ -232,7 +218,6 @@ export default class Sidebar extends React.PureComponent<Props> {
assigned={query.assigned}
assignees={query.assignees}
component={component}
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}
@@ -245,7 +230,6 @@ export default class Sidebar extends React.PureComponent<Props> {
{displayAuthorFacet && (
<AuthorFacet
authors={query.authors}
facetMode={query.facetMode}
loading={this.props.loading}
onChange={this.props.onFilterChange}
onToggle={this.props.onFacetToggle}

+ 1
- 1
server/sonar-web/src/main/js/apps/issues/sidebar/StandardFacet.tsx Ver arquivo

@@ -204,7 +204,7 @@ export default class StandardFacet extends React.PureComponent<Props, State> {
loading={this.props.loading}
name={renderName(category)}
onClick={onClick}
stat={formatFacetStat(getStat(category), '')}
stat={formatFacetStat(getStat(category))}
tooltip={values.length === 1 && !values.includes(category)}
value={category}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/StatusFacet.tsx Ver arquivo

@@ -28,7 +28,6 @@ import StatusHelper from '../../../components/shared/StatusHelper';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -84,7 +83,7 @@ export default class StatusFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={<StatusHelper resolution={undefined} status={status} />}
onClick={this.handleItemClick}
stat={formatFacetStat(stat, this.props.facetMode)}
stat={formatFacetStat(stat)}
tooltip={this.props.statuses.length === 1 && !this.props.statuses.includes(status)}
value={status}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx Ver arquivo

@@ -33,7 +33,6 @@ import { translate } from '../../../helpers/l10n';

interface Props {
component: Component | undefined;
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -116,7 +115,7 @@ export default class TagFacet extends React.PureComponent<Props> {
loading={this.props.loading}
name={this.renderTag(tag)}
onClick={this.handleItemClick}
stat={formatFacetStat(this.getStat(tag), this.props.facetMode)}
stat={formatFacetStat(this.getStat(tag))}
tooltip={this.props.tags.length === 1 && !this.props.tags.includes(tag)}
value={tag}
/>

+ 1
- 2
server/sonar-web/src/main/js/apps/issues/sidebar/TypeFacet.tsx Ver arquivo

@@ -28,7 +28,6 @@ import IssueTypeIcon from '../../../components/ui/IssueTypeIcon';
import { translate } from '../../../helpers/l10n';

interface Props {
facetMode: string;
loading?: boolean;
onChange: (changes: Partial<Query>) => void;
onToggle: (property: string) => void;
@@ -87,7 +86,7 @@ export default class TypeFacet extends React.PureComponent<Props> {
</span>
}
onClick={this.handleItemClick}
stat={formatFacetStat(stat, this.props.facetMode)}
stat={formatFacetStat(stat)}
tooltip={this.props.types.length === 1 && !this.props.types.includes(type)}
value={type}
/>

+ 0
- 1
server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/AssigneeFacet-test.tsx Ver arquivo

@@ -29,7 +29,6 @@ const renderAssigneeFacet = (props?: Partial<Props>) =>
assigned={true}
assignees={[]}
component={undefined}
facetMode="count"
onChange={jest.fn()}
onToggle={jest.fn()}
open={true}

+ 0
- 6
server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/Sidebar-test.tsx.snap Ver arquivo

@@ -2,7 +2,6 @@

exports[`should render facets for developer 1`] = `
Array [
"FacetMode",
"TypeFacet",
"SeverityFacet",
"ResolutionFacet",
@@ -22,7 +21,6 @@ Array [

exports[`should render facets for directory 1`] = `
Array [
"FacetMode",
"TypeFacet",
"SeverityFacet",
"ResolutionFacet",
@@ -40,7 +38,6 @@ Array [

exports[`should render facets for global page 1`] = `
Array [
"FacetMode",
"TypeFacet",
"SeverityFacet",
"ResolutionFacet",
@@ -58,7 +55,6 @@ Array [

exports[`should render facets for module 1`] = `
Array [
"FacetMode",
"TypeFacet",
"SeverityFacet",
"ResolutionFacet",
@@ -78,7 +74,6 @@ Array [

exports[`should render facets for project 1`] = `
Array [
"FacetMode",
"TypeFacet",
"SeverityFacet",
"ResolutionFacet",
@@ -98,7 +93,6 @@ Array [

exports[`should render facets when my issues are selected 1`] = `
Array [
"FacetMode",
"TypeFacet",
"SeverityFacet",
"ResolutionFacet",

+ 2
- 6
server/sonar-web/src/main/js/apps/issues/utils.ts Ver arquivo

@@ -26,7 +26,6 @@ import {
queriesEqual,
cleanQuery,
parseAsBoolean,
parseAsFacetMode,
parseAsArray,
parseAsString,
serializeString,
@@ -46,7 +45,6 @@ export interface Query {
createdInLast: string;
cwe: string[];
directories: string[];
facetMode: string;
files: string[];
issues: string[];
languages: string[];
@@ -82,7 +80,6 @@ export function parseQuery(query: RawQuery): Query {
createdInLast: parseAsString(query.createdInLast),
cwe: parseAsArray(query.cwe, parseAsString),
directories: parseAsArray(query.directories, parseAsString),
facetMode: parseAsFacetMode(query.facetMode),
files: parseAsArray(query.fileUuids, parseAsString),
issues: parseAsArray(query.issues, parseAsString),
languages: parseAsArray(query.languages, parseAsString),
@@ -119,7 +116,6 @@ export function serializeQuery(query: Query): RawQuery {
createdInLast: serializeString(query.createdInLast),
cwe: serializeStringArray(query.cwe),
directories: serializeStringArray(query.directories),
facetMode: query.facetMode === 'effort' ? serializeString(query.facetMode) : undefined,
fileUuids: serializeStringArray(query.files),
issues: serializeStringArray(query.issues),
languages: serializeStringArray(query.languages),
@@ -181,8 +177,8 @@ export function parseFacets(facets: RawFacet[]) {
return result;
}

export function formatFacetStat(stat: number | undefined, mode: string) {
return stat && formatMeasure(stat, mode === 'effort' ? 'SHORT_WORK_DUR' : 'SHORT_INT');
export function formatFacetStat(stat: number | undefined) {
return stat && formatMeasure(stat, 'SHORT_INT');
}

export interface ReferencedComponent {

+ 7
- 21
server/sonar-web/src/main/js/apps/overview/main/CodeSmells.tsx Ver arquivo

@@ -18,40 +18,28 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
import { Link } from 'react-router';
import enhance, { ComposedProps } from './enhance';
import DateFromNow from '../../../components/intl/DateFromNow';
import { getMetricName } from '../helpers/metrics';
import { translate, translateWithParameters } from '../../../helpers/l10n';
import { formatMeasure, isDiffMetric } from '../../../helpers/measures';
import { getComponentIssuesUrl } from '../../../helpers/urls';
import { formatMeasure } from '../../../helpers/measures';
import CodeSmellIcon from '../../../components/icons-components/CodeSmellIcon';
import { getBranchLikeQuery } from '../../../helpers/branches';
import DrilldownLink from '../../../components/shared/DrilldownLink';

export class CodeSmells extends React.PureComponent<ComposedProps> {
renderHeader() {
return this.props.renderHeader('Maintainability', translate('metric.code_smells.name'));
}

renderDebt(metric: string, type: string) {
renderDebt(metric: string) {
const { branchLike, measures, component } = this.props;
const measure = measures.find(measure => measure.metric.key === metric);
const value = measure ? this.props.getValue(measure) : undefined;
const params = {
...getBranchLikeQuery(branchLike),
resolved: 'false',
facetMode: 'effort',
types: type
};

if (isDiffMetric(metric)) {
Object.assign(params, { sinceLeakPeriod: 'true' });
}

return (
<Link to={getComponentIssuesUrl(component.key, params)}>
<DrilldownLink branchLike={branchLike} component={component.key} metric={metric}>
{formatMeasure(value, 'SHORT_WORK_DUR')}
</Link>
</DrilldownLink>
);
}

@@ -89,9 +77,7 @@ export class CodeSmells extends React.PureComponent<ComposedProps> {
<div className="overview-domain-measures">
<div className="overview-domain-measure">
<div className="overview-domain-measure-value">
<span style={{ marginLeft: 30 }}>
{this.renderDebt('new_technical_debt', 'CODE_SMELL')}
</span>
<span style={{ marginLeft: 30 }}>{this.renderDebt('new_technical_debt')}</span>
{this.props.renderRating('new_maintainability_rating')}
</div>
<div className="overview-domain-measure-label">{getMetricName('new_effort')}</div>
@@ -118,7 +104,7 @@ export class CodeSmells extends React.PureComponent<ComposedProps> {
<div className="overview-domain-measures">
<div className="overview-domain-measure">
<div className="overview-domain-measure-value">
{this.renderDebt('sqale_index', 'CODE_SMELL')}
{this.renderDebt('sqale_index')}
{this.props.renderRating('sqale_rating')}
</div>
<div className="overview-domain-measure-label">

+ 0
- 9
server/sonar-web/src/main/js/helpers/__tests__/query-test.ts Ver arquivo

@@ -47,15 +47,6 @@ describe('parseAsBoolean', () => {
});
});

describe('parseAsFacetMode', () => {
it('should facets modes correctly', () => {
expect(query.parseAsFacetMode('debt')).toBe('effort');
expect(query.parseAsFacetMode('effort')).toBe('effort');
expect(query.parseAsFacetMode('count')).toBe('count');
expect(query.parseAsFacetMode('random')).toBe('count');
});
});

describe('parseAsString', () => {
it('should parse strings correctly', () => {
expect(query.parseAsString('random')).toBe('random');

+ 0
- 4
server/sonar-web/src/main/js/helpers/query.ts Ver arquivo

@@ -63,10 +63,6 @@ export function parseAsDate(value?: string): Date | undefined {
return undefined;
}

export function parseAsFacetMode(facetMode: string): string {
return facetMode === 'debt' || facetMode === 'effort' ? 'effort' : 'count';
}

export function parseAsString(value: string | undefined): string {
return value || '';
}

Carregando…
Cancelar
Salvar