aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx')
-rw-r--r--FrontEnd/src/app/views/timeline-common/TimelinePostEdit.tsx44
1 files changed, 31 insertions, 13 deletions
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<TimelinePostEditImageProps> = (props) => {
}
};
+ React.useEffect(() => {
+ return () => {
+ onSelect(null);
+ };
+ }, [onSelect]);
+
return (
<>
<Form.File
@@ -92,6 +99,14 @@ const TimelinePostEditImage: React.FC<TimelinePostEditImageProps> = (props) => {
);
};
+type PostKind = "text" | "markdown" | "image";
+
+const postKindIconClassNameMap: Record<PostKind, string> = {
+ text: "bi-fonts",
+ markdown: "bi-markdown",
+ image: "bi-image",
+};
+
export interface TimelinePostEditProps {
className?: string;
timeline: HttpTimelineInfo;
@@ -106,8 +121,6 @@ const TimelinePostEdit: React.FC<TimelinePostEditProps> = (props) => {
const [process, setProcess] = React.useState<boolean>(false);
- type PostKind = "text" | "markdown" | "image";
-
const [kind, setKind] = React.useState<PostKind>("text");
const [text, setText] = React.useState<string>("");
@@ -250,18 +263,23 @@ const TimelinePostEdit: React.FC<TimelinePostEditProps> = (props) => {
</Col>
<Col xs="auto" className="align-self-end m-1">
<div className="d-block text-center mt-1 mb-2">
- <Form.Control
- as="select"
- value={kind}
- onChange={(event) => {
- const { value } = event.currentTarget;
- setKind(value as PostKind);
- }}
+ <PopupMenu
+ items={(["text", "image", "markdown"] as const).map((kind) => ({
+ type: "button",
+ text: `timeline.post.type.${kind}`,
+ iconClassName: postKindIconClassNameMap[kind],
+ onClick: () => {
+ setKind(kind);
+ },
+ }))}
>
- <option value="text">text</option>
- <option value="image">image</option>
- <option value="markdown">markdown</option>
- </Form.Control>
+ <i
+ className={clsx(
+ postKindIconClassNameMap[kind],
+ "icon-button large"
+ )}
+ />
+ </PopupMenu>
</div>
<LoadingButton
variant="primary"