@@ -19,23 +19,59 @@ const PersonForm = ({addUser, newName, newNumber, setNewName, setNewNumber}) =>
19
19
</ form >
20
20
)
21
21
22
- const Persons = ( { persons, filter, setPersons} ) => {
22
+ const Persons = ( { persons, filter, setPersons, setColor , setMessage } ) => {
23
23
const personsFilter = persons . filter ( person =>
24
24
person . name . toLowerCase ( ) . includes ( filter . toLowerCase ( ) )
25
25
)
26
26
27
- const deleteUser = ( person , setPersons ) => {
27
+ const deleteUser = ( person , setPersons , setColor , setMessage ) => {
28
28
if ( window . confirm ( `Delete ${ person . name } ?` ) ) {
29
29
personService
30
30
. remove ( person . id )
31
- . then ( response => setPersons ( persons . filter ( p => p . id !== person . id ) ) )
31
+ . then ( response => {
32
+ setPersons ( persons . filter ( p => p . id !== person . id ) )
33
+ setMessage ( `Deleted ${ person . name } ` )
34
+ setTimeout ( ( ) => { setMessage ( null ) } , 5000 )
35
+ } )
36
+ . catch ( error => {
37
+ setPersons ( persons . filter ( p => p . id !== person . id ) )
38
+ setColor ( 'red' )
39
+ setMessage ( `Information of ${ persons . name } has already been removed from server` )
40
+ setTimeout ( ( ) => {
41
+ setMessage ( null )
42
+ setColor ( 'green' )
43
+ } , 5000 )
44
+ } )
32
45
}
33
46
}
34
47
35
48
return personsFilter . map ( ( person , i ) =>
36
49
< div key = { i } >
37
50
{ person . name } { person . number } < button
38
- onClick = { ( ) => deleteUser ( person , setPersons ) } > delete</ button >
51
+ onClick = { ( ) =>
52
+ deleteUser ( person , setPersons , setColor , setMessage ) } > delete</ button >
53
+ </ div >
54
+ )
55
+ }
56
+
57
+ const Notification = ( { message, color} ) => {
58
+ const greenStyle = {
59
+ color : color ,
60
+ background : 'lightgrey' ,
61
+ fontSize : 20 ,
62
+ borderStyle : 'solid' ,
63
+ borderRadius : 5 ,
64
+ padding : 10 ,
65
+ marginBottom : 10
66
+ }
67
+
68
+ if ( message === null ) {
69
+ return null
70
+ }
71
+
72
+ return (
73
+ < div style = { greenStyle } >
74
+ { message }
39
75
</ div >
40
76
)
41
77
}
@@ -45,6 +81,8 @@ const App = () => {
45
81
const [ newName , setNewName ] = useState ( '' )
46
82
const [ newNumber , setNewNumber ] = useState ( '' )
47
83
const [ filter , setFilter ] = useState ( '' )
84
+ const [ message , setMessage ] = useState ( null )
85
+ const [ color , setColor ] = useState ( 'green' )
48
86
49
87
useEffect ( ( ) => {
50
88
personService
@@ -68,12 +106,27 @@ const App = () => {
68
106
. update ( person . id , changedPerson )
69
107
. then ( response => {
70
108
setPersons ( persons . map ( p => p . id !== person . id ? p : response . data ) )
109
+ setMessage ( `Updated ${ newName } ` )
110
+ setTimeout ( ( ) => { setMessage ( null ) } , 5000 )
111
+ } )
112
+ . catch ( error => {
113
+ setPersons ( persons . filter ( p => p . id !== person . id ) )
114
+ setColor ( 'red' )
115
+ setMessage ( `Information of ${ newName } has already been removed from server` )
116
+ setTimeout ( ( ) => {
117
+ setMessage ( null )
118
+ setColor ( 'green' )
119
+ } , 5000 )
71
120
} )
72
121
}
73
122
} else {
74
123
personService
75
124
. create ( personObject )
76
- . then ( response => setPersons ( persons . concat ( response . data ) ) )
125
+ . then ( response => {
126
+ setPersons ( persons . concat ( response . data ) )
127
+ setMessage ( `Added ${ newName } ` )
128
+ setTimeout ( ( ) => { setMessage ( null ) } , 5000 )
129
+ } )
77
130
}
78
131
setNewName ( '' )
79
132
setNewNumber ( '' )
@@ -83,6 +136,9 @@ const App = () => {
83
136
< div >
84
137
< h2 > Phonebook</ h2 >
85
138
139
+ < Notification message = { message } color = { color }
140
+ setMessage = { setMessage } />
141
+
86
142
< Filter value = { filter } onchange = { setFilter } />
87
143
88
144
< h3 > Add a new</ h3 >
@@ -95,7 +151,11 @@ const App = () => {
95
151
96
152
< h3 > Numbers</ h3 >
97
153
98
- < Persons persons = { persons } filter = { filter } setPersons = { setPersons } />
154
+ < Persons
155
+ persons = { persons } filter = { filter }
156
+ setPersons = { setPersons } setMessage = { setMessage }
157
+ setColor = { setColor }
158
+ />
99
159
</ div >
100
160
)
101
161
}
0 commit comments