11import { cn } from '@/lib/utils' ;
2- import { FC , useState } from 'react' ;
2+ import { FC , FormEvent , useState } from 'react' ;
3+ import { DockerBody , DockerResponse } from './docker.types' ;
4+ import { usePost } from '@/core/react-query' ;
5+ import { useDownload } from '@/hooks' ;
6+ import { TerraformTemplateAPI } from '@/enums/api.enums' ;
7+ import { toast } from 'sonner' ;
38
49const Docker : FC = ( ) => {
10+ const { mutateAsync : dockerMutate , isPending : dockerPending } = usePost <
11+ DockerResponse ,
12+ DockerBody
13+ > ( TerraformTemplateAPI . Docker , 'docker' ) ;
14+ const { download, isPending : downloadPending } = useDownload ( {
15+ folderName : 'MyTerraform' ,
16+ source : 'iam' ,
17+ downloadFileName : 'Iam' ,
18+ } ) ;
19+
520 const [ services , setServices ] = useState ( {
621 docker_image : false ,
722 docker_container : false ,
@@ -14,11 +29,27 @@ const Docker: FC = () => {
1429 } ) ) ;
1530 } ;
1631
32+ const handleForm = async ( e : FormEvent ) => {
33+ e . preventDefault ( ) ;
34+
35+ try {
36+ const dockerBody : DockerBody = {
37+ ...services ,
38+ } ;
39+
40+ await dockerMutate ( dockerBody ) ;
41+ await download ( ) ;
42+ } catch ( error ) {
43+ console . log ( error ) ;
44+ toast . error ( 'Something went wrong' ) ;
45+ }
46+ } ;
47+
1748 return (
18- < div className = "w-full max-w-96" >
19- < div className = "border border-gray-500 rounded-md " >
49+ < form onSubmit = { handleForm } className = "w-full max-w-96" >
50+ < div className = "rounded-md border border-gray-500" >
2051 < div className = "divide-y divide-gray-500" >
21- < div className = "flex items-center justify-between w-full px-3 py-3" >
52+ < div className = "flex w-full items-center justify-between px-3 py-3" >
2253 < p > Key Pair</ p >
2354 < input
2455 type = "checkbox"
@@ -28,7 +59,7 @@ const Docker: FC = () => {
2859 onChange = { ( ) => handleServices ( 'docker_image' ) }
2960 />
3061 </ div >
31- < div className = "flex items-center justify-between w-full px-3 py-3" >
62+ < div className = "flex w-full items-center justify-between px-3 py-3" >
3263 < p > Security Group</ p >
3364 < input
3465 type = "checkbox"
@@ -41,10 +72,18 @@ const Docker: FC = () => {
4172 </ div >
4273 </ div >
4374 </ div >
44- < button className = "w-full mt-3 text-white btn bg-orange-base hover:bg-orange-base/70" >
45- Submit
75+ < button
76+ type = "submit"
77+ disabled = { dockerPending || downloadPending }
78+ className = "btn mt-3 w-full bg-orange-base text-white hover:bg-orange-base/70 disabled:bg-orange-base/50 disabled:text-white/70"
79+ >
80+ { dockerPending
81+ ? 'Generate Terraform...'
82+ : downloadPending
83+ ? 'Downloading Template...'
84+ : 'Generate Terraform' }
4685 </ button >
47- </ div >
86+ </ form >
4887 ) ;
4988} ;
5089
0 commit comments