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; update: ReturnType; softDeleteByIds: ReturnType; getStaff: (key: string) => Staff | undefined; updateUserDomain: ReturnType; addCustomField: ReturnType; updateCustomField: ReturnType; deleteCustomField: ReturnType; useCustomFields: () => ReturnType; setCustomFieldValue: ReturnType; } 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(queryClient, api.staff, key); }; return { create, update, softDeleteByIds, getStaff, updateUserDomain, addCustomField, updateCustomField, deleteCustomField, useCustomFields, setCustomFieldValue, }; }