From 21564830954879a86a2f2803c82d3d6819c03aee Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 31 Jan 2021 13:37:31 +0800 Subject: ... --- FrontEnd/src/app/locales/en/translation.json | 9 +++++++++ FrontEnd/src/app/locales/zh/translation.json | 9 +++++++++ FrontEnd/src/app/views/search/index.tsx | 26 ++++++++++++++++++++------ 3 files changed, 38 insertions(+), 6 deletions(-) (limited to 'FrontEnd/src') diff --git a/FrontEnd/src/app/locales/en/translation.json b/FrontEnd/src/app/locales/en/translation.json index c86e1e33..408950b1 100644 --- a/FrontEnd/src/app/locales/en/translation.json +++ b/FrontEnd/src/app/locales/en/translation.json @@ -4,6 +4,10 @@ "edit": "Edit", "done": "Done", "loadFailReload": "Load failed, click <1>here to reload.", + "error": { + "network": "Network error.", + "unknown": "Unknown error." + }, "serviceWorker": { "availableOffline": "Timeline is now cached in your computer and you can use it offline. 🎉🎉🎉", "upgradePrompt": "App is getting a new version!", @@ -111,6 +115,11 @@ "addBookmarkFail": "Failed to add bookmark.", "removeBookmarkFail": "Failed to remove bookmark." }, + "searchPage": { + "loading": "Loading search result...", + "input": "Input something and search!", + "noResult": "Sorry, there is no satisfied results." + }, "user": { "username": "username", "password": "password", diff --git a/FrontEnd/src/app/locales/zh/translation.json b/FrontEnd/src/app/locales/zh/translation.json index 4c839387..498a74e4 100644 --- a/FrontEnd/src/app/locales/zh/translation.json +++ b/FrontEnd/src/app/locales/zh/translation.json @@ -4,6 +4,10 @@ "edit": "编辑", "done": "完成", "loadFailReload": "加载失败,<1>点击重试。", + "error": { + "network": "网络错误。", + "unknown": "未知错误。" + }, "serviceWorker": { "availableOffline": "Timeline 已经缓存在本地,你可以离线使用它。🎉🎉🎉", "upgradePrompt": "App 有新版本!", @@ -111,6 +115,11 @@ "addBookmarkFail": "添加书签失败。", "removeBookmarkFail": "删除书签失败。" }, + "searchPage": { + "loading": "加载搜索结果中...", + "input": "输入一些东西来搜索!", + "noResult": "对不起,没有符合条件的结果。" + }, "user": { "username": "用户名", "password": "密码", diff --git a/FrontEnd/src/app/views/search/index.tsx b/FrontEnd/src/app/views/search/index.tsx index 8aff5f01..41f1e6b6 100644 --- a/FrontEnd/src/app/views/search/index.tsx +++ b/FrontEnd/src/app/views/search/index.tsx @@ -1,4 +1,5 @@ import React from "react"; +import { useTranslation } from "react-i18next"; import { Container, Row } from "react-bootstrap"; import { useHistory, useLocation } from "react-router"; import { Link } from "react-router-dom"; @@ -41,6 +42,8 @@ const TimelineSearchResultItemView: React.FC<{ timeline: TimelineInfo }> = ({ }; const SearchPage: React.FC = () => { + const { t } = useTranslation(); + const history = useHistory(); const location = useLocation(); const searchParams = new URLSearchParams(location.search); @@ -51,7 +54,10 @@ const SearchPage: React.FC = () => { TimelineInfo[] | "init" | "loading" | "network-error" | "error" >("init"); + const [forceResearchKey, setForceResearchKey] = React.useState(0); + React.useEffect(() => { + setState("init"); if (queryParam != null && queryParam.length > 0) { setSearchText(queryParam); setState("loading"); @@ -70,7 +76,7 @@ const SearchPage: React.FC = () => { } ); } - }, [queryParam]); + }, [queryParam, forceResearchKey]); return ( @@ -81,7 +87,9 @@ const SearchPage: React.FC = () => { onChange={setSearchText} loading={state === "loading"} onButtonClick={() => { - if (searchText.length > 0) { + if (queryParam === searchText) { + setForceResearchKey((old) => old + 1); + } else { history.push(`/search?q=${searchText}`); } }} @@ -90,18 +98,24 @@ const SearchPage: React.FC = () => { {(() => { switch (state) { case "init": { - return "Input something and search!"; + if (queryParam == null || queryParam.length === 0) { + return
{t("searchPage.input")}
; + } + break; } case "loading": { - return "Loading!"; + return
{t("searchPage.loading")}
; } case "network-error": { - return "Network error!"; + return
{t("error.network")}
; } case "error": { - return "Unknown error!"; + return
{t("error.unknown")}
; } default: { + if (state.length === 0) { + return
{t("searchPage.noResult")}
; + } return state.map((t) => ( )); -- cgit v1.2.3