@@ -20,7 +20,9 @@ export default function FormPlusComponent({
20
20
confirmation,
21
21
defaultValue,
22
22
onSuccess,
23
- method
23
+ method,
24
+ customAction,
25
+ includePayload,
24
26
} ) {
25
27
const [ submitLoading , setSubmitLoading ] = useState ( false ) ;
26
28
const [ modalConfirm , setModalConfirm ] = useState ( false ) ;
@@ -152,8 +154,12 @@ export default function FormPlusComponent({
152
154
setSubmitLoading ( true )
153
155
154
156
let formData = new FormData ( e . target ) ;
155
- let response = method == "put" ? await put ( submitUrl , formData ) : await post ( submitUrl , formData ) ;
156
157
158
+ includePayload && Object . keys ( includePayload ) . map ( ( key ) => {
159
+ formData . append ( key , includePayload [ key ] )
160
+ } )
161
+
162
+ let response = method == "put" ? await put ( submitUrl , formData ) : await post ( submitUrl , formData ) ;
157
163
158
164
if ( response ?. status == 200 || response ?. status == 201 ) {
159
165
setFormValues ( [ ] )
@@ -206,7 +212,21 @@ export default function FormPlusComponent({
206
212
{ title && < h4 className = 'text-xl text-gray-600 font-semibold mb-6' > { title } </ h4 > }
207
213
< div className = 'grid grid-cols-12 gap-8' >
208
214
{ forms . map ( ( form , key ) => {
209
- if ( form ?. type == "select" ) {
215
+ if ( form ?. type == "custom" ) {
216
+ return (
217
+ < div
218
+ style = { {
219
+ gridColumn : `span ${ form ?. col ? form . col : "12" } / span ${ form ?. col ? form . col : "12" } `
220
+ } }
221
+ >
222
+ { form . custom ( {
223
+ formValues : FormValues ,
224
+ formErrors : FormErrors ,
225
+ setFormValues : ( e ) => setFormValues ( e ) ,
226
+ } ) }
227
+ </ div >
228
+ )
229
+ } else if ( form ?. type == "select" ) {
210
230
return (
211
231
< div
212
232
style = { {
@@ -320,6 +340,76 @@ export default function FormPlusComponent({
320
340
/>
321
341
</ div >
322
342
)
343
+ } else if ( form ?. type == "otp" ) {
344
+ return (
345
+ < div
346
+ style = { {
347
+ gridColumn : `span ${ form ?. col ? form . col : "12" } / span ${ form ?. col ? form . col : "12" } `
348
+ } }
349
+ >
350
+ < label className = 'text-lg font-medium' > { form . label } </ label >
351
+ < InputOtpComponent
352
+ name = { form . name }
353
+ max = { form . max }
354
+ error = { FormErrors . filter ( ( error ) => error . name == form . name ) ?. at ( 0 ) ?. msg }
355
+ onChange = { ( e ) => setFormValues ( [ ...FormValues . filter ( ( value ) => value . name != form . name ) , { name : form . name , value : e } ] ) }
356
+ setInputValue = { FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) ? FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) . value : "" }
357
+ />
358
+ </ div >
359
+ )
360
+ } else if ( form ?. type == "map" ) {
361
+ return (
362
+ < div
363
+ style = { {
364
+ gridColumn : `span ${ form ?. col ? form . col : "12" } / span ${ form ?. col ? form . col : "12" } ` ,
365
+ gridRow : `span ${ form ?. row ? form . row : "1" } / span ${ form ?. row ? form . row : "1" } `
366
+ } }
367
+ >
368
+ < InputMapComponent
369
+ name = { form . name }
370
+ label = { form . label }
371
+ error = { FormErrors . filter ( ( error ) => error . name == form . name ) ?. at ( 0 ) ?. msg }
372
+ onChange = { ( e ) => setFormValues ( [ ...FormValues . filter ( ( value ) => value . name != form . name ) , { name : form . name , value : e } ] ) }
373
+ setInputValue = { FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) ? FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) . value : "" }
374
+ />
375
+ </ div >
376
+ )
377
+ } else if ( form ?. type == "time" ) {
378
+ return (
379
+ < div
380
+ style = { {
381
+ gridColumn : `span ${ form ?. col ? form . col : "12" } / span ${ form ?. col ? form . col : "12" } ` ,
382
+ gridRow : `span ${ form ?. row ? form . row : "1" } / span ${ form ?. row ? form . row : "1" } `
383
+ } }
384
+ >
385
+ < InputTimeComponent
386
+ name = { form . name }
387
+ label = { form . label }
388
+ error = { FormErrors . filter ( ( error ) => error . name == form . name ) ?. at ( 0 ) ?. msg }
389
+ onChange = { ( e ) => setFormValues ( [ ...FormValues . filter ( ( value ) => value . name != form . name ) , { name : form . name , value : e } ] ) }
390
+ setInputValue = { FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) ? FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) . value : "" }
391
+ />
392
+ </ div >
393
+ )
394
+ } else if ( form ?. type == "count" ) {
395
+ return (
396
+ < div
397
+ style = { {
398
+ gridColumn : `span ${ form ?. col ? form . col : "12" } / span ${ form ?. col ? form . col : "12" } ` ,
399
+ gridRow : `span ${ form ?. row ? form . row : "1" } / span ${ form ?. row ? form . row : "1" } `
400
+ } }
401
+ >
402
+ < InputCountComponent
403
+ name = { form . name }
404
+ label = { form . label }
405
+ placeholder = { form . placeholder }
406
+ error = { FormErrors . filter ( ( error ) => error . name == form . name ) ?. at ( 0 ) ?. msg }
407
+ onChange = { ( e ) => setFormValues ( [ ...FormValues . filter ( ( value ) => value . name != form . name ) , { name : form . name , value : e } ] ) }
408
+ setInputValue = { FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) ? FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) . value : "" }
409
+ disabled = { form . disabled }
410
+ />
411
+ </ div >
412
+ )
323
413
} else {
324
414
return (
325
415
< >
@@ -343,6 +433,9 @@ export default function FormPlusComponent({
343
433
}
344
434
} }
345
435
setInputValue = { FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) ? FormValues . filter ( ( value ) => value . name == form . name ) ?. at ( 0 ) . value : "" }
436
+ onlyAlphabet = { form . onlyAlphabet }
437
+ autoUppercase = { form . autoUppercase }
438
+ maxWord = { form . maxWord }
346
439
/>
347
440
</ div >
348
441
@@ -374,15 +467,18 @@ export default function FormPlusComponent({
374
467
}
375
468
} ) }
376
469
</ div >
377
- < div className = 'flex justify-end mt-12' >
378
- < ButtonComponent
379
- type = { "submit" }
380
- label = "Submit"
381
- icon = { faArrowRightToBracket }
382
- bg = "primary"
383
- loading = { submitLoading }
384
- />
385
- </ div >
470
+ { customAction ? customAction : (
471
+ < div className = 'flex justify-end mt-12' >
472
+ < ButtonComponent
473
+ type = { "submit" }
474
+ label = "Kirimkan"
475
+ icon = { faArrowRightToBracket }
476
+ bg = "primary"
477
+ color = { "secondary" }
478
+ loading = { submitLoading }
479
+ />
480
+ </ div >
481
+ ) }
386
482
</ form >
387
483
388
484
0 commit comments