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
This commit is contained in:
AmirReza Jamali
2025-11-11 10:43:32 +03:30
parent b444f6a08f
commit bd79b7ed14
19 changed files with 842 additions and 688 deletions
+31 -8
View File
@@ -1,15 +1,19 @@
"use client";
import Loading from "@/app/loading";
import Breadcrumb from "@/components/Breadcrumbs/Breadcrumb";
import { useGetCmsDetails } from "@/hooks/queries/useCmsQueries";
import { useGetCmsDetails, useUpdateCms } from "@/hooks/queries/useCmsQueries";
import { BreadcrumbItem } from "@/types/shared";
import { use } from "react";
import MarketingForm from "../../_components/MarketingForm";
interface IProps {
params: Promise<{ id: string }>;
}
const EditMarketingPage = async ({ params }: IProps) => {
const EditMarketingPage = ({ params }: IProps) => {
const { id } = use(params);
const { data, isPending } = useGetCmsDetails(id);
const { data, isPending: isLoading } = useGetCmsDetails(id);
const { mutate: updateCms, isPending: isUpdating } = useUpdateCms(id);
const breadcrumbItems: BreadcrumbItem[] = [
{
href: "/",
@@ -24,10 +28,29 @@ const EditMarketingPage = async ({ params }: IProps) => {
name: "Edit Marketing",
},
];
if (isPending) return <Loading />;
const handleSubmit = (formData: any) => {
updateCms(formData, {
onSuccess: () => {
console.log("CMS updated successfully");
},
onError: (error) => {
console.error("Error updating CMS:", error);
},
});
};
if (isLoading || !data?.data) return <Loading />;
return (
<>
<Breadcrumb items={breadcrumbItems} />
</>
<MarketingForm
breadcrumbItems={breadcrumbItems}
title="Edit Marketing page"
onSubmit={handleSubmit}
isPending={isUpdating}
initialData={data.data}
/>
);
};
export default EditMarketingPage;