feat(ui): [UI7-1] 构建通用原子UI组件与业务Hooks

这个提交包含在:
2026-03-06 09:48:11 +08:00
父节点 9c48c8d3bc
当前提交 61180e2b3b
共修改 12 个文件,包含 356 行新增和 2 行删除
+30
查看文件
@@ -0,0 +1,30 @@
import { useMutation, type UseMutationOptions } from "@tanstack/react-query";
import { toast } from "sonner";
import { resolveErrorMessage } from "../lib/resolveErrorMessage";
export function useMutationWithToast<TData = unknown, TVariables = void, TOnMutateResult = unknown>(
options: UseMutationOptions<TData, Error, TVariables, TOnMutateResult> & {
successMessage?: string | ((data: TData, variables: TVariables) => string);
errorMessage?: string;
},
) {
const { successMessage, errorMessage, onSuccess, onError, ...rest } = options;
return useMutation<TData, Error, TVariables, TOnMutateResult>({
...rest,
onSuccess: (data, variables, onMutateResult, context) => {
if (successMessage) {
const msg =
typeof successMessage === "function"
? successMessage(data, variables)
: successMessage;
toast.success(msg);
}
onSuccess?.(data, variables, onMutateResult, context);
},
onError: (error, variables, onMutateResult, context) => {
toast.error(errorMessage ?? resolveErrorMessage(error));
onError?.(error, variables, onMutateResult, context);
},
});
}