]> source.dussan.org Git - sonarqube.git/commitdiff
Fix SONAR-10579
authorPascal Mugnier <pascal.mugnier@sonarsource.com>
Tue, 1 May 2018 13:19:47 +0000 (15:19 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 3 May 2018 18:20:49 +0000 (20:20 +0200)
server/sonar-web/src/main/js/apps/coding-rules/components/LanguageFacet.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/LanguageFacetFooter.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacet.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacetFooter.tsx

index 057d51961f8d2819e74543da16e32d28f22cb56b..c883f930557d191d9ab487ea806c60ae4d20df85 100644 (file)
@@ -50,6 +50,7 @@ class LanguageFacet extends React.PureComponent<Props> {
       <LanguageFacetFooter
         onSelect={this.handleSelect}
         referencedLanguages={this.props.referencedLanguages}
+        selected={Object.keys(this.props.stats)}
       />
     );
   };
index 34b27b53aeb532675aa4cbc93c7ce94dbba2940e..97d247d13638f04ebfa525e57c69da4ab2bc4da9 100644 (file)
@@ -18,6 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
+import { difference } from 'lodash';
 import Select from '../../../components/controls/Select';
 import { translate } from '../../../helpers/l10n';
 
@@ -26,17 +27,25 @@ type Option = { label: string; value: string };
 interface Props {
   referencedLanguages: { [language: string]: { key: string; name: string } };
   onSelect: (value: string) => void;
+  selected: string[];
 }
 
 export default class LanguageFacetFooter extends React.PureComponent<Props> {
   handleChange = (option: Option) => this.props.onSelect(option.value);
 
   render() {
-    const options = Object.values(this.props.referencedLanguages).map(language => ({
-      label: language.name,
-      value: language.key
+    const options = difference(
+      Object.keys(this.props.referencedLanguages),
+      this.props.selected
+    ).map(key => ({
+      label: this.props.referencedLanguages[key].name,
+      value: key
     }));
 
+    if (options.length === 0) {
+      return null;
+    }
+
     return (
       <div className="search-navigator-facet-footer">
         <Select
index 95d7cae343aceba6a17c6def5581221dc594e107..3c9d5f0bfab0f2024aa4b555d4ac631daa5484a0 100644 (file)
@@ -107,7 +107,9 @@ export default class LanguageFacet extends React.PureComponent<Props> {
       return null;
     }
 
-    return <LanguageFacetFooter onSelect={this.handleSelect} />;
+    return (
+      <LanguageFacetFooter onSelect={this.handleSelect} selected={Object.keys(this.props.stats)} />
+    );
   }
 
   render() {
index a218c09cc80104f75c8c8a427628a8c04d3e9749..ebc49ff62c84d9a3818f8ee805374c2dc7823c99 100644 (file)
@@ -19,6 +19,7 @@
  */
 import * as React from 'react';
 import { connect } from 'react-redux';
+import { differenceWith } from 'lodash';
 import Select from '../../../components/controls/Select';
 import { translate } from '../../../helpers/l10n';
 import { getLanguages } from '../../../store/rootReducer';
@@ -26,6 +27,7 @@ import { getLanguages } from '../../../store/rootReducer';
 interface Props {
   languages: Array<{ key: string; name: string }>;
   onSelect: (value: string) => void;
+  selected: string[];
 }
 
 class LanguageFacetFooter extends React.PureComponent<Props> {
@@ -34,10 +36,15 @@ class LanguageFacetFooter extends React.PureComponent<Props> {
   };
 
   render() {
-    const options = this.props.languages.map(language => ({
-      label: language.name,
-      value: language.key
-    }));
+    const options = differenceWith(
+      this.props.languages,
+      this.props.selected,
+      (language, key) => language.key === key
+    ).map(language => ({ label: language.name, value: language.key }));
+
+    if (options.length === 0) {
+      return null;
+    }
 
     return (
       <div className="search-navigator-facet-footer">