Add section validations

This commit is contained in:
AmirReza Jamali
2025-11-10 09:58:27 +03:30
parent 5640febf40
commit b8169fbcd9
2 changed files with 34 additions and 18 deletions
@@ -3,16 +3,17 @@ import { TrashIcon } from "@/assets/icons";
import InputGroup from "@/components/FormElements/InputGroup"; import InputGroup from "@/components/FormElements/InputGroup";
import { TextAreaGroup } from "@/components/FormElements/InputGroup/text-area"; import { TextAreaGroup } from "@/components/FormElements/InputGroup/text-area";
import { ShowcaseSection } from "@/components/Layouts/showcase-section"; import { ShowcaseSection } from "@/components/Layouts/showcase-section";
import { REGEX } from "@/constants/regex";
import { FormErrorMessages } from "@/constants/Texts"; import { FormErrorMessages } from "@/constants/Texts";
import { import {
Control, Control,
FieldErrors, FieldErrors,
FieldValues, FieldValues,
Path, Path,
UseFieldArrayAppend, UseFieldArrayAppend,
UseFieldArrayRemove, UseFieldArrayRemove,
UseFormHandleSubmit, UseFormHandleSubmit,
UseFormRegister, UseFormRegister,
} from "react-hook-form"; } from "react-hook-form";
interface IProps<T extends FieldValues> { interface IProps<T extends FieldValues> {
@@ -73,7 +74,10 @@ const SectionStep = <T extends FieldValues>({
placeholder="Enter Section Description" placeholder="Enter Section Description"
/> />
</ShowcaseSection> </ShowcaseSection>
<ShowcaseSection title={`${title} cards`} className="flex flex-col gap-5"> <ShowcaseSection
title={`${title} cards`}
className="flex flex-col gap-5"
>
{fields.map((field, index) => ( {fields.map((field, index) => (
<div <div
key={field.id} key={field.id}
@@ -85,12 +89,16 @@ const SectionStep = <T extends FieldValues>({
message: FormErrorMessages.required, message: FormErrorMessages.required,
value: true, value: true,
}, },
pattern: {
message: FormErrorMessages.invalidPattern,
value: REGEX.URL,
},
})} })}
label="Icon" label="Icon"
name={`cards.${index}.icon`} name={`cards.${index}.icon`}
required required
type="text" type="text"
placeholder="Enter Icon URL or name" placeholder="Enter Icon URL"
/> />
<InputGroup <InputGroup
{...register(`cards.${index}.title` as Path<T>, { {...register(`cards.${index}.title` as Path<T>, {
+16 -8
View File
@@ -1,6 +1,12 @@
"use client"; "use client";
import EmptyListWrapper from "@/components/HOC/EmptyListWrapper"; import EmptyListWrapper from "@/components/HOC/EmptyListWrapper";
import { Table, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import {
Table,
TableBody,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
import TableSkeleton from "@/components/ui/TableSkeleton"; import TableSkeleton from "@/components/ui/TableSkeleton";
import { useContactUsListPresenter } from "./useContactUsListPresenter"; import { useContactUsListPresenter } from "./useContactUsListPresenter";
@@ -24,13 +30,15 @@ const ContactUsTable = () => {
</TableRow> </TableRow>
</TableHeader> </TableHeader>
{isPending && <TableSkeleton column={columns.length} />} {isPending && <TableSkeleton column={columns.length} />}
<EmptyListWrapper <TableBody>
list={data ?? []} <EmptyListWrapper
columns={columns} list={data ?? []}
emptyMessage="No contact us is submitted" columns={columns}
> emptyMessage="No contact us is submitted"
Contact us table will be initialized here >
</EmptyListWrapper> Contact us table will be initialized here
</EmptyListWrapper>
</TableBody>
</Table> </Table>
</div> </div>
); );