diff options
Diffstat (limited to 'FrontEnd/src')
-rw-r--r-- | FrontEnd/src/App.tsx | 4 | ||||
-rw-r--r-- | FrontEnd/src/migrating/admin/Admin.tsx (renamed from FrontEnd/src/views/admin/Admin.tsx) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/admin/AdminNav.tsx (renamed from FrontEnd/src/views/admin/AdminNav.tsx) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/admin/MoreAdmin.tsx (renamed from FrontEnd/src/views/admin/MoreAdmin.tsx) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/admin/UserAdmin.tsx (renamed from FrontEnd/src/views/admin/UserAdmin.tsx) | 39 | ||||
-rw-r--r-- | FrontEnd/src/migrating/admin/index.css (renamed from FrontEnd/src/views/admin/index.css) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/admin/index.tsx (renamed from FrontEnd/src/views/admin/index.tsx) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/center/CenterBoards.tsx (renamed from FrontEnd/src/views/center/CenterBoards.tsx) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/center/TimelineBoard.tsx (renamed from FrontEnd/src/views/center/TimelineBoard.tsx) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/center/TimelineCreateDialog.tsx (renamed from FrontEnd/src/views/center/TimelineCreateDialog.tsx) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/center/index.css (renamed from FrontEnd/src/views/center/index.css) | 0 | ||||
-rw-r--r-- | FrontEnd/src/migrating/center/index.tsx (renamed from FrontEnd/src/views/center/index.tsx) | 0 | ||||
-rw-r--r-- | FrontEnd/src/services/alert.ts | 4 | ||||
-rw-r--r-- | FrontEnd/src/views/common/button/LoadingButton.css | 2 | ||||
-rw-r--r-- | FrontEnd/src/views/search/index.css | 15 | ||||
-rw-r--r-- | FrontEnd/src/views/search/index.tsx | 131 |
16 files changed, 21 insertions, 174 deletions
diff --git a/FrontEnd/src/App.tsx b/FrontEnd/src/App.tsx index ca3e4d38..6029daac 100644 --- a/FrontEnd/src/App.tsx +++ b/FrontEnd/src/App.tsx @@ -10,8 +10,6 @@ import LoginPage from "./pages/login"; import RegisterPage from "./pages/register"; import TimelinePage from "./pages/timeline"; import LoadingPage from "./pages/loading"; -import Search from "./views/search"; -import Admin from "./views/admin"; import AlertHost from "./views/common/alert/AlertHost"; export default function App() { @@ -25,8 +23,6 @@ export default function App() { <Route path="register" element={<RegisterPage />} /> <Route path="settings" element={<SettingPage />} /> <Route path="about" element={<AboutPage />} /> - <Route path="search" element={<Search />} /> - <Route path="admin/*" element={<Admin />} /> <Route path=":owner" element={<TimelinePage />} /> <Route path=":owner/:timeline" element={<TimelinePage />} /> <Route path="" element={<HomePage />} /> diff --git a/FrontEnd/src/views/admin/Admin.tsx b/FrontEnd/src/migrating/admin/Admin.tsx index 986c36b4..986c36b4 100644 --- a/FrontEnd/src/views/admin/Admin.tsx +++ b/FrontEnd/src/migrating/admin/Admin.tsx diff --git a/FrontEnd/src/views/admin/AdminNav.tsx b/FrontEnd/src/migrating/admin/AdminNav.tsx index b7385e5c..b7385e5c 100644 --- a/FrontEnd/src/views/admin/AdminNav.tsx +++ b/FrontEnd/src/migrating/admin/AdminNav.tsx diff --git a/FrontEnd/src/views/admin/MoreAdmin.tsx b/FrontEnd/src/migrating/admin/MoreAdmin.tsx index d49d211f..d49d211f 100644 --- a/FrontEnd/src/views/admin/MoreAdmin.tsx +++ b/FrontEnd/src/migrating/admin/MoreAdmin.tsx diff --git a/FrontEnd/src/views/admin/UserAdmin.tsx b/FrontEnd/src/migrating/admin/UserAdmin.tsx index d5179bf5..08560c87 100644 --- a/FrontEnd/src/views/admin/UserAdmin.tsx +++ b/FrontEnd/src/migrating/admin/UserAdmin.tsx @@ -1,3 +1,6 @@ +// eslint-disable +// @ts-nocheck + import { useState, useEffect } from "react"; import * as React from "react"; import { Trans, useTranslation } from "react-i18next"; @@ -5,9 +8,7 @@ import classnames from "classnames"; import { getHttpUserClient, HttpUser, kUserPermissionList } from "@/http/user"; -import OperationDialog, { - OperationDialogBoolInput, -} from "../common/dialog/OperationDialog"; +import OperationDialog from "../common/dialog/OperationDialog"; import Button from "../common/button/Button"; import Spinner from "../common/Spinner"; import FlatButton from "../common/button/FlatButton"; @@ -21,18 +22,15 @@ const CreateUserDialog: React.FC<{ return ( <OperationDialog title="admin:user.dialog.create.title" - themeColor="success" inputPrompt="admin:user.dialog.create.prompt" - inputScheme={ - [ - { type: "text", label: "admin:user.username" }, - { type: "text", label: "admin:user.password" }, - ] as const - } - onProcess={([username, password]) => + inputs={[ + { key: "username", type: "text", label: "admin:user.username" }, + { key: "password", type: "text", label: "admin:user.password" }, + ]} + onProcess={({ username, password }) => getHttpUserClient().post({ - username, - password, + username: username as string, + password: password as string, }) } onClose={close} @@ -80,13 +78,12 @@ const UserModifyDialog: React.FC<{ open={open} onClose={close} title="admin:user.dialog.modify.title" - themeColor="danger" - inputPrompt={() => ( + inputPromptNode={ <Trans i18nKey="admin:user.dialog.modify.prompt"> 0<UsernameLabel>{user.username}</UsernameLabel>2 </Trans> - )} - inputScheme={ + } + inputs={ [ { type: "text", @@ -120,7 +117,7 @@ const UserPermissionModifyDialog: React.FC<{ onSuccess: () => void; }> = ({ open, close, user, onSuccess }) => { const oldPermissionBoolList: boolean[] = kUserPermissionList.map( - (permission) => user.permissions.includes(permission) + (permission) => user.permissions.includes(permission), ); return ( @@ -139,7 +136,7 @@ const UserPermissionModifyDialog: React.FC<{ type: "bool", label: { type: "custom", value: permission }, initValue: oldPermissionBoolList[index], - }) + }), )} onProcess={async (newPermissionBoolList): Promise<boolean[]> => { for (let index = 0; index < kUserPermissionList.length; index++) { @@ -150,12 +147,12 @@ const UserPermissionModifyDialog: React.FC<{ if (newValue) { await getHttpUserClient().putUserPermission( user.username, - permission + permission, ); } else { await getHttpUserClient().deleteUserPermission( user.username, - permission + permission, ); } } diff --git a/FrontEnd/src/views/admin/index.css b/FrontEnd/src/migrating/admin/index.css index 17e24586..17e24586 100644 --- a/FrontEnd/src/views/admin/index.css +++ b/FrontEnd/src/migrating/admin/index.css diff --git a/FrontEnd/src/views/admin/index.tsx b/FrontEnd/src/migrating/admin/index.tsx index 0467711d..0467711d 100644 --- a/FrontEnd/src/views/admin/index.tsx +++ b/FrontEnd/src/migrating/admin/index.tsx diff --git a/FrontEnd/src/views/center/CenterBoards.tsx b/FrontEnd/src/migrating/center/CenterBoards.tsx index a8be2c29..a8be2c29 100644 --- a/FrontEnd/src/views/center/CenterBoards.tsx +++ b/FrontEnd/src/migrating/center/CenterBoards.tsx diff --git a/FrontEnd/src/views/center/TimelineBoard.tsx b/FrontEnd/src/migrating/center/TimelineBoard.tsx index b3ccdf8c..b3ccdf8c 100644 --- a/FrontEnd/src/views/center/TimelineBoard.tsx +++ b/FrontEnd/src/migrating/center/TimelineBoard.tsx diff --git a/FrontEnd/src/views/center/TimelineCreateDialog.tsx b/FrontEnd/src/migrating/center/TimelineCreateDialog.tsx index 63742936..63742936 100644 --- a/FrontEnd/src/views/center/TimelineCreateDialog.tsx +++ b/FrontEnd/src/migrating/center/TimelineCreateDialog.tsx diff --git a/FrontEnd/src/views/center/index.css b/FrontEnd/src/migrating/center/index.css index a779ff90..a779ff90 100644 --- a/FrontEnd/src/views/center/index.css +++ b/FrontEnd/src/migrating/center/index.css diff --git a/FrontEnd/src/views/center/index.tsx b/FrontEnd/src/migrating/center/index.tsx index 77af2c20..77af2c20 100644 --- a/FrontEnd/src/views/center/index.tsx +++ b/FrontEnd/src/migrating/center/index.tsx diff --git a/FrontEnd/src/services/alert.ts b/FrontEnd/src/services/alert.ts index 42b14451..2f66dccc 100644 --- a/FrontEnd/src/services/alert.ts +++ b/FrontEnd/src/services/alert.ts @@ -1,10 +1,10 @@ import pull from "lodash/pull"; import { I18nText } from "@/common"; -import { PaletteColorType } from "@/palette"; +import { ThemeColor } from "@/views/common/common"; export interface AlertInfo { - type?: PaletteColorType; + type?: ThemeColor; message?: I18nText; customMessage?: React.ReactElement; dismissTime?: number | "never"; diff --git a/FrontEnd/src/views/common/button/LoadingButton.css b/FrontEnd/src/views/common/button/LoadingButton.css index 2f73116a..0a7e4a3a 100644 --- a/FrontEnd/src/views/common/button/LoadingButton.css +++ b/FrontEnd/src/views/common/button/LoadingButton.css @@ -11,4 +11,4 @@ .cru-loading-button-spinner { margin-left: 0.5em; -} +}
\ No newline at end of file diff --git a/FrontEnd/src/views/search/index.css b/FrontEnd/src/views/search/index.css deleted file mode 100644 index 6ff4d9fa..00000000 --- a/FrontEnd/src/views/search/index.css +++ /dev/null @@ -1,15 +0,0 @@ -.timeline-search-result-item {
- border: 1px solid;
- border-color: #e9ecef;
- background: #f8f9fa;
- transition: all 0.3s;
-}
-.timeline-search-result-item:hover {
- border-color: #0d6efd;
-}
-
-.timeline-search-result-item-avatar {
- width: 2em;
- height: 2em;
- border-radius: 50%;
-}
diff --git a/FrontEnd/src/views/search/index.tsx b/FrontEnd/src/views/search/index.tsx deleted file mode 100644 index 58257465..00000000 --- a/FrontEnd/src/views/search/index.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import * as React from "react"; -import { useTranslation } from "react-i18next"; -import { useNavigate, useLocation } from "react-router-dom"; -import { Link } from "react-router-dom"; - -import { HttpNetworkError } from "@/http/common"; -import { getHttpSearchClient } from "@/http/search"; -import { HttpTimelineInfo } from "@/http/timeline"; - -import SearchInput from "../common/SearchInput"; -import UserAvatar from "../common/user/UserAvatar"; - -import "./index.css"; - -const TimelineSearchResultItemView: React.FC<{ - timeline: HttpTimelineInfo; -}> = ({ timeline }) => { - return ( - <div className="timeline-search-result-item my-2 p-3"> - <h4> - <Link - to={`/${timeline.owner.username}/${timeline.nameV2}`} - className="mb-2 text-primary" - > - {timeline.title} - <small className="ms-3 text-secondary">{timeline.nameV2}</small> - </Link> - </h4> - <div> - <UserAvatar - username={timeline.owner.username} - className="timeline-search-result-item-avatar me-2" - /> - {timeline.owner.nickname} - <small className="ms-3 text-secondary"> - @{timeline.owner.username} - </small> - </div> - </div> - ); -}; - -const SearchPage: React.FC = () => { - const { t } = useTranslation(); - - const navigate = useNavigate(); - const location = useLocation(); - const searchParams = new URLSearchParams(location.search); - const queryParam = searchParams.get("q"); - - const [searchText, setSearchText] = React.useState<string>(""); - const [state, setState] = React.useState< - HttpTimelineInfo[] | "init" | "loading" | "network-error" | "error" - >("init"); - - const [forceResearchKey, setForceResearchKey] = React.useState<number>(0); - - React.useEffect(() => { - setState("init"); - if (queryParam != null && queryParam.length > 0) { - setSearchText(queryParam); - setState("loading"); - void getHttpSearchClient() - .searchTimelines(queryParam) - .then( - (ts) => { - setState(ts); - }, - (e) => { - if (e instanceof HttpNetworkError) { - setState("network-error"); - } else { - setState("error"); - } - } - ); - } - }, [queryParam, forceResearchKey]); - - return ( - <div className="container my-3"> - <div className="row justify-content-center"> - <SearchInput - className="col-12 col-sm-9 col-md-6" - value={searchText} - onChange={setSearchText} - loading={state === "loading"} - onButtonClick={() => { - if (queryParam === searchText) { - setForceResearchKey((old) => old + 1); - } else { - navigate(`/search?q=${searchText}`); - } - }} - /> - </div> - {(() => { - switch (state) { - case "init": { - if (queryParam == null || queryParam.length === 0) { - return <div>{t("searchPage.input")}</div>; - } - break; - } - case "loading": { - return <div>{t("searchPage.loading")}</div>; - } - case "network-error": { - return <div className="text-danger">{t("error.network")}</div>; - } - case "error": { - return <div className="text-danger">{t("error.unknown")}</div>; - } - default: { - if (state.length === 0) { - return <div>{t("searchPage.noResult")}</div>; - } - return state.map((t) => ( - <TimelineSearchResultItemView - key={`${t.owner.username}/${t.nameV2}`} - timeline={t} - /> - )); - } - } - })()} - </div> - ); -}; - -export default SearchPage; |