]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9545 Better wording when searching for a project in My Favorites scope
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>
Mon, 2 Oct 2017 15:19:52 +0000 (17:19 +0200)
committerGrégoire Aubert <gregoire.aubert@sonarsource.com>
Wed, 4 Oct 2017 09:19:53 +0000 (11:19 +0200)
server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx
server/sonar-web/src/main/js/apps/projects/components/EmptyFavoriteSearch.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/apps/projects/components/ProjectsList.tsx
server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/AllProjects-test.tsx.snap
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index d0c700dbc1b84298b4062b1f2d368fd2aa08e694..deb67d0892ec95d05e7b42fdd821d9086248ae06 100644 (file)
@@ -271,6 +271,7 @@ export default class AllProjects extends React.PureComponent<Props, State> {
             isFiltered={this.isFiltered()}
             organization={this.props.organization}
             projects={this.state.projects}
+            query={this.state.query}
           />
         )}
         <ListFooter
diff --git a/server/sonar-web/src/main/js/apps/projects/components/EmptyFavoriteSearch.tsx b/server/sonar-web/src/main/js/apps/projects/components/EmptyFavoriteSearch.tsx
new file mode 100644 (file)
index 0000000..220295c
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+import * as React from 'react';
+import { FormattedMessage } from 'react-intl';
+import { Link } from 'react-router';
+import { translate } from '../../../helpers/l10n';
+import { Query } from '../query';
+import '../../../components/common/EmptySearch.css';
+
+export default function EmptyFavoriteSearch({ query }: { query: Query }) {
+  return (
+    <div className="empty-search">
+      <h3>{translate('no_results_search.favorites')}</h3>
+      <p className="big-spacer-top">
+        <FormattedMessage
+          defaultMessage={translate('no_results_search.favorites.2')}
+          id="no_results_search.favorites.2"
+          values={{
+            url: <Link to={{ pathname: '/projects', query }}>{translate('all')}</Link>
+          }}
+        />
+      </p>
+    </div>
+  );
+}
index 6636307001af40e3790da17c0669c3e123098d2e..423da0dcd2611150fe6770ad2b1f4b0eee589f0a 100644 (file)
@@ -21,8 +21,10 @@ import * as React from 'react';
 import ProjectCard from './ProjectCard';
 import NoFavoriteProjects from './NoFavoriteProjects';
 import EmptyInstance from './EmptyInstance';
+import EmptyFavoriteSearch from './EmptyFavoriteSearch';
 import EmptySearch from '../../../components/common/EmptySearch';
 import { Project } from '../types';
+import { Query } from '../query';
 
 interface Props {
   cardType?: string;
@@ -30,17 +32,16 @@ interface Props {
   isFiltered: boolean;
   organization?: { key: string };
   projects: Project[];
+  query: Query;
 }
 
 export default class ProjectsList extends React.PureComponent<Props> {
   renderNoProjects() {
-    if (this.props.isFavorite && !this.props.isFiltered) {
-      return <NoFavoriteProjects />;
-    } else if (!this.props.isFiltered) {
-      return <EmptyInstance />;
-    } else {
-      return <EmptySearch />;
+    const { isFavorite, isFiltered, query } = this.props;
+    if (isFiltered) {
+      return isFavorite ? <EmptyFavoriteSearch query={query} /> : <EmptySearch />;
     }
+    return isFavorite ? <NoFavoriteProjects /> : <EmptyInstance />;
   }
 
   render() {
index 2561502915eeba4f639d12b0e3b2a7527eab0b53..fc7e90eddd286f13edbf1b496d21dfc0cd5ea817 100644 (file)
@@ -91,6 +91,7 @@ exports[`renders 1`] = `
             },
           ]
         }
+        query={Object {}}
       />
       <ListFooter
         count={1}
index fcb14bef307e15aabb84054e30afbfe7f870b973..ad305f963874b285787864cf1e3a9f842e6b10e1 100644 (file)
@@ -208,7 +208,9 @@ no_data=No data
 no_results=No results
 no_results_for_x=No results for "{0}"
 no_results_search=We couldn't find any results matching selected criteria.
+no_results_search.favorites=We couldn't find any results matching selected criteria in your favorites.
 no_results_search.2=Try to change filters to get some results.
+no_results_search.favorites.2=Would you like to search among {url} projects?
 page_extension_failed=Page extension failed.
 set_as_default=Set as Default
 unset_as_default=Unset as Default