115 lines
3.4 KiB
TypeScript
Executable File
115 lines
3.4 KiB
TypeScript
Executable File
import { getQueryKey } from "@trpc/react-query";
|
|
import { api } from "../trpc"; // Adjust path as necessary
|
|
import { useQueryClient } from "@tanstack/react-query";
|
|
import { ObjectType, Staff } from "@nice/common";
|
|
import { findQueryData } from "../utils";
|
|
import { CrudOperation, emitDataChange } from "../../event";
|
|
|
|
export interface CustomField {
|
|
name: string;
|
|
label?: string;
|
|
type: string;
|
|
required?: boolean;
|
|
order?: number;
|
|
options?: any;
|
|
group?: string;
|
|
}
|
|
|
|
export interface CustomFieldValue {
|
|
staffId: string;
|
|
fieldId: string;
|
|
value?: string;
|
|
}
|
|
|
|
interface StaffHookReturn {
|
|
create: ReturnType<typeof api.staff.create.useMutation>;
|
|
update: ReturnType<typeof api.staff.update.useMutation>;
|
|
softDeleteByIds: ReturnType<typeof api.staff.softDeleteByIds.useMutation>;
|
|
getStaff: (key: string) => Staff | undefined;
|
|
updateUserDomain: ReturnType<typeof api.staff.updateUserDomain.useMutation>;
|
|
addCustomField: ReturnType<typeof api.staff.addCustomField.useMutation>;
|
|
updateCustomField: ReturnType<typeof api.staff.updateCustomField.useMutation>;
|
|
deleteCustomField: ReturnType<typeof api.staff.deleteCustomField.useMutation>;
|
|
useCustomFields: () => ReturnType<typeof api.staff.getCustomFields.useQuery>;
|
|
setCustomFieldValue: ReturnType<typeof api.staff.setCustomFieldValue.useMutation>;
|
|
}
|
|
|
|
export function useStaff(): StaffHookReturn {
|
|
const queryClient = useQueryClient();
|
|
const queryKey = getQueryKey(api.staff);
|
|
|
|
const create = api.staff.create.useMutation({
|
|
onSuccess: (result) => {
|
|
queryClient.invalidateQueries({ queryKey });
|
|
emitDataChange(
|
|
ObjectType.STAFF,
|
|
result as any,
|
|
CrudOperation.CREATED
|
|
);
|
|
},
|
|
});
|
|
const updateUserDomain = api.staff.updateUserDomain.useMutation({
|
|
onSuccess: (result) => {
|
|
queryClient.invalidateQueries({ queryKey });
|
|
emitDataChange(ObjectType.STAFF, result as any, CrudOperation.UPDATED);
|
|
},
|
|
});
|
|
const update = api.staff.update.useMutation({
|
|
onSuccess: (result) => {
|
|
queryClient.invalidateQueries({ queryKey });
|
|
queryClient.invalidateQueries({ queryKey: getQueryKey(api.post) });
|
|
emitDataChange(
|
|
ObjectType.STAFF,
|
|
result as any,
|
|
CrudOperation.UPDATED
|
|
);
|
|
},
|
|
});
|
|
const softDeleteByIds = api.staff.softDeleteByIds.useMutation({
|
|
onSuccess: (result, variables) => {
|
|
queryClient.invalidateQueries({ queryKey });
|
|
},
|
|
});
|
|
const addCustomField = api.staff.addCustomField.useMutation({
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: getQueryKey(api.staff.getCustomFields) });
|
|
},
|
|
});
|
|
const updateCustomField = api.staff.updateCustomField.useMutation({
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: getQueryKey(api.staff.getCustomFields) });
|
|
},
|
|
});
|
|
const deleteCustomField = api.staff.deleteCustomField.useMutation({
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: getQueryKey(api.staff.getCustomFields) });
|
|
},
|
|
});
|
|
const useCustomFields = () => {
|
|
return api.staff.getCustomFields.useQuery(undefined, {
|
|
staleTime: 1000 * 60 * 5, // 5分钟缓存
|
|
});
|
|
};
|
|
const setCustomFieldValue = api.staff.setCustomFieldValue.useMutation({
|
|
onSuccess: (result) => {
|
|
queryClient.invalidateQueries({ queryKey });
|
|
},
|
|
});
|
|
const getStaff = (key: string) => {
|
|
return findQueryData<Staff>(queryClient, api.staff, key);
|
|
};
|
|
|
|
return {
|
|
create,
|
|
update,
|
|
softDeleteByIds,
|
|
getStaff,
|
|
updateUserDomain,
|
|
addCustomField,
|
|
updateCustomField,
|
|
deleteCustomField,
|
|
useCustomFields,
|
|
setCustomFieldValue,
|
|
};
|
|
}
|