diff options
author | crupest <crupest@outlook.com> | 2023-07-31 20:57:11 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2023-07-31 20:57:11 +0800 |
commit | 00c3736c3818053859710a2fbaec837dd9cbb586 (patch) | |
tree | 46d4b5efd2a82f9da67f8eea508e5b50c76b21ca /FrontEnd/src/views/common/dialog/OperationDialog.tsx | |
parent | f0f1984405db795d5a60bd03d05bec524dc12db3 (diff) | |
download | timeline-00c3736c3818053859710a2fbaec837dd9cbb586.tar.gz timeline-00c3736c3818053859710a2fbaec837dd9cbb586.tar.bz2 timeline-00c3736c3818053859710a2fbaec837dd9cbb586.zip |
...
Diffstat (limited to 'FrontEnd/src/views/common/dialog/OperationDialog.tsx')
-rw-r--r-- | FrontEnd/src/views/common/dialog/OperationDialog.tsx | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/FrontEnd/src/views/common/dialog/OperationDialog.tsx b/FrontEnd/src/views/common/dialog/OperationDialog.tsx index de92e541..4335b2b0 100644 --- a/FrontEnd/src/views/common/dialog/OperationDialog.tsx +++ b/FrontEnd/src/views/common/dialog/OperationDialog.tsx @@ -19,19 +19,20 @@ export type { InputInitializer, InputValueDict, InputErrorDict }; interface OperationDialogPromptProps { message?: Text; - customMessage?: ReactNode; + customMessage?: Text; + customMessageNode?: ReactNode; className?: string; } function OperationDialogPrompt(props: OperationDialogPromptProps) { - const { message, customMessage, className } = props; + const { message, customMessage, customMessageNode, className } = props; const c = useC(); return ( <div className={classNames(className, "cru-operation-dialog-prompt")}> {message && <p>{c(message)}</p>} - {customMessage} + {customMessageNode ?? (customMessage != null ? c(customMessage) : null)} </div> ); } @@ -43,9 +44,12 @@ export interface OperationDialogProps<TData> { color?: ThemeColor; inputColor?: ThemeColor; title: Text; - inputPrompt?: () => ReactNode; - successPrompt?: (data: TData) => ReactNode; - failurePrompt?: (error: unknown) => ReactNode; + inputPrompt?: Text; + inputPromptNode?: ReactNode; + successPrompt?: (data: TData) => Text; + successPromptNode?: (data: TData) => ReactNode; + failurePrompt?: (error: unknown) => Text; + failurePromptNode?: (error: unknown) => ReactNode; inputs: InputInitializer; @@ -61,13 +65,28 @@ function OperationDialog<TData>(props: OperationDialogProps<TData>) { inputColor, title, inputPrompt, + inputPromptNode, successPrompt, + successPromptNode, failurePrompt, + failurePromptNode, inputs, onProcess, onSuccessAndClose, } = props; + if (process.env.NODE_ENV === "development") { + if (inputPrompt && inputPromptNode) { + console.log("InputPrompt and inputPromptNode are both set."); + } + if (successPrompt && successPromptNode) { + console.log("SuccessPrompt and successPromptNode are both set."); + } + if (failurePrompt && failurePromptNode) { + console.log("FailurePrompt and failurePromptNode are both set."); + } + } + type Step = | { type: "input" } | { type: "process" } @@ -128,7 +147,10 @@ function OperationDialog<TData>(props: OperationDialogProps<TData>) { body = ( <div> - <OperationDialogPrompt customMessage={inputPrompt?.()} /> + <OperationDialogPrompt + customMessage={inputPrompt} + customMessageNode={inputPromptNode} + /> <InputGroup containerClassName="cru-operation-dialog-input-group" color={inputColor ?? "primary"} @@ -168,10 +190,12 @@ function OperationDialog<TData>(props: OperationDialogProps<TData>) { ? { message: "operationDialog.success", customMessage: successPrompt?.(result.data), + customMessageNode: successPromptNode?.(result.data), } : { message: "operationDialog.error", customMessage: failurePrompt?.(result.data), + customMessageNode: failurePromptNode?.(result.data), }; body = ( <div> |