1+ import { useState } from "react" ;
2+ import { v4 as uuidv4 } from "uuid" ;
3+
4+ export function AddMoney ( { open, setOpen, transactionType } ) {
5+ const [ amount , setAmount ] = useState ( "" ) ;
6+ const [ category , setCategory ] = useState ( "" ) ;
7+ const [ date , setDate ] = useState ( "" ) ;
8+
9+
10+ const [ loading , setLoading ] = useState ( false ) ;
11+
12+
13+ const handleSubmit = async ( ) => {
14+ //setOpen(false);
15+ console . log ( amount , category , date ) ;
16+ setLoading ( true ) ;
17+ const amountNumber = transactionType === "outcome" ? Number ( - amount ) : Number ( amount ) ;
18+ const response = await fetch ( "http://localhost:5984/finary" , {
19+ method : "POST" ,
20+ headers : {
21+ "Content-Type" : "application/json" ,
22+ Authorization : "Basic " + btoa ( "admin:secret" ) ,
23+ } ,
24+ body : JSON . stringify ( {
25+ id : uuidv4 ( ) ,
26+ amount : amountNumber ,
27+ category,
28+ created_at : date ,
29+ user_id : "10" ,
30+ } ) ,
31+ } ) ;
32+ const result = await response . json ( ) ;
33+ console . log ( result ) ;
34+ setLoading ( false ) ;
35+ setOpen ( false ) ;
36+ }
37+ return (
38+ < >
39+ < button onClick = { ( ) => setOpen ( true ) } > + Add</ button >
40+ < dialog open = { open } >
41+ < article >
42+ < h2 > Add { transactionType } </ h2 >
43+ < p >
44+ Please enter the { transactionType } details below:
45+ </ p >
46+ < ul >
47+ < label > Amount: </ label >
48+ < input type = "number" value = { amount } onChange = { ( e ) => setAmount ( e . target . value ) } />
49+ < label > Category: </ label >
50+ < input type = "text" value = { category } onChange = { ( e ) => setCategory ( e . target . value ) } />
51+ < label > Date: </ label >
52+ < input type = "date" value = { date } onChange = { ( e ) => setDate ( e . target . value ) } />
53+
54+ </ ul >
55+ < footer >
56+ < button class = "secondary" onClick = { ( ) => setOpen ( false ) } >
57+ Cancel
58+ </ button >
59+ < button onClick = { ( ) => handleSubmit ( ) } disabled = { loading } > { loading ? "Loading..." : "Confirm" } </ button >
60+ </ footer >
61+ </ article >
62+ </ dialog >
63+ </ >
64+ ) ;
65+ }
0 commit comments