aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/views/common/dialog/OperationDialog.tsx
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2023-07-30 20:52:13 +0800
committercrupest <crupest@outlook.com>2023-07-30 20:52:13 +0800
commita148f11c193d35ba489f887ed393aedf58a1c714 (patch)
tree0028ec26d0cce5fb5a460777105be94a2084b704 /FrontEnd/src/views/common/dialog/OperationDialog.tsx
parent001712ec0ae0de86ec7d2c36e2fff8bccc55bab5 (diff)
downloadtimeline-a148f11c193d35ba489f887ed393aedf58a1c714.tar.gz
timeline-a148f11c193d35ba489f887ed393aedf58a1c714.tar.bz2
timeline-a148f11c193d35ba489f887ed393aedf58a1c714.zip
...
Diffstat (limited to 'FrontEnd/src/views/common/dialog/OperationDialog.tsx')
-rw-r--r--FrontEnd/src/views/common/dialog/OperationDialog.tsx94
1 files changed, 50 insertions, 44 deletions
diff --git a/FrontEnd/src/views/common/dialog/OperationDialog.tsx b/FrontEnd/src/views/common/dialog/OperationDialog.tsx
index 74b4a5fa..da1ff0e0 100644
--- a/FrontEnd/src/views/common/dialog/OperationDialog.tsx
+++ b/FrontEnd/src/views/common/dialog/OperationDialog.tsx
@@ -1,9 +1,8 @@
-import { useState, ReactNode } from "react";
+import { useState, ReactNode, ComponentProps } from "react";
import classNames from "classnames";
import { useC, Text, ThemeColor } from "../common";
-import Button from "../button/Button";
import {
useInputs,
InputGroup,
@@ -11,8 +10,8 @@ import {
InputValueDict,
InputErrorDict,
} from "../input/InputGroup";
-import LoadingButton from "../button/LoadingButton";
import Dialog from "./Dialog";
+import DialogContainer from "./DialogContainer";
import "./OperationDialog.css";
@@ -124,39 +123,45 @@ function OperationDialog<TData>(props: OperationDialogProps<TData>) {
}
let body: ReactNode;
+ let buttons: ComponentProps<typeof DialogContainer>["buttons"];
+
if (step.type === "input" || step.type === "process") {
const isProcessing = step.type === "process";
body = (
- <div className="cru-operation-dialog-main-area">
- <div className="cru-dialog-middle-area">
- <OperationDialogPrompt customMessage={c(inputPrompt)} />
- <InputGroup
- containerClassName="cru-operation-dialog-input-group"
- color={inputColor ?? "primary"}
- {...inputGroupProps}
- />
- </div>
- <hr />
- <div className="cru-dialog-bottom-area">
- <Button
- text="operationDialog.cancel"
- color="secondary"
- outline
- onClick={close}
- disabled={isProcessing}
- />
- <LoadingButton
- color={color}
- loading={isProcessing}
- disabled={hasErrorAndDirty}
- onClick={onConfirm}
- >
- {c("operationDialog.confirm")}
- </LoadingButton>
- </div>
+ <div>
+ <OperationDialogPrompt customMessage={c(inputPrompt)} />
+ <InputGroup
+ containerClassName="cru-operation-dialog-input-group"
+ color={inputColor ?? "primary"}
+ {...inputGroupProps}
+ />
</div>
);
+ buttons = [
+ {
+ key: "cancel",
+ type: "normal",
+ props: {
+ text: "operationDialog.cancel",
+ color: "secondary",
+ outline: true,
+ onClick: close,
+ disabled: isProcessing,
+ },
+ },
+ {
+ key: "confirm",
+ type: "loading",
+ props: {
+ text: "operationDialog.confirm",
+ color,
+ loading: isProcessing,
+ disabled: hasErrorAndDirty,
+ onClick: onConfirm,
+ },
+ },
+ ];
} else {
const result = step;
@@ -171,28 +176,29 @@ function OperationDialog<TData>(props: OperationDialogProps<TData>) {
customMessage: failurePrompt?.(result.data),
};
body = (
- <div className="cru-operation-dialog-main-area">
+ <div>
<OperationDialogPrompt {...promptProps} />
- <hr />
- <div className="cru-dialog-bottom-area">
- <Button text="operationDialog.ok" color="primary" onClick={close} />
- </div>
</div>
);
+
+ buttons = [
+ {
+ key: "ok",
+ type: "normal",
+ props: {
+ text: "operationDialog.ok",
+ color: "primary",
+ onClick: close,
+ },
+ },
+ ];
}
return (
<Dialog open={open} onClose={close}>
- <div
- className={classNames(
- "cru-operation-dialog-container",
- `cru-${color ?? "primary"}`,
- )}
- >
- <div className="cru-operation-dialog-title">{c(title)}</div>
- <hr />
+ <DialogContainer title={title} titleColor={color} buttons={buttons}>
{body}
- </div>
+ </DialogContainer>
</Dialog>
);
}