From 3bcb1e10d3e97309ff8ede707dc5c3c057ba27ca Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Thu, 2 Jan 2025 11:45:31 +0000 Subject: fix: Add i18n for query explainer and add missing url matcher --- .../dashboard/search/QueryExplainerTooltip.tsx | 71 +++++++++++++++++----- 1 file changed, 57 insertions(+), 14 deletions(-) (limited to 'apps/web/components/dashboard/search/QueryExplainerTooltip.tsx') diff --git a/apps/web/components/dashboard/search/QueryExplainerTooltip.tsx b/apps/web/components/dashboard/search/QueryExplainerTooltip.tsx index 13174fb2..f5f73be3 100644 --- a/apps/web/components/dashboard/search/QueryExplainerTooltip.tsx +++ b/apps/web/components/dashboard/search/QueryExplainerTooltip.tsx @@ -1,5 +1,6 @@ import InfoTooltip from "@/components/ui/info-tooltip"; import { Table, TableBody, TableCell, TableRow } from "@/components/ui/table"; +import { useTranslation } from "@/lib/i18n/client"; import { TextAndMatcher } from "@hoarder/shared/searchQueryParser"; import { Matcher } from "@hoarder/shared/types/search"; @@ -13,6 +14,7 @@ export default function QueryExplainerTooltip({ parsedSearchQuery: TextAndMatcher & { result: string }; className?: string; }) { + const { t } = useTranslation(); if (parsedSearchQuery.result == "invalid") { return null; } @@ -23,7 +25,9 @@ export default function QueryExplainerTooltip({ return ( - {matcher.inverse ? "Doesn't have" : "Has"} Tag + {matcher.inverse + ? t("search.does_not_have_tag") + : t("search.has_tag")} {matcher.tagName} @@ -32,7 +36,9 @@ export default function QueryExplainerTooltip({ return ( - {matcher.inverse ? "Is not in" : "Is in "} List + {matcher.inverse + ? t("search.is_not_in_list") + : t("search.is_in_list")} {matcher.listName} @@ -40,50 +46,72 @@ export default function QueryExplainerTooltip({ case "dateAfter": return ( - {matcher.inverse ? "Not" : ""} Created After + + {matcher.inverse + ? t("search.not_created_on_or_after") + : t("search.created_on_or_after")} + {matcher.dateAfter.toDateString()} ); case "dateBefore": return ( - {matcher.inverse ? "Not" : ""} Created Before + + {matcher.inverse + ? t("search.not_created_on_or_before") + : t("search.created_on_or_before")} + {matcher.dateBefore.toDateString()} ); case "favourited": return ( - Favourited - {matcher.favourited.toString()} + + {matcher.favourited + ? t("search.is_favorited") + : t("search.is_not_favorited")} + ); case "archived": return ( - Archived - {matcher.archived.toString()} + + {matcher.archived + ? t("search.is_archived") + : t("search.is_not_archived")} + ); case "tagged": return ( - Has Tags - {matcher.tagged.toString()} + + {matcher.tagged + ? t("search.has_any_tag") + : t("search.has_no_tags")} + ); case "inlist": return ( - In Any List - {matcher.inList.toString()} + + {matcher.inList + ? t("search.is_in_any_list") + : t("search.is_not_in_any_list")} + ); case "and": case "or": return ( - {matcher.type} + + {matcher.type === "and" ? t("search.and") : t("search.or")} + @@ -95,6 +123,21 @@ export default function QueryExplainerTooltip({ ); + case "url": + return ( + + + {matcher.inverse + ? t("search.url_does_not_contain") + : t("search.url_contains")} + + {matcher.url} + + ); + default: { + const _exhaustiveCheck: never = matcher; + return null; + } } }; @@ -105,7 +148,7 @@ export default function QueryExplainerTooltip({ {parsedSearchQuery.text && ( - Text + {t("search.full_text_search")} {parsedSearchQuery.text} )} -- cgit v1.2.3-70-g09d2