From fa3b2bad71eae374d639073077030af9c5a908ff Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 7 Mar 2021 22:12:05 +0800 Subject: ... --- FrontEnd/src/app/views/common/Menu.tsx | 5 ++- FrontEnd/src/app/views/common/common.sass | 3 ++ .../app/views/timeline-common/TimelinePostEdit.tsx | 44 +++++++++++++++------- 3 files changed, 38 insertions(+), 14 deletions(-) (limited to 'FrontEnd/src/app/views') diff --git a/FrontEnd/src/app/views/common/Menu.tsx b/FrontEnd/src/app/views/common/Menu.tsx index c2110c9c..54650f22 100644 --- a/FrontEnd/src/app/views/common/Menu.tsx +++ b/FrontEnd/src/app/views/common/Menu.tsx @@ -12,6 +12,7 @@ export type MenuItem = | { type: "button"; text: I18nText; + iconClassName?: string; color?: BootstrapThemeColor; onClick: () => void; }; @@ -44,6 +45,9 @@ const Menu: React.FC = ({ items, className, onItemClicked }) => { onItemClicked?.(); }} > + {item.iconClassName != null ? ( + + ) : null} {convertI18nText(item.text, t)} ); @@ -67,7 +71,6 @@ export const PopupMenu: React.FC = ({ items, children }) => { return ( diff --git a/FrontEnd/src/app/views/common/common.sass b/FrontEnd/src/app/views/common/common.sass index 819408a0..0a30d995 100644 --- a/FrontEnd/src/app/views/common/common.sass +++ b/FrontEnd/src/app/views/common/common.sass @@ -87,5 +87,8 @@ color: white background-color: $value +.cru-menu-item-icon + margin-right: 1em + .cru-menu-divider border-top: 1px solid $gray-200 diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx index 9d742514..6c428b74 100644 --- a/FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx +++ b/FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx @@ -17,6 +17,7 @@ import { base64 } from "@/http/common"; import BlobImage from "../common/BlobImage"; import LoadingButton from "../common/LoadingButton"; +import { PopupMenu } from "../common/Menu"; interface TimelinePostEditTextProps { text: string; @@ -67,6 +68,12 @@ const TimelinePostEditImage: React.FC = (props) => { } }; + React.useEffect(() => { + return () => { + onSelect(null); + }; + }, [onSelect]); + return ( <> = (props) => { ); }; +type PostKind = "text" | "markdown" | "image"; + +const postKindIconClassNameMap: Record = { + text: "bi-fonts", + markdown: "bi-markdown", + image: "bi-image", +}; + export interface TimelinePostEditProps { className?: string; timeline: HttpTimelineInfo; @@ -106,8 +121,6 @@ const TimelinePostEdit: React.FC = (props) => { const [process, setProcess] = React.useState(false); - type PostKind = "text" | "markdown" | "image"; - const [kind, setKind] = React.useState("text"); const [text, setText] = React.useState(""); @@ -250,18 +263,23 @@ const TimelinePostEdit: React.FC = (props) => {
- { - const { value } = event.currentTarget; - setKind(value as PostKind); - }} + ({ + type: "button", + text: `timeline.post.type.${kind}`, + iconClassName: postKindIconClassNameMap[kind], + onClick: () => { + setKind(kind); + }, + }))} > - - - - + +