63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import { LexoRank } from "lexorank";
|
|
import { useCrudOperations } from "@/hooks/cruds/baseCrud";
|
|
import {
|
|
CreateServiceSchema,
|
|
ServiceSchema,
|
|
UpdateServiceSchema,
|
|
} from "@/lib/client";
|
|
import {
|
|
createServiceMutation,
|
|
deleteServiceMutation,
|
|
updateServiceMutation,
|
|
} from "@/lib/client/@tanstack/react-query.gen";
|
|
import { getMaxByLexorank, getNewLexorank } from "@/utils/lexorank";
|
|
|
|
type UseServicesProps = {
|
|
queryKey: any[];
|
|
services: ServiceSchema[];
|
|
};
|
|
|
|
export type ServicesCrud = {
|
|
onCreate: (service: CreateServiceSchema) => void;
|
|
onUpdate: (
|
|
serviceId: number,
|
|
service: UpdateServiceSchema,
|
|
onSuccess?: () => void
|
|
) => void;
|
|
onDelete: (service: ServiceSchema) => void;
|
|
};
|
|
|
|
export const useServicesCrud = ({
|
|
queryKey,
|
|
services,
|
|
}: UseServicesProps): ServicesCrud => {
|
|
return useCrudOperations<
|
|
ServiceSchema,
|
|
UpdateServiceSchema,
|
|
CreateServiceSchema
|
|
>({
|
|
key: "getServices",
|
|
queryKey,
|
|
mutations: {
|
|
create: createServiceMutation(),
|
|
update: updateServiceMutation(),
|
|
delete: deleteServiceMutation(),
|
|
},
|
|
getCreateEntity: service => {
|
|
const maxRankStr = getMaxByLexorank(services)?.lexorank;
|
|
const maxRank = maxRankStr ? LexoRank.parse(maxRankStr) : null;
|
|
|
|
return {
|
|
...(service as CreateServiceSchema),
|
|
lexorank: getNewLexorank(maxRank).toString(),
|
|
};
|
|
},
|
|
getUpdateEntity: (old, update) =>
|
|
({
|
|
...old,
|
|
...update,
|
|
}) as ServiceSchema,
|
|
getDeleteConfirmTitle: () => "Удаление услуги",
|
|
});
|
|
};
|