533a325c86
Co-authored-by: multica-agent <github@multica.ai>
57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
"use client";
|
||
|
||
import { App } from "antd";
|
||
import { useEffect, useRef } from "react";
|
||
|
||
type ToastFeedbackOptions = {
|
||
errorTitle?: string;
|
||
successTitle?: string;
|
||
errorMessage: string;
|
||
successMessage?: string;
|
||
clearError?: () => void;
|
||
clearSuccess?: () => void;
|
||
};
|
||
|
||
export function useToastFeedback({
|
||
errorTitle = "操作失败",
|
||
successTitle = "操作成功",
|
||
errorMessage,
|
||
successMessage,
|
||
clearError,
|
||
clearSuccess,
|
||
}: ToastFeedbackOptions) {
|
||
const { message } = App.useApp();
|
||
const lastErrorRef = useRef("");
|
||
const lastSuccessRef = useRef("");
|
||
|
||
useEffect(() => {
|
||
if (!errorMessage) {
|
||
lastErrorRef.current = "";
|
||
return;
|
||
}
|
||
if (!errorMessage || errorMessage === lastErrorRef.current) {
|
||
return;
|
||
}
|
||
lastErrorRef.current = errorMessage;
|
||
message.error({
|
||
content: `${errorTitle}:${errorMessage}`,
|
||
});
|
||
clearError?.();
|
||
}, [clearError, errorMessage, errorTitle, message]);
|
||
|
||
useEffect(() => {
|
||
if (!successMessage) {
|
||
lastSuccessRef.current = "";
|
||
return;
|
||
}
|
||
if (!successMessage || successMessage === lastSuccessRef.current) {
|
||
return;
|
||
}
|
||
lastSuccessRef.current = successMessage;
|
||
message.success({
|
||
content: successTitle === "操作成功" ? successMessage : `${successTitle}:${successMessage}`,
|
||
});
|
||
clearSuccess?.();
|
||
}, [clearSuccess, message, successMessage, successTitle]);
|
||
}
|