From d1feeda71f72903179446ba1d3c170414bd1ff2b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gr=C3=A9goire=20Aubert?= Date: Fri, 11 Aug 2017 14:08:21 +0200 Subject: [PATCH] SONAR-9608 Close measures facets by default --- .../component-measures/sidebar/Sidebar.js | 29 +++++++++++++++---- .../sidebar/__tests__/Sidebar-test.js | 8 ++--- .../__snapshots__/Sidebar-test.js.snap | 7 ++--- .../main/js/apps/component-measures/utils.js | 2 +- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/Sidebar.js b/server/sonar-web/src/main/js/apps/component-measures/sidebar/Sidebar.js index 441491a518f..f74f751656d 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/Sidebar.js +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/Sidebar.js @@ -21,7 +21,7 @@ import React from 'react'; import ProjectOverviewFacet from './ProjectOverviewFacet'; import DomainFacet from './DomainFacet'; -import { groupByDomains, PROJECT_OVERVEW } from '../utils'; +import { groupByDomains, KNOWN_DOMAINS, PROJECT_OVERVEW } from '../utils'; import type { MeasureEnhanced } from '../../../components/measure/types'; import type { Query } from '../types'; @@ -32,7 +32,7 @@ type Props = {| |}; type State = {| - closedFacets: { [string]: boolean } + openFacets: { [string]: boolean } |}; export default class Sidebar extends React.PureComponent { @@ -41,12 +41,29 @@ export default class Sidebar extends React.PureComponent { constructor(props: Props) { super(props); - this.state = { closedFacets: {} }; + this.state = { openFacets: this.getOpenFacets({}, props) }; } + componentWillReceiveProps(nextProps: Props) { + if (nextProps.selectedMetric !== this.props.selectedMetric) { + this.setState(state => this.getOpenFacets(state.openFacets, nextProps)); + } + } + + getOpenFacets = (openFacets: { [string]: boolean }, { measures, selectedMetric }: Props) => { + const newOpenFacets = { ...openFacets }; + const measure = measures.find(measure => measure.metric.key === selectedMetric); + if (measure && measure.metric && measure.metric.domain) { + newOpenFacets[measure.metric.domain] = true; + } else if (KNOWN_DOMAINS.includes(selectedMetric)) { + newOpenFacets[selectedMetric] = true; + } + return newOpenFacets; + }; + toggleFacet = (name: string) => { - this.setState(({ closedFacets }) => ({ - closedFacets: { ...closedFacets, [name]: !closedFacets[name] } + this.setState(({ openFacets }: State) => ({ + openFacets: { ...openFacets, [name]: !openFacets[name] } })); }; @@ -68,7 +85,7 @@ export default class Sidebar extends React.PureComponent { domain={domain} onChange={this.changeMetric} onToggle={this.toggleFacet} - open={!this.state.closedFacets[domain.name]} + open={this.state.openFacets[domain.name]} selected={this.props.selectedMetric} /> )} diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/Sidebar-test.js b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/Sidebar-test.js index aa993cfc71b..d03ce105879 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/Sidebar-test.js +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/Sidebar-test.js @@ -59,7 +59,7 @@ const MEASURES = [ const PROPS = { measures: MEASURES, - selectedMetric: 'foo', + selectedMetric: 'duplicated_lines_density', updateQuery: () => {} }; @@ -69,9 +69,9 @@ it('should display two facets', () => { it('should correctly toggle facets', () => { const wrapper = shallow(); - expect(wrapper.state('closedFacets').bugs).toBeUndefined(); + expect(wrapper.state('openFacets').bugs).toBeUndefined(); wrapper.instance().toggleFacet('bugs'); - expect(wrapper.state('closedFacets').bugs).toBeTruthy(); + expect(wrapper.state('openFacets').bugs).toBeTruthy(); wrapper.instance().toggleFacet('bugs'); - expect(wrapper.state('closedFacets').bugs).toBeFalsy(); + expect(wrapper.state('openFacets').bugs).toBeFalsy(); }); diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap index 5e7477f09e1..96c4d1701a7 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap @@ -6,7 +6,7 @@ exports[`should display two facets 1`] = ` > `; diff --git a/server/sonar-web/src/main/js/apps/component-measures/utils.js b/server/sonar-web/src/main/js/apps/component-measures/utils.js index 0a3da4859fd..a1cd1d3c2ac 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/utils.js +++ b/server/sonar-web/src/main/js/apps/component-measures/utils.js @@ -32,7 +32,7 @@ import type { MeasureEnhanced } from '../../components/measure/types'; export const PROJECT_OVERVEW = 'project_overview'; export const DEFAULT_VIEW = 'list'; export const DEFAULT_METRIC = PROJECT_OVERVEW; -const KNOWN_DOMAINS = [ +export const KNOWN_DOMAINS = [ 'Releasability', 'Reliability', 'Security', -- 2.39.5