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" ;
8
5
import { TrashIcon } from "lucide-react" ;
9
6
import { useFormContext } from "react-hook-form" ;
10
- import { FormErrorMessage , FormLabel } from "tw-components" ;
11
7
12
8
interface ExternalLinksInputProps {
13
9
index : number ;
@@ -21,38 +17,35 @@ export const ExternalLinksInput: React.FC<ExternalLinksInputProps> = ({
21
17
const form = useFormContext ( ) ;
22
18
23
19
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 >
40
26
< Input
27
+ id = { `externalLinks.${ index } .name` }
41
28
placeholder = "Resource name"
42
29
{ ...form . register ( `externalLinks.${ index } .name` ) }
43
30
/>
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 >
55
47
< Input
48
+ id = { `externalLinks.${ index } .url` }
56
49
placeholder = "Provide URL to the resource page"
57
50
{ ...form . register ( `externalLinks.${ index } .url` , {
58
51
required : true ,
@@ -64,21 +57,28 @@ export const ExternalLinksInput: React.FC<ExternalLinksInputProps> = ({
64
57
} ,
65
58
} ) }
66
59
/>
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"
76
73
aria-label = "Remove row"
77
74
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 >
83
83
) ;
84
84
} ;
0 commit comments