From: Pascal Mugnier Date: Tue, 17 Apr 2018 10:11:11 +0000 (+0200) Subject: SONAR-10050 Switch Issues/Effort in issues page when data is available X-Git-Tag: 7.5~1340 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d1e95cf62f9b38e7e7df0a5ecc881620298da803;p=sonarqube.git SONAR-10050 Switch Issues/Effort in issues page when data is available --- diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap index aad1591cb67..64c9678aaef 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap @@ -16,6 +16,7 @@ exports[`should display facet item list 1`] = ` disabled={false} halfWidth={false} key="Reliability" + loading={false} name={ Promise<{ - components: ReferencedComponent[]; - facets: RawFacet[]; - issues: Issue[]; - languages: ReferencedLanguage[]; - paging: Paging; - rules: { name: string }[]; - users: ReferencedUser[]; - }>; + fetchIssues: (query: RawQuery, requestOrganizations?: boolean) => Promise; location: { pathname: string; query: RawQuery }; myIssues?: boolean; onBranchesChange: () => void; @@ -397,7 +396,11 @@ export default class App extends React.PureComponent { } }; - fetchIssues = (additional: RawQuery, requestFacets = false, requestOrganizations = true) => { + fetchIssues = ( + additional: RawQuery, + requestFacets = false, + requestOrganizations = true + ): Promise => { const { component, organization } = this.props; const { myIssues, openFacets, query } = this.state; @@ -428,7 +431,10 @@ export default class App extends React.PureComponent { Object.assign(parameters, { assignees: '__me__' }); } - return this.props.fetchIssues(parameters, requestOrganizations); + return this.props.fetchIssues(parameters, requestOrganizations).then(reponse => { + this.setState({ loading: false }); + return reponse; + }); }; fetchFirstIssues() { @@ -594,6 +600,7 @@ export default class App extends React.PureComponent { }; handleFilterChange = (changes: Partial) => { + this.setState({ loading: true }); this.context.router.push({ pathname: this.props.location.pathname, query: { @@ -854,6 +861,7 @@ export default class App extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; @@ -164,6 +165,7 @@ export default class AssigneeFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; @@ -78,6 +79,7 @@ export default class AuthorFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; @@ -171,7 +172,7 @@ export default class CreationDateFacet extends React.PureComponent { createdBefore: endDate, tooltip, x: index, - y: stats[start] + y: this.props.loading ? 0 : stats[start] }; }); @@ -225,6 +226,7 @@ export default class CreationDateFacet extends React.PureComponent {
{ {component ? ( { <> ) => void; onToggle: (property: string) => void; open: boolean; @@ -92,6 +93,7 @@ export default class DirectoryFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; @@ -96,6 +97,7 @@ export default class FileFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; - stats: { [x: string]: number } | undefined; referencedLanguages: { [languageKey: string]: ReferencedLanguage }; - languages: string[]; + stats: { [x: string]: number } | undefined; } export default class LanguageFacet extends React.PureComponent { @@ -90,6 +91,7 @@ export default class LanguageFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; @@ -94,6 +95,7 @@ export default class ModuleFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; @@ -148,6 +149,7 @@ export default class ProjectFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; @@ -90,6 +91,7 @@ export default class ResolutionFacet extends React.PureComponent { disabled={stat === 0 && !active} halfWidth={true} key={resolution} + loading={this.props.loading} name={this.getFacetItemName(resolution)} onClick={this.handleItemClick} stat={formatFacetStat(stat, this.props.facetMode)} diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx index ff0edeaa406..7cd4be14f75 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx @@ -31,6 +31,7 @@ import { translate } from '../../../helpers/l10n'; interface Props { facetMode: string; languages: string[]; + loading?: boolean; onChange: (changes: Partial) => void; onToggle: (property: string) => void; open: boolean; @@ -105,6 +106,7 @@ export default class RuleFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; @@ -74,6 +75,7 @@ export default class SeverityFacet extends React.PureComponent { disabled={stat === 0 && !active} halfWidth={true} key={severity} + loading={this.props.loading} name={} onClick={this.handleItemClick} stat={formatFacetStat(stat, this.props.facetMode)} diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx index f1853e1337b..c850ffa0750 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx @@ -39,6 +39,7 @@ import { Component } from '../../../app/types'; export interface Props { component: Component | undefined; facets: { [facet: string]: Facet }; + loading?: boolean; myIssues: boolean; onFacetToggle: (property: string) => void; onFilterChange: (changes: Partial) => void; @@ -67,6 +68,7 @@ export default class Sidebar extends React.PureComponent { { /> { /> { /> { createdBefore={query.createdBefore} createdInLast={query.createdInLast} facetMode={query.facetMode} + loading={this.props.loading} onChange={this.props.onFilterChange} onToggle={this.props.onFacetToggle} open={!!openFacets.createdAt} @@ -114,6 +120,7 @@ export default class Sidebar extends React.PureComponent { { { { {displayModulesFacet && ( { { { assignees={query.assignees} component={component} facetMode={query.facetMode} + loading={this.props.loading} onChange={this.props.onFilterChange} onToggle={this.props.onFacetToggle} open={!!openFacets.assignees} @@ -196,6 +209,7 @@ export default class Sidebar extends React.PureComponent { { ) => void; onToggle: (property: string) => void; open: boolean; @@ -81,6 +82,7 @@ export default class StatusFacet extends React.PureComponent { disabled={stat === 0 && !active} halfWidth={true} key={status} + loading={this.props.loading} name={this.renderStatus(status)} onClick={this.handleItemClick} stat={formatFacetStat(stat, this.props.facetMode)} diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx index 2fc0c14ab66..ba44ec51a29 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx @@ -32,6 +32,7 @@ import { translate } from '../../../helpers/l10n'; interface Props { component: Component | undefined; facetMode: string; + loading?: boolean; onChange: (changes: Partial) => void; onToggle: (property: string) => void; open: boolean; @@ -107,6 +108,7 @@ export default class TagFacet extends React.PureComponent { ) => void; onToggle: (property: string) => void; open: boolean; @@ -73,6 +74,7 @@ export default class TypeFacet extends React.PureComponent { active={active} disabled={stat === 0 && !active} key={type} + loading={this.props.loading} name={ {translate('issue.type', type)} diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.tsx.snap index a0afcc2cf9a..1d183049d3d 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.tsx.snap @@ -16,6 +16,7 @@ exports[`should render 1`] = ` active={false} disabled={false} halfWidth={false} + loading={false} name="unassigned" onClick={[Function]} stat="5" @@ -26,6 +27,7 @@ exports[`should render 1`] = ` disabled={false} halfWidth={false} key="foo" + loading={false} name={ void; stat?: React.ReactNode; @@ -34,7 +35,8 @@ export interface Props { export default class FacetItem extends React.PureComponent { static defaultProps = { disabled: false, - halfWidth: false + halfWidth: false, + loading: false }; handleClick = (event: React.SyntheticEvent) => { @@ -52,12 +54,16 @@ export default class FacetItem extends React.PureComponent { return this.props.disabled ? ( {this.props.name} - {this.props.stat != null && {this.props.stat}} + {this.props.stat != null && ( + {this.props.loading ? '' : this.props.stat} + )} ) : ( {this.props.name} - {this.props.stat != null && {this.props.stat}} + {this.props.stat != null && ( + {this.props.loading ? '' : this.props.stat} + )} ); } diff --git a/server/sonar-web/src/main/js/components/facet/__tests__/FacetItem-test.tsx b/server/sonar-web/src/main/js/components/facet/__tests__/FacetItem-test.tsx index e16c5020383..95c822c8eb3 100644 --- a/server/sonar-web/src/main/js/components/facet/__tests__/FacetItem-test.tsx +++ b/server/sonar-web/src/main/js/components/facet/__tests__/FacetItem-test.tsx @@ -34,6 +34,10 @@ it('should render stat', () => { expect(renderFacetItem({ stat: '13' })).toMatchSnapshot(); }); +it('should loading stat', () => { + expect(renderFacetItem({ loading: true })).toMatchSnapshot(); +}); + it('should render disabled', () => { expect(renderFacetItem({ disabled: true })).toMatchSnapshot(); }); diff --git a/server/sonar-web/src/main/js/components/facet/__tests__/__snapshots__/FacetItem-test.tsx.snap b/server/sonar-web/src/main/js/components/facet/__tests__/__snapshots__/FacetItem-test.tsx.snap index c0cf80746aa..3044d7ddbbd 100644 --- a/server/sonar-web/src/main/js/components/facet/__tests__/__snapshots__/FacetItem-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/facet/__tests__/__snapshots__/FacetItem-test.tsx.snap @@ -1,5 +1,20 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`should loading stat 1`] = ` + + + foo + + +`; + exports[`should render active 1`] = `