aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/apps/projects
diff options
context:
space:
mode:
authorStas Vilchik <vilchiks@gmail.com>2016-11-09 09:41:59 +0100
committerStas Vilchik <vilchiks@gmail.com>2016-11-09 15:51:40 +0100
commitf662a342d352376b9cc6854e20c58b205f184e45 (patch)
treee19b88ef04079f40044ec990c0bc8d7d37d5db87 /server/sonar-web/src/main/js/apps/projects
parent26f5f414b64fd9d3963c859da7c8f14616ddb759 (diff)
downloadsonarqube-f662a342d352376b9cc6854e20c58b205f184e45.tar.gz
sonarqube-f662a342d352376b9cc6854e20c58b205f184e45.zip
SONAR-8362 Display information of favorite projects
Diffstat (limited to 'server/sonar-web/src/main/js/apps/projects')
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/ProjectCard.js12
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/ProjectCardQualityGate.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/store/actions.js32
-rw-r--r--server/sonar-web/src/main/js/apps/projects/styles.css4
4 files changed, 24 insertions, 26 deletions
diff --git a/server/sonar-web/src/main/js/apps/projects/components/ProjectCard.js b/server/sonar-web/src/main/js/apps/projects/components/ProjectCard.js
index 9b9ec7fc11f..79a4b28d9f6 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/ProjectCard.js
+++ b/server/sonar-web/src/main/js/apps/projects/components/ProjectCard.js
@@ -21,6 +21,7 @@ import React from 'react';
import classNames from 'classnames';
import ProjectCardQualityGate from './ProjectCardQualityGate';
import ProjectCardMeasures from './ProjectCardMeasures';
+import FavoriteContainer from '../../../components/controls/FavoriteContainer';
import { getComponentUrl } from '../../../helpers/urls';
export default class ProjectCard extends React.Component {
@@ -44,9 +45,14 @@ export default class ProjectCard extends React.Component {
<ProjectCardQualityGate status={this.props.measures['alert_status']}/>
</div>
)}
- <h2 className="project-card-name">
- <a className="link-base-color" href={getComponentUrl(project.key)}>{project.name}</a>
- </h2>
+ <div className="boxed-group-header">
+ {project.isFavorite != null && (
+ <FavoriteContainer className="spacer-right" componentKey={project.key}/>
+ )}
+ <h2 className="project-card-name">
+ <a className="link-base-color" href={getComponentUrl(project.key)}>{project.name}</a>
+ </h2>
+ </div>
<div className="boxed-group-inner">
<ProjectCardMeasures measures={this.props.measures}/>
</div>
diff --git a/server/sonar-web/src/main/js/apps/projects/components/ProjectCardQualityGate.js b/server/sonar-web/src/main/js/apps/projects/components/ProjectCardQualityGate.js
index 1f60437b534..0b81e2ceb8a 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/ProjectCardQualityGate.js
+++ b/server/sonar-web/src/main/js/apps/projects/components/ProjectCardQualityGate.js
@@ -34,7 +34,7 @@ export default class ProjectCardQualityGate extends React.Component {
}
return (
- <div className="project-card-measure">
+ <div className="project-card-measure project-card-quality-gate">
<div className="project-card-measure-inner">
<span className="small spacer-right">
{translate('overview.quality_gate')}
diff --git a/server/sonar-web/src/main/js/apps/projects/store/actions.js b/server/sonar-web/src/main/js/apps/projects/store/actions.js
index 9582b7a7dee..922400ead59 100644
--- a/server/sonar-web/src/main/js/apps/projects/store/actions.js
+++ b/server/sonar-web/src/main/js/apps/projects/store/actions.js
@@ -28,8 +28,7 @@ import { getProjectsAppState } from '../../../app/store/rootReducer';
import { getMeasuresForProjects } from '../../../api/measures';
import { receiveComponentsMeasures } from '../../../app/store/measures/actions';
import { convertToFilter } from './utils';
-import { getFavorites } from '../../../api/favorites';
-import { receiveFavorites } from '../../../app/store/favorites/actions';
+import { receiveFavorites } from '../../../app/store/favorites/duck';
const PAGE_SIZE = 50;
@@ -84,9 +83,17 @@ const fetchProjectMeasures = projects => dispatch => {
return getMeasuresForProjects(projectKeys, METRICS).then(onReceiveMeasures(dispatch), onFail(dispatch));
};
+const handleFavorites = (dispatch, projects) => {
+ const favorites = projects.filter(project => project.isFavorite);
+ if (favorites.length) {
+ dispatch(receiveFavorites(favorites));
+ }
+};
+
const onReceiveProjects = dispatch => response => {
dispatch(receiveComponents(response.components));
dispatch(receiveProjects(response.components, response.facets));
+ handleFavorites(dispatch, response.components);
dispatch(fetchProjectMeasures(response.components)).then(() => {
dispatch(updateState({ loading: false }));
});
@@ -99,6 +106,7 @@ const onReceiveProjects = dispatch => response => {
const onReceiveMoreProjects = dispatch => response => {
dispatch(receiveComponents(response.components));
dispatch(receiveMoreProjects(response.components));
+ handleFavorites(dispatch, response.components);
dispatch(fetchProjectMeasures(response.components)).then(() => {
dispatch(updateState({ loading: false }));
});
@@ -126,23 +134,3 @@ export const fetchMoreProjects = query => (dispatch, getState) => {
}
return searchProjects(data).then(onReceiveMoreProjects(dispatch), onFail(dispatch));
};
-
-export const fetchFavoriteProjects = () => dispatch => {
- dispatch(updateState({ loading: true }));
-
- return getFavorites().then(favorites => {
- dispatch(receiveFavorites(favorites));
-
- const projects = favorites.filter(component => component.qualifier === 'TRK');
-
- dispatch(receiveComponents(projects));
- dispatch(receiveProjects(projects, []));
- dispatch(fetchProjectMeasures(projects)).then(() => {
- dispatch(updateState({ loading: false }));
- });
- dispatch(updateState({
- total: projects.length,
- pageIndex: 1
- }));
- }, onFail(dispatch));
-};
diff --git a/server/sonar-web/src/main/js/apps/projects/styles.css b/server/sonar-web/src/main/js/apps/projects/styles.css
index a71aceb70d2..d9ac7cbd9c5 100644
--- a/server/sonar-web/src/main/js/apps/projects/styles.css
+++ b/server/sonar-web/src/main/js/apps/projects/styles.css
@@ -80,6 +80,10 @@
font-size: 12px;
}
+.project-card-quality-gate {
+ line-height: 24px;
+}
+
.projects-facet-header {
padding-top: 10px;
padding-bottom: 10px;