training_data/packages/client/src/api/hooks/useSport.ts

71 lines
3.7 KiB
TypeScript

import { getQueryKey } from "@trpc/react-query";
import { api, RouterOutputs } from "../trpc"; // Adjust path as necessary
import { useQueryClient, UseMutationResult } from "@tanstack/react-query";
import { ObjectType } from "@nice/common";
import { CrudOperation, emitDataChange } from "../../event";
import { UseTRPCMutationResult } from "@trpc/react-query/shared";
interface SportOperation {
createSportProject: UseTRPCMutationResult<
RouterOutputs["sportProject"]["create"],
Error, // 统一使用Error类型
Parameters<typeof api.sportProject.create.useMutation>[0],
unknown
>;
createSportStandard: UseTRPCMutationResult<
RouterOutputs["sportStandard"]["createStandard"],
Error, Parameters<typeof api.sportStandard.createStandard.useMutation<RouterOutputs["sportStandard"]["createStandard"]>>[0],
unknown
>;
softDeleteByIds: UseTRPCMutationResult<
RouterOutputs["sportProject"]["softDeleteByIds"],
Error,
Parameters<typeof api.sportProject.softDeleteByIds.useMutation>[0],
unknown
>;
updateSportStandard: UseTRPCMutationResult<
RouterOutputs["sportStandard"]["updateStandard"],
Error,
Parameters<typeof api.sportStandard.updateStandard.useMutation<RouterOutputs["sportStandard"]["updateStandard"]>>[0],
unknown
>;
}
export function useSport(): SportOperation {
const queryClient = useQueryClient();
const queryKey = getQueryKey(api.sportProject);
const queryKeyStandard = getQueryKey(api.sportStandard.createStandard);
const createSportProject = api.sportProject.create.useMutation({
onSuccess: (result) => {
queryClient.invalidateQueries({ queryKey });
emitDataChange(ObjectType.SPORT_PROJECT, result, CrudOperation.CREATED);
},
});
const createSportStandard = api.sportStandard.createStandard.useMutation<RouterOutputs["sportStandard"]["createStandard"]>({
onSuccess: (result) => {
queryClient.invalidateQueries({ queryKey: queryKeyStandard });
emitDataChange(ObjectType.SPORT_STANDARD, result, CrudOperation.CREATED);
},
});
const softDeleteByIds = api.sportProject.softDeleteByIds.useMutation({
onSuccess: (result) => {
queryClient.invalidateQueries({ queryKey });
emitDataChange(ObjectType.SPORT_PROJECT, result, CrudOperation.DELETED);
},
});
const updateSportStandard = api.sportStandard.updateStandard.useMutation<RouterOutputs["sportStandard"]["updateStandard"]>({
onSuccess: (result) => {
queryClient.invalidateQueries({ queryKey: queryKeyStandard });
emitDataChange(ObjectType.SPORT_STANDARD, result, CrudOperation.UPDATED);
},
});
return {
createSportProject: createSportProject as any as UseTRPCMutationResult<RouterOutputs["sportProject"]["create"], Error, Parameters<typeof api.sportProject.create.useMutation>[0], unknown>,
createSportStandard: createSportStandard as any as UseTRPCMutationResult<RouterOutputs["sportStandard"]["createStandard"], Error, Parameters<typeof api.sportStandard.createStandard.useMutation<RouterOutputs["sportStandard"]["createStandard"]>>[0], unknown>,
softDeleteByIds: softDeleteByIds as any as UseTRPCMutationResult<RouterOutputs["sportProject"]["softDeleteByIds"], Error, Parameters<typeof api.sportProject.softDeleteByIds.useMutation>[0], unknown>,
updateSportStandard: updateSportStandard as any as UseTRPCMutationResult<RouterOutputs["sportStandard"]["updateStandard"], Error, Parameters<typeof api.sportStandard.updateStandard.useMutation<RouterOutputs["sportStandard"]["updateStandard"]>>[0], unknown>,
};
}