chore: import clean Agent Desk snapshot (6/7)

This commit is contained in:
2026-10-16 12:02:48 +00:00
parent d215bf6303
commit 756ae33d05
278 changed files with 53808 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
"use client"
import { createContext, useCallback, useContext, useEffect, type ReactNode } from "react"
import { toast } from "sonner"
import { useI18n } from "@/i18n/provider"
import { isApiRequestError } from "@/lib/api/client"
type ApiErrorHandler = (error: unknown) => void
const ApiErrorContext = createContext<ApiErrorHandler>(() => {})
export function ApiErrorProvider({ children }: { children: ReactNode }) {
const t = useI18n()
const handleApiError = useCallback<ApiErrorHandler>((error) => {
const message = error instanceof Error && error.message
? error.message
: t("api.requestFailed")
toast.error(message)
}, [t])
useEffect(() => {
const handleUnhandledRejection = (event: PromiseRejectionEvent) => {
if (!isApiRequestError(event.reason)) {
return
}
event.preventDefault()
event.stopImmediatePropagation()
handleApiError(event.reason)
}
window.addEventListener("unhandledrejection", handleUnhandledRejection, true)
return () => window.removeEventListener("unhandledrejection", handleUnhandledRejection, true)
}, [handleApiError])
return (
<ApiErrorContext.Provider value={handleApiError}>
{children}
</ApiErrorContext.Provider>
)
}
export function useApiErrorHandler() {
return useContext(ApiErrorContext)
}