From fa540c046d126449f77e46edd379bbc84e02d05d Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 26 Jun 2021 00:00:54 +0800 Subject: ... --- FrontEnd/src/views/admin/Admin.tsx | 5 +- FrontEnd/src/views/admin/UserAdmin.tsx | 17 ++- FrontEnd/src/views/center/CenterBoards.tsx | 25 ++-- FrontEnd/src/views/center/index.tsx | 24 ++-- FrontEnd/src/views/common/ConfirmDialog.tsx | 18 +-- FrontEnd/src/views/common/button/Button.css | 0 FrontEnd/src/views/common/button/Button.tsx | 30 +++++ FrontEnd/src/views/common/button/FlatButton.tsx | 31 +---- FrontEnd/src/views/common/button/TextButton.tsx | 31 +---- FrontEnd/src/views/common/button/common.ts | 31 +++++ FrontEnd/src/views/login/index.tsx | 5 +- FrontEnd/src/views/search/index.tsx | 9 +- FrontEnd/src/views/settings/ChangeAvatarDialog.tsx | 133 +++++++++++++-------- FrontEnd/src/views/settings/index.tsx | 33 ++--- .../src/views/timeline-common/TimelineMember.tsx | 35 +++--- .../views/timeline-common/TimelinePageTemplate.tsx | 4 +- .../TimelinePostDeleteConfirmDialog.tsx | 11 +- .../src/views/timeline-common/TimelinePostEdit.tsx | 13 +- 18 files changed, 248 insertions(+), 207 deletions(-) create mode 100644 FrontEnd/src/views/common/button/Button.css create mode 100644 FrontEnd/src/views/common/button/Button.tsx create mode 100644 FrontEnd/src/views/common/button/common.ts (limited to 'FrontEnd/src/views') diff --git a/FrontEnd/src/views/admin/Admin.tsx b/FrontEnd/src/views/admin/Admin.tsx index 34e7e2f6..9393a61f 100644 --- a/FrontEnd/src/views/admin/Admin.tsx +++ b/FrontEnd/src/views/admin/Admin.tsx @@ -1,6 +1,5 @@ import React, { Fragment } from "react"; import { Redirect, Route, Switch, useRouteMatch, match } from "react-router"; -import { Container } from "react-bootstrap"; import { useTranslation } from "react-i18next"; import { AuthUser } from "@/services/user"; @@ -29,7 +28,7 @@ const Admin: React.FC = ({ user }) => { const match = p.match as match<{ name: string }>; const name = match.params["name"]; return ( - +
{(() => { if (name === "users") { @@ -38,7 +37,7 @@ const Admin: React.FC = ({ user }) => { return ; } })()} - +
); }} diff --git a/FrontEnd/src/views/admin/UserAdmin.tsx b/FrontEnd/src/views/admin/UserAdmin.tsx index eb141520..2a123a76 100644 --- a/FrontEnd/src/views/admin/UserAdmin.tsx +++ b/FrontEnd/src/views/admin/UserAdmin.tsx @@ -1,6 +1,5 @@ import React, { useState, useEffect } from "react"; import classnames from "classnames"; -import { ListGroup, Row, Col, Spinner, Button } from "react-bootstrap"; import OperationDialog, { OperationDialogBoolInput, @@ -14,6 +13,7 @@ import { UserPermission, } from "@/http/user"; import { Trans, useTranslation } from "react-i18next"; +import Button from "../common/button/Button"; import TextButton from "../common/button/TextButton"; interface DialogProps { @@ -372,20 +372,19 @@ const UserAdmin: React.FC = () => { return ( <> - - +
+
- - + /> +
+
{userComponents} {dialogNode} diff --git a/FrontEnd/src/views/center/CenterBoards.tsx b/FrontEnd/src/views/center/CenterBoards.tsx index f5200415..392c2d08 100644 --- a/FrontEnd/src/views/center/CenterBoards.tsx +++ b/FrontEnd/src/views/center/CenterBoards.tsx @@ -1,5 +1,4 @@ import React from "react"; -import { Row, Col } from "react-bootstrap"; import { useTranslation } from "react-i18next"; import { pushAlert } from "@/services/alert"; @@ -18,10 +17,10 @@ const CenterBoards: React.FC = () => { return ( <> - - - - +
+
+
+
getHttpBookmarkClient().list()} @@ -52,8 +51,8 @@ const CenterBoards: React.FC = () => { }, }} /> - - +
+
getHttpHighlightClient().list()} @@ -88,18 +87,18 @@ const CenterBoards: React.FC = () => { : undefined } /> - - - - +
+
+
+
getHttpTimelineClient().listTimeline({ relate: user.username }) } /> - - +
+
); }; diff --git a/FrontEnd/src/views/center/index.tsx b/FrontEnd/src/views/center/index.tsx index 28d8b372..dfad082a 100644 --- a/FrontEnd/src/views/center/index.tsx +++ b/FrontEnd/src/views/center/index.tsx @@ -1,11 +1,10 @@ import React from "react"; import { useHistory } from "react-router"; -import { useTranslation } from "react-i18next"; -import { Row, Container, Button, Col } from "react-bootstrap"; import { useUserLoggedIn } from "@/services/user"; import SearchInput from "../common/SearchInput"; +import Button from "../common/button/Button"; import CenterBoards from "./CenterBoards"; import TimelineCreateDialog from "./TimelineCreateDialog"; @@ -14,8 +13,6 @@ import "./index.css"; const HomePage: React.FC = () => { const history = useHistory(); - const { t } = useTranslation(); - const user = useUserLoggedIn(); const [navText, setNavText] = React.useState(""); @@ -24,9 +21,9 @@ const HomePage: React.FC = () => { return ( <> - - - +
+
+
{ additionalButton={ user != null && ( + /> ) } /> - - +
+
- +
{dialog === "create" && ( void; onConfirm: () => void; @@ -20,18 +21,19 @@ const ConfirmDialog: React.FC<{ {convertI18nText(body, t)} - + /> ); diff --git a/FrontEnd/src/views/common/button/Button.css b/FrontEnd/src/views/common/button/Button.css new file mode 100644 index 00000000..e69de29b diff --git a/FrontEnd/src/views/common/button/Button.tsx b/FrontEnd/src/views/common/button/Button.tsx new file mode 100644 index 00000000..11710647 --- /dev/null +++ b/FrontEnd/src/views/common/button/Button.tsx @@ -0,0 +1,30 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; + +import { calculateProps, CommonButtonProps } from "./common"; + +import "./Button.css"; + +function _Button( + props: CommonButtonProps & { customButtonClassName?: string }, + ref: React.ForwardedRef +): React.ReactElement | null { + const { t } = useTranslation(); + + const { customButtonClassName, ...otherProps } = props; + + const { newProps, children } = calculateProps( + otherProps, + customButtonClassName ?? "cru-button", + t + ); + + return ( + + ); +} + +const Button = React.forwardRef(_Button); +export default Button; diff --git a/FrontEnd/src/views/common/button/FlatButton.tsx b/FrontEnd/src/views/common/button/FlatButton.tsx index 6351971a..266ea908 100644 --- a/FrontEnd/src/views/common/button/FlatButton.tsx +++ b/FrontEnd/src/views/common/button/FlatButton.tsx @@ -1,39 +1,16 @@ import React from "react"; -import { useTranslation } from "react-i18next"; -import classNames from "classnames"; -import { convertI18nText, I18nText } from "@/common"; -import { PaletteColorType } from "@/palette"; +import { CommonButtonProps } from "./common"; +import Button from "./Button"; import "./FlatButton.css"; function _FlatButton( - { - text, - color, - onClick, - className, - style, - }: { - text: I18nText; - color?: PaletteColorType; - onClick?: (e: React.MouseEvent) => void; - className?: string; - style?: React.CSSProperties; - }, + props: CommonButtonProps, ref: React.ForwardedRef ): React.ReactElement | null { - const { t } = useTranslation(); - return ( - + + + - + /> ); @@ -220,17 +229,21 @@ const ChangeAvatarDialog: React.FC = (props) => { return ( <> - +
{t("settings.dialogChangeAvatar.prompt.processingCrop")} - +
- - + - - + + - + - + - + /> + ) : null} -
+ ); }; @@ -152,7 +151,7 @@ const TimelineMember: React.FC = (props) => { const members = [timeline.owner, ...timeline.members]; return ( - +
{members.map((member, index) => ( = (props) => { {timeline.manageable ? ( ) : null} - +
); }; diff --git a/FrontEnd/src/views/timeline-common/TimelinePageTemplate.tsx b/FrontEnd/src/views/timeline-common/TimelinePageTemplate.tsx index 6f032eae..d05f18d4 100644 --- a/FrontEnd/src/views/timeline-common/TimelinePageTemplate.tsx +++ b/FrontEnd/src/views/timeline-common/TimelinePageTemplate.tsx @@ -75,7 +75,7 @@ const TimelinePageTemplate: React.FC = (props) => { connectionStatus={connectionStatus} /> ) : null} - +
= (props) => { onTimelineLoaded={(t) => setTimeline(t)} onConnectionStateChanged={setConnectionStatus} /> - +
); }; diff --git a/FrontEnd/src/views/timeline-common/TimelinePostDeleteConfirmDialog.tsx b/FrontEnd/src/views/timeline-common/TimelinePostDeleteConfirmDialog.tsx index b2c7a470..e04bb7e1 100644 --- a/FrontEnd/src/views/timeline-common/TimelinePostDeleteConfirmDialog.tsx +++ b/FrontEnd/src/views/timeline-common/TimelinePostDeleteConfirmDialog.tsx @@ -1,7 +1,8 @@ import React from "react"; -import { Modal, Button } from "react-bootstrap"; import { useTranslation } from "react-i18next"; +import Button from "../common/button/Button"; + const TimelinePostDeleteConfirmDialog: React.FC<{ onClose: () => void; onConfirm: () => void; @@ -17,9 +18,11 @@ const TimelinePostDeleteConfirmDialog: React.FC<{ {t("timeline.post.deleteDialog.prompt")} - +