bd79b7ed14
- 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
110 lines
3.5 KiB
TypeScript
110 lines
3.5 KiB
TypeScript
"use client";
|
|
import { Checkbox } from "@/components/FormElements/checkbox";
|
|
import InputGroup from "@/components/FormElements/InputGroup";
|
|
import { TextAreaGroup } from "@/components/FormElements/InputGroup/text-area";
|
|
import { ShowcaseSection } from "@/components/Layouts/showcase-section";
|
|
import { FormErrorMessages } from "@/constants/Texts";
|
|
import { forwardRef, useImperativeHandle } from "react";
|
|
import useContactsStepPresenter from "./useContactsStepPresenter";
|
|
|
|
interface ContactsStepProps {
|
|
initialData?: any;
|
|
}
|
|
|
|
const ContactsStep = forwardRef<unknown, ContactsStepProps>(
|
|
({ initialData }, ref) => {
|
|
const { errors, handleSubmit, onSubmit, register, fields, getValues } =
|
|
useContactsStepPresenter(initialData);
|
|
|
|
useImperativeHandle(ref, () => ({
|
|
getData: () => getValues(),
|
|
}));
|
|
|
|
return (
|
|
<form
|
|
className="grid grid-cols-1 items-start gap-9 rounded-xl bg-gray-1 p-10 dark:bg-gray-7"
|
|
onSubmit={handleSubmit(onSubmit)}
|
|
>
|
|
<ShowcaseSection
|
|
title="Contacts Section"
|
|
className="flex flex-col gap-5"
|
|
>
|
|
<div className="flex flex-col gap-9">
|
|
<InputGroup
|
|
{...register("title", {
|
|
required: { message: FormErrorMessages.required, value: true },
|
|
})}
|
|
label="Title"
|
|
name="title"
|
|
required
|
|
type="text"
|
|
placeholder="Enter Title"
|
|
/>
|
|
{errors.title && (
|
|
<p className="mt-1 text-sm text-red-500">
|
|
{errors.title.message as string}
|
|
</p>
|
|
)}
|
|
<TextAreaGroup
|
|
label="Description"
|
|
{...register("description")}
|
|
name="description"
|
|
placeholder="Enter Description"
|
|
/>
|
|
<InputGroup
|
|
{...register("submitButtonText")}
|
|
label="Submit Button Text"
|
|
name="submitButtonText"
|
|
type="text"
|
|
placeholder="Enter Submit Button Text"
|
|
/>
|
|
</div>
|
|
</ShowcaseSection>
|
|
<ShowcaseSection title="Form Fields" className="flex flex-col gap-5">
|
|
{fields.map((field, index) => (
|
|
<div
|
|
key={field.id}
|
|
className="grid grid-cols-1 items-center gap-4 sm:grid-cols-2"
|
|
>
|
|
<InputGroup
|
|
{...register(`fields.${index}.name`)}
|
|
label="Field Name"
|
|
name={`fields.${index}.name`}
|
|
type="text"
|
|
placeholder="Field Name"
|
|
disabled
|
|
/>
|
|
<InputGroup
|
|
{...register(`fields.${index}.label`)}
|
|
label="Label"
|
|
name={`fields.${index}.label`}
|
|
type="text"
|
|
placeholder="Enter Label"
|
|
/>
|
|
<InputGroup
|
|
{...register(`fields.${index}.placeholder`)}
|
|
label="Placeholder"
|
|
name={`fields.${index}.placeholder`}
|
|
type="text"
|
|
placeholder="Enter Placeholder"
|
|
/>
|
|
<Checkbox
|
|
{...register(`fields.${index}.required`)}
|
|
label="Required"
|
|
minimal
|
|
withIcon="check"
|
|
withBg
|
|
name={`fields.${index}.required`}
|
|
/>
|
|
</div>
|
|
))}
|
|
</ShowcaseSection>
|
|
</form>
|
|
);
|
|
},
|
|
);
|
|
|
|
ContactsStep.displayName = "ContactsStep";
|
|
|
|
export default ContactsStep;
|