-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathBookDetailsAuthors.js
63 lines (56 loc) · 1.61 KB
/
BookDetailsAuthors.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import React, {useState, useEffect} from "react"
import BookDetailsOneAuthor from "./BookDetailsOneAuthor"
function BookDetailsAuthors({itemsKey, authors, setNewAuthors}) {
if (!authors) return (<></>)
const [localAuthorsArray, setlocalAuthorsArray] = useState(authors)
useEffect(()=> {
setlocalAuthorsArray(authors)
}, [authors])
useEffect(()=> {
setNewAuthors(itemsKey, localAuthorsArray)
}, [localAuthorsArray])
const setAuthor = (prevAuthor, newAuthor) => {
setlocalAuthorsArray(prev => {
return prev.map(author =>
prevAuthor === author ? newAuthor : author)
})
}
const addMore = (fromLink)=> {
if (fromLink){
fromLink.preventDefault()
}
const emptyAuthor = {
"birth_year":"",
"death_year":"",
"name":""
}
setlocalAuthorsArray(prevAuthors => (
[
...prevAuthors,
emptyAuthor
]
))
}
const displayAuthors = localAuthorsArray.map((author, idx) => (
<li key={idx}>
<BookDetailsOneAuthor
author={author}
setAuthor={setAuthor}
idx={idx}
/>
</li>
))
return (
<div>
<h3>Authors</h3>
<ul className="authors">{displayAuthors}</ul>
<a className={`btn btn-authors btn-add`}
onClick={addMore}
href="#"
>
Add author
</a>
</div>
)
}
export default BookDetailsAuthors