From 9ea76073b27ecf5f94debc80c0bb1b331317e75f Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Tue, 6 Sep 2022 18:24:34 +0200 Subject: [PATCH] Show warning for search requests without valid search context (#2114) --- gradle/changelog/invalid_search_context.yaml | 2 ++ scm-ui/ui-api/src/search.ts | 5 ++--- scm-ui/ui-webapp/public/locales/de/commons.json | 1 + scm-ui/ui-webapp/public/locales/en/commons.json | 1 + scm-ui/ui-webapp/src/search/Search.tsx | 12 ++++++++++-- 5 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 gradle/changelog/invalid_search_context.yaml diff --git a/gradle/changelog/invalid_search_context.yaml b/gradle/changelog/invalid_search_context.yaml new file mode 100644 index 0000000000..ed0cd49e8d --- /dev/null +++ b/gradle/changelog/invalid_search_context.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Show warning message for invalid search requests ([#2114](https://github.com/scm-manager/scm-manager/pull/2114)) diff --git a/scm-ui/ui-api/src/search.ts b/scm-ui/ui-api/src/search.ts index 529c1e8355..576cacb9dd 100644 --- a/scm-ui/ui-api/src/search.ts +++ b/scm-ui/ui-api/src/search.ts @@ -93,7 +93,6 @@ const findLink = (links: Link[], name: string) => { return l.href; } } - throw new Error(`could not find search link for ${name}`); }; const useSearchLinks = (options?: SearchOptions): SearchLinks => { @@ -105,11 +104,11 @@ const useSearchLinks = (options?: SearchOptions): SearchLinks => { ); if (options?.repositoryNameContext) { - return { links: repo?._links["search"] as Link[], isLoading: repoLoading }; + return { links: (repo?._links["search"] as Link[]) || [], isLoading: repoLoading }; } if (options?.namespaceContext) { - return { links: namespace?._links["search"] as Link[], isLoading: namespaceLoading }; + return { links: (namespace?._links["search"] as Link[]) || [], isLoading: namespaceLoading }; } const searchLinks = links["search"]; diff --git a/scm-ui/ui-webapp/public/locales/de/commons.json b/scm-ui/ui-webapp/public/locales/de/commons.json index a63ecb0981..53efc8a1eb 100644 --- a/scm-ui/ui-webapp/public/locales/de/commons.json +++ b/scm-ui/ui-webapp/public/locales/de/commons.json @@ -205,6 +205,7 @@ "types": "Ergebnisse", "noHits": "Keine Ergebnisse gefunden. Auf der rechten Seite finden Sie weitere Kategorien, in denen Ergebnisse vorhanden sein könnten", "syntaxHelp": "Finden Sie bessere Ergebnisse durch die Nutzung der vollen <0>Such-Syntax", + "invalid": "Ihre Suchanfrage ist ungültig. Bitte verwenden Sie einen gültigen Suchkontext.", "quickSearch": { "resultHeading": "Hilfe beim Suchen?", "parseError": "Der Suchstring is ungültig.", diff --git a/scm-ui/ui-webapp/public/locales/en/commons.json b/scm-ui/ui-webapp/public/locales/en/commons.json index 2c572cc18b..c154e80a92 100644 --- a/scm-ui/ui-webapp/public/locales/en/commons.json +++ b/scm-ui/ui-webapp/public/locales/en/commons.json @@ -206,6 +206,7 @@ "types": "Results", "noHits": "No results found. On the right side you will find other categories where results might be available", "syntaxHelp": "Find better results by using the full <0>search syntax", + "invalid": "Your search request is invalid. Please be sure to use a valid search context.", "quickSearch": { "resultHeading": "Need help?", "parseError": "Failed to parse query.", diff --git a/scm-ui/ui-webapp/src/search/Search.tsx b/scm-ui/ui-webapp/src/search/Search.tsx index c258038c5d..5b0fee651c 100644 --- a/scm-ui/ui-webapp/src/search/Search.tsx +++ b/scm-ui/ui-webapp/src/search/Search.tsx @@ -27,6 +27,7 @@ import { CustomQueryFlexWrappedColumns, Level, NavLink, + Notification, Page, PrimaryContentColumn, SecondaryNavigation, @@ -75,7 +76,7 @@ const usePageParams = () => { const location = useLocation(); const { type: selectedType, ...params } = useParams(); const page = urls.getPageFromMatch({ params }); - const query = urls.getQueryStringFromLocation(location); + const query = urls.getQueryStringFromLocation(location) || ""; const namespace = urls.getValueStringFromLocationByKey(location, "namespace"); const name = urls.getValueStringFromLocationByKey(location, "name"); return { @@ -127,6 +128,11 @@ const SearchSubTitle: FC = ({ selectedType, query }) => { ); }; +const InvalidSearch: FC = () => { + const [t] = useTranslation("commons"); + return {t("search.invalid")}; +}; + const Search: FC = () => { const [t] = useTranslation(["commons", "plugins"]); const [showHelp, setShowHelp] = useState(false); @@ -220,7 +226,9 @@ const Search: FC = () => { )} - ) : null} + ) : ( + + )} ); };