]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7936 Links with same name are not displayed on project dashboard
authorStas Vilchik <vilchiks@gmail.com>
Mon, 8 Aug 2016 09:44:07 +0000 (11:44 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Mon, 8 Aug 2016 09:44:07 +0000 (11:44 +0200)
server/sonar-web/src/main/js/apps/overview/meta/Meta.js
server/sonar-web/src/main/js/apps/overview/meta/MetaLinks.js
server/sonar-web/src/main/js/apps/overview/styles.css

index 34fd17dc77af3e4858ee17ef84fef382144c3be1..13b830ad9427e5cc57011ba08ae3a2a2f6c309e8 100644 (file)
@@ -26,14 +26,13 @@ import MetaQualityProfiles from './MetaQualityProfiles';
 import EventsList from './../events/EventsList';
 
 const Meta = ({ component }) => {
-  const { qualifier, description, links, profiles, gate } = component;
+  const { qualifier, description, profiles, gate } = component;
 
   const isProject = qualifier === 'TRK';
   const isView = qualifier === 'VW' || qualifier === 'SVW';
   const isDeveloper = qualifier === 'DEV';
 
   const hasDescription = !!description;
-  const hasLinks = Array.isArray(links) && !!links.length;
   const hasQualityProfiles = Array.isArray(profiles) && profiles.length > 0;
   const hasQualityGate = !!gate;
 
@@ -51,9 +50,7 @@ const Meta = ({ component }) => {
               </div>
           )}
 
-          {hasLinks && (
-              <MetaLinks links={links}/>
-          )}
+          <MetaLinks component={component}/>
 
           <MetaKey component={component}/>
         </div>
index 369846ccb28a1eca639071cb348ec10bbb5be3fd..1bc4b5ce2563d5eba011d1593a654e810ab9b1cd 100644 (file)
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import React from 'react';
+import { getProjectLinks } from '../../../api/projectLinks';
+import { isProvided } from '../../project-admin/links/utils';
 
-const MetaLinks = ({ links }) => {
-  return (
-      <ul className="overview-meta-list big-spacer-bottom">
-        {links.map(link => (
-            <li key={link.type}>
-              <a
-                  className="link-with-icon"
-                  href={link.href}
-                  target="_blank">
-                <i className={`icon-color-link icon-${link.type}`}/>
-                &nbsp;
-                {link.name}
-              </a>
-            </li>
-        ))}
-      </ul>
-  );
-};
-
-export default MetaLinks;
+export default class MetaLinks extends React.Component {
+  static propTypes = {
+    component: React.PropTypes.object.isRequired
+  };
+
+  state = {};
+
+  componentDidMount () {
+    this.mounted = true;
+    this.loadLinks();
+  }
+
+  componentDidUpdate (prevProps) {
+    if (prevProps.component !== this.props.component) {
+      this.loadLinks();
+    }
+  }
+
+  componentWillUnmount () {
+    this.mounted = false;
+  }
+
+  loadLinks () {
+    getProjectLinks(this.props.component.key).then(links => {
+      if (this.mounted) {
+        this.setState({ links });
+      }
+    });
+  }
+
+  renderLinkIcon (link) {
+    return isProvided(link) ?
+        <i className={`icon-color-link icon-${link.type}`}/> :
+        <i className="icon-color-link icon-detach"/>;
+  }
+
+  render () {
+    const { links } = this.state;
+
+    if (links == null || links.length === 0) {
+      return null;
+    }
+
+    return (
+        <ul className="overview-meta-list big-spacer-bottom">
+          {links.map(link => (
+              <li key={link.id}>
+                <a className="link-with-icon" href={link.url} target="_blank">
+                  {this.renderLinkIcon(link)}
+                  &nbsp;
+                  {link.name}
+                </a>
+              </li>
+          ))}
+        </ul>
+    );
+  }
+}
index 2c920297fb1fd89c03bd269752ce7f2ef2c9da80..8f5738cee77396b11927585556124e010fa44c65 100644 (file)
 }
 
 .overview-meta-list > li {
+  /* 1px to not cut icons on the left */
+  padding-left: 1px;
   padding-bottom: 4px;
   overflow: hidden;
   text-overflow: ellipsis;