42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
"use client";
|
||
|
||
import { useCallback, useState } from "react";
|
||
import type { InlineAlertType } from "@/components/ui/inline-alert";
|
||
|
||
export interface ActionFeedback {
|
||
type: InlineAlertType;
|
||
message: string;
|
||
title?: string;
|
||
}
|
||
|
||
/** 直接操作(儲存、刪除、驗證)用頁面內提示;AI/背景任務才進通知中心。 */
|
||
export function useActionFeedback() {
|
||
const [feedback, setFeedback] = useState<ActionFeedback | null>(null);
|
||
|
||
const clearFeedback = useCallback(() => setFeedback(null), []);
|
||
|
||
const showError = useCallback((message: string, title?: string) => {
|
||
setFeedback({ type: "error", message, title });
|
||
}, []);
|
||
|
||
const showSuccess = useCallback((message: string, title?: string) => {
|
||
setFeedback({ type: "success", message, title });
|
||
}, []);
|
||
|
||
const showWarning = useCallback((message: string, title?: string) => {
|
||
setFeedback({ type: "warning", message, title });
|
||
}, []);
|
||
|
||
const showInfo = useCallback((message: string, title?: string) => {
|
||
setFeedback({ type: "info", message, title });
|
||
}, []);
|
||
|
||
return {
|
||
feedback,
|
||
clearFeedback,
|
||
showError,
|
||
showSuccess,
|
||
showWarning,
|
||
showInfo,
|
||
};
|
||
} |