Skip to content

Commit 7fe7863

Browse files
committed
refactor: phone-book.js solution
1 parent 65e7153 commit 7fe7863

File tree

1 file changed

+24
-27
lines changed

1 file changed

+24
-27
lines changed

solutions/phone-book.js

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import React, { useState, useReducer } from "react"
2-
import ReactDOM from "react-dom"
1+
import React, { useState, useReducer, useCallback } from "react"
2+
import { createRoot } from "react-dom/client"
33

44
const style = {
55
table: {
@@ -34,7 +34,7 @@ const style = {
3434
},
3535
}
3636

37-
function PhoneBookForm({ addEntryToPhoneBook }) {
37+
function PhoneBookForm({ entries, setEntries }) {
3838
const initialFormState = {
3939
userFirstname: "Coder",
4040
userLastname: "Byte",
@@ -55,6 +55,24 @@ function PhoneBookForm({ addEntryToPhoneBook }) {
5555
const onChange = ({ target: { name, value } }) =>
5656
dispatch({ type: name, payload: value })
5757

58+
const addEntryToPhoneBook = useCallback(() => {
59+
const { userFirstname, userLastname, userPhone } = formState
60+
const newEntries = [
61+
...entries,
62+
{ userFirstname, userLastname, userPhone },
63+
]
64+
const newSortedEntries = newEntries.sort((a, b) => {
65+
const userLastnameA = a.userLastname.toLowerCase()
66+
const userLastnameB = b.userLastname.toLowerCase()
67+
return userLastnameA < userLastnameB
68+
? -1
69+
: userLastnameA > userLastnameB
70+
? 1
71+
: 0
72+
})
73+
setEntries(newSortedEntries)
74+
}, [formState])
75+
5876
return (
5977
<form
6078
onSubmit={e => {
@@ -132,34 +150,13 @@ function InformationTable({ entries }) {
132150

133151
function Application() {
134152
const [entries, setEntries] = useState([])
135-
136-
const addEntryToPhoneBook = ({
137-
userFirstname,
138-
userLastname,
139-
userPhone,
140-
}) => {
141-
const newEntries = [
142-
...entries,
143-
{ userFirstname, userLastname, userPhone },
144-
]
145-
const newSortedEntries = newEntries.sort((a, b) => {
146-
const userLastnameA = a.userLastname.toLowerCase()
147-
const userLastnameB = b.userLastname.toLowerCase()
148-
return userLastnameA < userLastnameB
149-
? -1
150-
: userLastnameA > userLastnameB
151-
? 1
152-
: 0
153-
})
154-
setEntries(newSortedEntries)
155-
}
156-
157153
return (
158154
<section>
159-
<PhoneBookForm addEntryToPhoneBook={addEntryToPhoneBook} />
155+
<PhoneBookForm entries={entries} setEntries={setEntries} />
160156
<InformationTable entries={entries} />
161157
</section>
162158
)
163159
}
164160

165-
ReactDOM.render(<Application />, document.getElementById("root"))
161+
const root = createRoot(document.getElementById("root"))
162+
root.render(<Application />)

0 commit comments

Comments
 (0)