1- import {
2- Divider ,
3- Flex ,
4- FormControl ,
5- IconButton ,
6- Input ,
7- } from "@chakra-ui/react" ;
1+ import { Button } from "@/components/ui/button" ;
2+ import { Input } from "@/components/ui/input" ;
3+ import { Label } from "@/components/ui/label" ;
4+ import { Separator } from "@/components/ui/separator" ;
85import { TrashIcon } from "lucide-react" ;
96import { useFormContext } from "react-hook-form" ;
10- import { FormErrorMessage , FormLabel } from "tw-components" ;
117
128interface ExternalLinksInputProps {
139 index : number ;
@@ -21,38 +17,35 @@ export const ExternalLinksInput: React.FC<ExternalLinksInputProps> = ({
2117 const form = useFormContext ( ) ;
2218
2319 return (
24- < Flex flexDir = "column" gap = { 2 } >
25- < Flex
26- w = "full"
27- gap = { { base : 4 , md : 2 } }
28- flexDir = { { base : "column" , md : "row" } }
29- >
30- < FormControl
31- as = { Flex }
32- flexDir = "column"
33- gap = { 1 }
34- isInvalid = {
35- ! ! form . getFieldState ( `externalLinks.${ index } .name` , form . formState )
36- . error
37- }
38- >
39- < FormLabel textTransform = "capitalize" > Resource Name</ FormLabel >
20+ < div className = "flex flex-col gap-2" >
21+ < div className = "flex w-full flex-col gap-4 md:flex-row md:gap-2" >
22+ < div className = "flex flex-1 flex-col gap-1" >
23+ < Label htmlFor = { `externalLinks.${ index } .name` } className = "capitalize" >
24+ Resource Name
25+ </ Label >
4026 < Input
27+ id = { `externalLinks.${ index } .name` }
4128 placeholder = "Resource name"
4229 { ...form . register ( `externalLinks.${ index } .name` ) }
4330 />
44- </ FormControl >
45- < FormControl
46- as = { Flex }
47- flexDir = "column"
48- gap = { 1 }
49- isInvalid = {
50- ! ! form . getFieldState ( `externalLinks.${ index } .url` , form . formState )
51- . error
52- }
53- >
54- < FormLabel textTransform = "capitalize" > Link</ FormLabel >
31+ { form . getFieldState ( `externalLinks.${ index } .name` , form . formState )
32+ . error ?. message && (
33+ < p className = "text-destructive-text text-sm" >
34+ {
35+ form . getFieldState (
36+ `externalLinks.${ index } .name` ,
37+ form . formState ,
38+ ) . error ?. message
39+ }
40+ </ p >
41+ ) }
42+ </ div >
43+ < div className = "flex flex-1 flex-col gap-1" >
44+ < Label htmlFor = { `externalLinks.${ index } .url` } className = "capitalize" >
45+ Link
46+ </ Label >
5547 < Input
48+ id = { `externalLinks.${ index } .url` }
5649 placeholder = "Provide URL to the resource page"
5750 { ...form . register ( `externalLinks.${ index } .url` , {
5851 required : true ,
@@ -64,21 +57,28 @@ export const ExternalLinksInput: React.FC<ExternalLinksInputProps> = ({
6457 } ,
6558 } ) }
6659 />
67- < FormErrorMessage >
68- {
69- form . getFieldState ( `externalLinks.${ index } .url` , form . formState )
70- . error ?. message
71- }
72- </ FormErrorMessage >
73- </ FormControl >
74- < IconButton
75- icon = { < TrashIcon className = "size-5" /> }
60+ { form . getFieldState ( `externalLinks.${ index } .url` , form . formState )
61+ . error ?. message && (
62+ < p className = "text-destructive-text text-sm" >
63+ {
64+ form . getFieldState ( `externalLinks.${ index } .url` , form . formState )
65+ . error ?. message
66+ }
67+ </ p >
68+ ) }
69+ </ div >
70+ < Button
71+ variant = "ghost"
72+ size = "icon"
7673 aria-label = "Remove row"
7774 onClick = { ( ) => remove ( index ) }
78- alignSelf = "end"
79- />
80- </ Flex >
81- < Divider />
82- </ Flex >
75+ className = "self-end"
76+ >
77+ < TrashIcon className = "size-5" />
78+ < span className = "sr-only" > Remove row</ span >
79+ </ Button >
80+ </ div >
81+ < Separator />
82+ </ div >
8383 ) ;
8484} ;
0 commit comments