From 4ac88f47bbc707c5bfcffefaa2cde5dded30b9ca Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gr=C3=A9goire=20Aubert?= Date: Wed, 18 Jul 2018 11:46:04 +0200 Subject: [PATCH] SONARCLOUD-77 Display correct empty project page --- .../apps/projects/components/AllProjects.tsx | 11 ++--- .../apps/projects/components/PageSidebar.tsx | 41 ++++++++++--------- .../src/main/js/apps/projects/query.ts | 15 +++++++ 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx b/server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx index cbb5d82aa9b..7f436bc9535 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx +++ b/server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx @@ -35,7 +35,7 @@ import { get, save } from '../../../helpers/storage'; import { RawQuery } from '../../../helpers/query'; import { Project, Facets } from '../types'; import { fetchProjects, parseSorting, SORTING_SWITCH } from '../utils'; -import { parseUrlQuery, Query } from '../query'; +import { parseUrlQuery, Query, hasFilterParams, hasVisualizationParams } from '../query'; import { isSonarCloud } from '../../../helpers/system'; import '../../../components/search-navigator.css'; import '../styles.css'; @@ -109,9 +109,6 @@ export default class AllProjects extends React.PureComponent { getSort = () => this.state.query.sort || 'name'; - isFiltered = (query = this.state.query) => - Object.values(query).some(value => value !== undefined); - stopLoading = () => { if (this.mounted) { this.setState({ loading: false }); @@ -216,8 +213,8 @@ export default class AllProjects extends React.PureComponent { const savedOptions = this.getStorageOptions(); const savedOptionsSet = savedOptions.sort || savedOptions.view || savedOptions.visualization; - // if there is no filter, but there are saved preferences in the localStorage - if (initialMount && !this.isFiltered(query) && savedOptionsSet) { + // if there is no visualization parameters (sort, view, visualization), but there are saved preferences in the localStorage + if (initialMount && !hasVisualizationParams(query) && savedOptionsSet) { this.context.router.replace({ pathname: this.props.location.pathname, query: savedOptions }); } else { this.fetchProjects(query); @@ -299,7 +296,7 @@ export default class AllProjects extends React.PureComponent { !['view', 'visualization', 'sort'].includes(key)) - .some(key => query[key] != null); + const isFiltered = hasFilterParams(query); const isLeakView = view === 'leak'; const maxFacetValue = getMaxFacetValue(facets); const facetProps = { onQueryChange, maxFacetValue, organization, query }; @@ -72,7 +71,7 @@ export default function PageSidebar(props: Props) { return (
{props.showFavoriteFilter && ( - + )}
@@ -80,81 +79,85 @@ export default function PageSidebar(props: Props) {

{translate('filters')}

- + {!isLeakView && ( <> - + )} {isLeakView && ( <> )} - +
); } +function getFacet(facets: Facets | undefined, name: string) { + return facets && facets[name]; +} + function getMaxFacetValue(facets?: Facets) { return facets && Math.max(...flatMap(Object.values(facets), facet => Object.values(facet))); } diff --git a/server/sonar-web/src/main/js/apps/projects/query.ts b/server/sonar-web/src/main/js/apps/projects/query.ts index 54cb473e714..ebe03ae2677 100644 --- a/server/sonar-web/src/main/js/apps/projects/query.ts +++ b/server/sonar-web/src/main/js/apps/projects/query.ts @@ -17,6 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +/* eslint-disable camelcase */ import { VISUALIZATIONS } from './utils'; import { RawQuery } from '../../helpers/query'; @@ -112,6 +113,20 @@ export function convertToFilter(query: Query, isFavorite: boolean): string { return conditions.join(' and '); } +const visualizationParams = ['sort', 'view', 'visualization']; + +export function hasFilterParams(query: Query) { + return Object.keys(query) + .filter(key => !visualizationParams.includes(key)) + .some(key => query[key] !== undefined); +} + +export function hasVisualizationParams(query: Query) { + return Object.keys(query) + .filter(key => visualizationParams.includes(key)) + .some(key => query[key] !== undefined); +} + function getAsNumericRating(value: any): number | undefined { if (value === '' || value == null || isNaN(value)) { return undefined; -- 2.39.5