-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathBookDetails.js
112 lines (95 loc) · 2.95 KB
/
BookDetails.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import React, {useState, useEffect} from "react"
import BookDetailsAuthors from "./BookDetailsAuthors"
import BookDetailsArray from "./BookDetailsArray"
import BookDetailsFromats from "./BookDetailsFormats"
function BookDetails({book, setNewBookDetails}) {
if (!book) return (<></>)
const [formData, setFormData] = useState(book)
useEffect(()=> {
setFormData(book)
}, [book.id])
let {
id,
authors,
bookshelves,
download_count,
formats,
languages,
media_type,
subjects,
title
} = formData
const setNewArray = (itemsKey, newArray) => {
setFormData(prev => ({
...prev,
[itemsKey]: newArray
}))
}
const handleChange = ({target}) => {
const {name, value} = target
setFormData(prev => ({
...prev,
[name]:value
}))
if (name === "title") {
setNewBookDetails(formData)
}
}
return (
<div>
<h2>Book details</h2>
<div className="title">
<h3>Title</h3>
<input
className="input input-title"
type="text"
name="title"
value={title}
onChange={handleChange}/>
</div>
<div className="mediatype">
<h3>Media type</h3>
<input
className="input input-mediatype"
type="text"
name="media_type"
value={media_type}
onChange={handleChange}/>
</div>
<BookDetailsArray
itemsName={"Languages"}
itemsKey={"languages"}
inputArray={languages}
setNewArray={setNewArray}/>
<BookDetailsArray
itemsName={"Subjects"}
itemsKey={"subjects"}
inputArray={subjects}
setNewArray={setNewArray}/>
<BookDetailsArray
itemsName={"Bookshelves"}
itemsKey={"bookshelves"}
inputArray={bookshelves}
setNewArray={setNewArray}/>
<BookDetailsAuthors
authors={authors}
itemsKey={"authors"}
setNewAuthors={setNewArray} />
<div className="downloadcount">
<h3>Download count</h3>
<input
className="input-downloadcount"
type="number"
name="download_count"
value={download_count}
onChange={handleChange}/>
</div>
<BookDetailsFromats
itemsKey={"formats"}
formats={formats}
setNewFormats={setNewArray}
/>
</div>
)
}
export default BookDetails