]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7402 add ability to drilldown with developer selected
authorStas Vilchik <vilchiks@gmail.com>
Wed, 6 Apr 2016 12:59:52 +0000 (14:59 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Thu, 7 Apr 2016 11:45:44 +0000 (13:45 +0200)
server/sonar-web/src/main/js/apps/component-measures/details/drilldown/ComponentCell.js
server/sonar-web/src/main/js/apps/component-measures/details/drilldown/ListView.js
server/sonar-web/src/main/js/apps/component-measures/details/drilldown/MeasureDrilldown.js
server/sonar-web/src/main/js/apps/component-measures/store/treeViewActions.js

index e5e5a3cbb178e93d0119e15ec4c2ae4736ce09e9..856c79cbe5677d03a90dd9cb06849dfd9e74b9e0 100644 (file)
@@ -55,7 +55,7 @@ const ComponentCell = ({ component, isSelected, onClick }) => {
   return (
       <td style={{ maxWidth: 0 }}>
         <div style={{ maxWidth: '100%', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>
-          {component.refId == null ? (
+          {(component.refId == null || component.qualifier === 'DEV_PRJ') ? (
               <a
                   id={'component-measures-component-link-' + component.key}
                   className={linkClassName}
index c0fcc23de7ddbd5aaeaa6ecee0f9cdccea85260a..87dd4c9e085aa307cd4107e8251016b8f16801c0 100644 (file)
@@ -26,8 +26,17 @@ import Spinner from '../../components/Spinner';
 import SourceViewer from '../../../code/components/SourceViewer';
 
 export default class ListView extends React.Component {
+  static contextTypes = {
+    router: React.PropTypes.object.isRequired
+  };
+
   componentDidMount () {
-    this.handleChangeBaseComponent(this.props.component);
+    const { component, metric } = this.props;
+    if (component.qualifier === 'DEV') {
+      const { router } = this.context;
+      router.replace({ pathname: `metric/${metric.key}/tree`, query: { id: component.key } });
+    }
+    this.handleChangeBaseComponent(component);
   }
 
   componentDidUpdate (nextProps) {
index fe2946c15b808ddf5365e0b17c89584c8173c531..f41d19f84119284db757bb959a09309a13daa670 100644 (file)
@@ -38,14 +38,16 @@ export default class MeasureDrilldown extends React.Component {
     return (
         <div className="measure-details-drilldown">
           <ul className="measure-details-drilldown-mode">
-            <li>
-              <Link
-                  activeClassName="active"
-                  to={{ pathname: `metric/${metric.key}/list`, query: { id: component.key } }}>
-                <IconList/>
-                {translate('component_measures.tab.list')}
-              </Link>
-            </li>
+            {component.qualifier !== 'DEV' && (
+              <li>
+                <Link
+                    activeClassName="active"
+                    to={{ pathname: `metric/${metric.key}/list`, query: { id: component.key } }}>
+                  <IconList/>
+                  {translate('component_measures.tab.list')}
+                </Link>
+              </li>
+            )}
 
             <li>
               <Link
index cd1382c271a69df15dcdfd4231ed07e6b1c4d9c4..782ddfd7ebc321f6367643927a6b26acb809f1ff 100644 (file)
@@ -65,7 +65,7 @@ function getComplementary (metric) {
   return [metric, ...comp];
 }
 
-function makeRequest (baseComponent, metric, options, periodIndex = 1) {
+function makeRequest (rootComponent, baseComponent, metric, options, periodIndex = 1) {
   const asc = metric.direction === 1;
   const ps = 100;
   const finalOptions = { asc, ps };
@@ -83,14 +83,21 @@ function makeRequest (baseComponent, metric, options, periodIndex = 1) {
     });
   }
 
+  if (rootComponent.qualifier === 'DEV' && baseComponent.qualifier !== 'DEV') {
+    Object.assign(options, { developerId: rootComponent.id });
+  }
+
   Object.assign(finalOptions, options);
-  return getComponentTree('children', baseComponent.key, getComplementary(metric.key), finalOptions);
+
+  const finalKey = baseComponent.refKey || baseComponent.key;
+
+  return getComponentTree('children', finalKey, getComplementary(metric.key), finalOptions);
 }
 
-function fetchComponents (baseComponent, metric, pageIndex = 1, periodIndex = 1) {
+function fetchComponents (rootComponent, baseComponent, metric, pageIndex = 1, periodIndex = 1) {
   const options = { p: pageIndex };
 
-  return makeRequest(baseComponent, metric, options, periodIndex).then(r => {
+  return makeRequest(rootComponent, baseComponent, metric, options, periodIndex).then(r => {
     const nextComponents = filterOutEmptyMeasures(enhanceWithMeasure(r.components, metric.key, periodIndex));
 
     return {
@@ -108,10 +115,10 @@ function fetchComponents (baseComponent, metric, pageIndex = 1, periodIndex = 1)
  */
 function fetchList (baseComponent) {
   return (dispatch, getState) => {
-    const { metric, periodIndex } = getState().tree;
+    const { metric, periodIndex, rootComponent } = getState().tree;
 
     dispatch(startFetching());
-    return fetchComponents(baseComponent, metric, 1, periodIndex).then(r => {
+    return fetchComponents(rootComponent, baseComponent, metric, 1, periodIndex).then(r => {
       dispatch(updateStore({
         ...r,
         baseComponent,
@@ -148,9 +155,9 @@ export function start (rootComponent, metric, periodIndex = 1) {
  */
 export function drilldown (component) {
   return (dispatch, getState) => {
-    const { metric, breadcrumbs, periodIndex } = getState().tree;
+    const { metric, rootComponent, breadcrumbs, periodIndex } = getState().tree;
     dispatch(startFetching());
-    return fetchComponents(component, metric, 1, periodIndex).then(r => {
+    return fetchComponents(rootComponent, component, metric, 1, periodIndex).then(r => {
       dispatch(updateStore({
         ...r,
         breadcrumbs: [...breadcrumbs, component],
@@ -167,10 +174,10 @@ export function drilldown (component) {
  */
 export function useBreadcrumbs (component) {
   return (dispatch, getState) => {
-    const { metric, breadcrumbs, periodIndex } = getState().tree;
+    const { metric, rootComponent, breadcrumbs, periodIndex } = getState().tree;
     const index = breadcrumbs.indexOf(component);
     dispatch(startFetching());
-    return fetchComponents(component, metric, 1, periodIndex).then(r => {
+    return fetchComponents(rootComponent, component, metric, 1, periodIndex).then(r => {
       dispatch(updateStore({
         ...r,
         breadcrumbs: breadcrumbs.slice(0, index + 1),