aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-03-18 21:41:11 +0800
committercrupest <crupest@outlook.com>2021-03-18 21:41:11 +0800
commit13beccf6154a99c95df8c5d01ccfc67c62f27b5a (patch)
treebba5482069be68abba7563f7950859e65aff2969 /FrontEnd/src
parentf9133bcac71a4e3f46830083df0f27e20d65b058 (diff)
downloadtimeline-13beccf6154a99c95df8c5d01ccfc67c62f27b5a.tar.gz
timeline-13beccf6154a99c95df8c5d01ccfc67c62f27b5a.tar.bz2
timeline-13beccf6154a99c95df8c5d01ccfc67c62f27b5a.zip
feat: Prevent send empty.
Diffstat (limited to 'FrontEnd/src')
-rw-r--r--FrontEnd/src/app/index.sass17
-rw-r--r--FrontEnd/src/app/views/common/FlatButton.tsx36
-rw-r--r--FrontEnd/src/app/views/timeline-common/MarkdownPostEdit.tsx12
3 files changed, 55 insertions, 10 deletions
diff --git a/FrontEnd/src/app/index.sass b/FrontEnd/src/app/index.sass
index 60f274c2..2079cad8 100644
--- a/FrontEnd/src/app/index.sass
+++ b/FrontEnd/src/app/index.sass
@@ -45,8 +45,15 @@ small
cursor: pointer
padding: 0.2em 0.5em
border-radius: 0.2em
- &:hover
+ &:hover:not(.disabled)
background-color: $gray-200
+ &.disabled
+ cursor: default
+ @each $color, $value in $theme-colors
+ &.#{$color}
+ color: $value
+ &.disabled
+ color: adjust-color($value, $lightness: +15%)
.cursor-pointer
cursor: pointer
@@ -81,10 +88,10 @@ textarea
.text-yellow
color: $yellow
-@each $color, $value in $theme-colors
- .text-button
- background: transparent
- border: none
+.text-button
+ background: transparent
+ border: none
+ @each $color, $value in $theme-colors
&.#{$color}
color: $value
&:hover
diff --git a/FrontEnd/src/app/views/common/FlatButton.tsx b/FrontEnd/src/app/views/common/FlatButton.tsx
new file mode 100644
index 00000000..80bb654c
--- /dev/null
+++ b/FrontEnd/src/app/views/common/FlatButton.tsx
@@ -0,0 +1,36 @@
+import React from "react";
+import clsx from "clsx";
+
+import { BootstrapThemeColor } from "@/common";
+
+export interface FlatButtonProps {
+ variant?: BootstrapThemeColor | string;
+ disabled?: boolean;
+ className?: string;
+ style?: React.CSSProperties;
+ onClick?: () => void;
+}
+
+const FlatButton: React.FC<FlatButtonProps> = (props) => {
+ const { disabled, className, style } = props;
+ const variant = props.variant ?? "primary";
+
+ const onClick = disabled ? undefined : props.onClick;
+
+ return (
+ <div
+ className={clsx(
+ "flat-button",
+ variant,
+ disabled ? "disabled" : null,
+ className
+ )}
+ style={style}
+ onClick={onClick}
+ >
+ {props.children}
+ </div>
+ );
+};
+
+export default FlatButton;
diff --git a/FrontEnd/src/app/views/timeline-common/MarkdownPostEdit.tsx b/FrontEnd/src/app/views/timeline-common/MarkdownPostEdit.tsx
index bad6b2b0..f4351db0 100644
--- a/FrontEnd/src/app/views/timeline-common/MarkdownPostEdit.tsx
+++ b/FrontEnd/src/app/views/timeline-common/MarkdownPostEdit.tsx
@@ -5,6 +5,7 @@ import { Prompt } from "react-router";
import { getHttpTimelineClient, HttpTimelinePostInfo } from "@/http/timeline";
+import FlatButton from "../common/FlatButton";
import TabPages from "../common/TabPages";
import TimelinePostBuilder from "@/services/TimelinePostBuilder";
import ConfirmDialog from "../common/ConfirmDialog";
@@ -100,8 +101,9 @@ const MarkdownPostEdit: React.FC<MarkdownPostEditProps> = ({
pageContainerClassName="py-2"
actions={
<>
- <div
- className="flat-button text-danger mr-2"
+ <FlatButton
+ className="mr-2"
+ variant="danger"
onClick={() => {
if (canLeave) {
onClose();
@@ -111,10 +113,10 @@ const MarkdownPostEdit: React.FC<MarkdownPostEditProps> = ({
}}
>
{t("operationDialog.cancel")}
- </div>
- <div className="flat-button text-primary" onClick={send}>
+ </FlatButton>
+ <FlatButton onClick={send} disabled={canLeave}>
{t("timeline.send")}
- </div>
+ </FlatButton>
</>
}
pages={[