Files
tm_panel/src/hooks/queries/useCmsQueries.ts
T
AmirReza Jamali bd79b7ed14 refactor(marketing): Standardize marketing wizard steps with initial data support
- Add support for initial data in all marketing wizard step components
- Update step presenters to accept and handle initial data
- Modify forwardRef implementations to include initialData prop
- Add TypeScript interfaces for step component props
- Improve type safety and data handling across marketing wizard steps
- Prepare components for edit and create workflows with consistent data management
2025-11-11 10:43:32 +03:30

81 lines
2.3 KiB
TypeScript

import { API_ENDPOINTS } from "@/lib/api";
import { cmsService } from "@/lib/api/services/cms-service";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { useRouter } from "next/navigation";
import { useMemo } from "react";
import { toast } from "react-toastify";
export const useGetCmsList = () => {
const queryKey = useMemo(() => [API_ENDPOINTS.CMS.BASE()], []);
return useQuery({
queryKey,
queryFn: cmsService.getCms,
});
};
export const useGetCmsDetails = (id: string) => {
const queryKey = useMemo(() => [API_ENDPOINTS.CMS.BASE(id)], [id]);
return useQuery({
queryKey,
queryFn: () => cmsService.getCmsDetails(id),
});
};
export const useCreateCms = () => {
const router = useRouter();
const queryClient = useQueryClient();
const mutationKey = useMemo(
() => [API_ENDPOINTS.CMS.BASE(), "Create cms"],
[],
);
return useMutation({
mutationKey,
mutationFn: cmsService.createCms,
onSuccess: ({ data }: { data: { message: string } }) => {
toast.success(data.message);
router.push("/marketing");
queryClient.invalidateQueries({
queryKey: [API_ENDPOINTS.CMS.BASE()],
});
},
});
};
export const useDeleteCms = (successCallback?: () => void) => {
const queryClient = useQueryClient();
const mutationKey = useMemo(
() => [API_ENDPOINTS.CMS.BASE(), "Delete CMS"],
[],
);
return useMutation({
mutationKey,
mutationFn: cmsService.deleteCms,
onSuccess: ({ data }: { data: { message: string } }) => {
toast.success(data.message);
successCallback?.();
queryClient.invalidateQueries({
queryKey: [API_ENDPOINTS.CMS.BASE()],
});
},
});
};
export const useUpdateCms = (id: string) => {
const router = useRouter();
const queryClient = useQueryClient();
const mutationKey = useMemo(
() => [API_ENDPOINTS.CMS.BASE(id), "Update cms"],
[id],
);
return useMutation({
mutationKey,
mutationFn: (data: any) => cmsService.updateCms({ id, data }),
onSuccess: () => {
toast.success("CMS updated successfully");
router.push("/marketing");
queryClient.invalidateQueries({
queryKey: [API_ENDPOINTS.CMS.BASE()],
});
queryClient.invalidateQueries({
queryKey: [API_ENDPOINTS.CMS.BASE(id)],
});
},
});
};