Skip to content

Commit 9be39dc

Browse files
committed
Adding styles to react exercises 2.19.-2.20.
1 parent e864320 commit 9be39dc

File tree

1 file changed

+66
-6
lines changed

1 file changed

+66
-6
lines changed

part2/photobook/src/App.js

+66-6
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,59 @@ const PersonForm = ({addUser, newName, newNumber, setNewName, setNewNumber}) =>
1919
</form>
2020
)
2121

22-
const Persons = ({persons, filter, setPersons}) => {
22+
const Persons = ({persons, filter, setPersons, setColor, setMessage}) => {
2323
const personsFilter = persons.filter(person =>
2424
person.name.toLowerCase().includes(filter.toLowerCase())
2525
)
2626

27-
const deleteUser = (person, setPersons) => {
27+
const deleteUser = (person, setPersons, setColor, setMessage) => {
2828
if (window.confirm(`Delete ${person.name}?`)) {
2929
personService
3030
.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+
})
3245
}
3346
}
3447

3548
return personsFilter.map((person, i) =>
3649
<div key={i}>
3750
{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}
3975
</div>
4076
)
4177
}
@@ -45,6 +81,8 @@ const App = () => {
4581
const [newName, setNewName] = useState('')
4682
const [newNumber, setNewNumber] = useState('')
4783
const [filter, setFilter] = useState('')
84+
const [message, setMessage] = useState(null)
85+
const [color, setColor] = useState('green')
4886

4987
useEffect(() => {
5088
personService
@@ -68,12 +106,27 @@ const App = () => {
68106
.update(person.id, changedPerson)
69107
.then(response => {
70108
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)
71120
})
72121
}
73122
} else {
74123
personService
75124
.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+
})
77130
}
78131
setNewName('')
79132
setNewNumber('')
@@ -83,6 +136,9 @@ const App = () => {
83136
<div>
84137
<h2>Phonebook</h2>
85138

139+
<Notification message={message} color={color}
140+
setMessage={setMessage} />
141+
86142
<Filter value={filter} onchange={setFilter} />
87143

88144
<h3>Add a new</h3>
@@ -95,7 +151,11 @@ const App = () => {
95151

96152
<h3>Numbers</h3>
97153

98-
<Persons persons={persons} filter={filter} setPersons={setPersons}/>
154+
<Persons
155+
persons={persons} filter={filter}
156+
setPersons={setPersons} setMessage={setMessage}
157+
setColor={setColor}
158+
/>
99159
</div>
100160
)
101161
}

0 commit comments

Comments
 (0)