@@ -99,12 +99,38 @@ function CreateTestimonial() {
99
99
} ,
100
100
} ) ;
101
101
102
+ const toggleEmoji = ( emoji : string ) => {
103
+ let newEmojis : string [ ] ;
104
+ if ( selectedEmojis . includes ( emoji ) ) {
105
+ newEmojis = selectedEmojis . filter ( ( e ) => e !== emoji ) ;
106
+ } else if ( selectedEmojis . length < 3 ) {
107
+ newEmojis = [ ...selectedEmojis , emoji ] ;
108
+ } else {
109
+ return ; // Don't allow more than 3 emojis
110
+ }
111
+ setSelectedEmojis ( newEmojis ) ;
112
+ form . setValue ( "emojis" , newEmojis . join ( "" ) , {
113
+ shouldValidate : true ,
114
+ shouldDirty : true ,
115
+ shouldTouch : true ,
116
+ } ) ;
117
+ } ;
118
+
102
119
const onSubmit = async ( values : TestimonialFormValues ) => {
120
+ if ( selectedEmojis . length === 0 ) {
121
+ form . setError ( "emojis" , {
122
+ type : "manual" ,
123
+ message : "Please select at least one emoji" ,
124
+ } ) ;
125
+ return ;
126
+ }
127
+
103
128
try {
104
129
setIsSubmitting ( true ) ;
105
130
await createTestimonialFn ( {
106
131
data : {
107
- ...values ,
132
+ displayName : values . displayName ,
133
+ content : values . content ,
108
134
emojis : selectedEmojis . join ( "" ) ,
109
135
permissionGranted : values . permissionGranted ,
110
136
} ,
@@ -126,19 +152,6 @@ function CreateTestimonial() {
126
152
return < SuccessMessage /> ;
127
153
}
128
154
129
- const toggleEmoji = ( emoji : string ) => {
130
- let newEmojis : string [ ] ;
131
- if ( selectedEmojis . includes ( emoji ) ) {
132
- newEmojis = selectedEmojis . filter ( ( e ) => e !== emoji ) ;
133
- } else if ( selectedEmojis . length < 3 ) {
134
- newEmojis = [ ...selectedEmojis , emoji ] ;
135
- } else {
136
- return ; // Don't allow more than 3 emojis
137
- }
138
- setSelectedEmojis ( newEmojis ) ;
139
- form . setValue ( "emojis" , newEmojis . join ( "" ) , { shouldValidate : true } ) ;
140
- } ;
141
-
142
155
return (
143
156
< div className = "max-w-2xl mx-auto p-6 mt-12" >
144
157
< h1 className = "text-3xl font-bold mb-8" > Share Your Experience</ h1 >
@@ -221,7 +234,14 @@ function CreateTestimonial() {
221
234
< div className = "flex items-start space-x-2" >
222
235
< Checkbox
223
236
id = "permission"
224
- { ...form . register ( "permissionGranted" ) }
237
+ checked = { form . watch ( "permissionGranted" ) }
238
+ onCheckedChange = { ( checked ) => {
239
+ form . setValue ( "permissionGranted" , checked === true , {
240
+ shouldValidate : true ,
241
+ shouldDirty : true ,
242
+ shouldTouch : true ,
243
+ } ) ;
244
+ } }
225
245
className = { cn (
226
246
form . formState . errors . permissionGranted && "border-red-500"
227
247
) }
0 commit comments