@@ -13,281 +13,43 @@ import { Journal, Contact, Manifesto, Home } from './pages';
1313import { Footer , Auth , Header , Login , JournalDetails , AddJournal } from './components' ;
1414import Navbar from './components/marginals/Navbar/Navbar' ;
1515import Edit from './components/EditJournal/Edit' ;
16+ import useAxiosFetch from './hooks/useAxiosFetch' ;
17+ import { DataProvider } from './context/DataContext' ;
1618
1719function App ( ) {
18- const [ posts , setPosts ] = useState ( [ ] ) ;
19- const [ loading , setLoading ] = useState ( false ) ;
20- const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
21- const [ postsPerPage ] = useState ( 5 ) ;
22- const [ search , setSearch ] = useState ( '' ) ;
23- const [ searchResults , setSearchResults ] = useState ( [ ] ) ;
24-
25- const [ title , setTitle ] = useState ( '' ) ;
26- const [ editTitle , setEditTitle ] = useState ( '' ) ;
27- const [ authors , setAuthors ] = useState ( '' ) ;
28- const [ editAuthors , setEditAuthors ] = useState ( '' ) ;
29- const [ journaltype , setJournaltype ] = useState ( '' ) ;
30- const [ editJournaltype , setEditJournaltype ] = useState ( '' ) ;
31- const [ topic , setTopic ] = useState ( '' ) ;
32- const [ editTopic , setEditTopic ] = useState ( '' ) ;
33- const [ published , setPublished ] = useState ( '' ) ;
34- const [ issn , setIssn ] = useState ( ) ;
35- const [ editIssn , setEditIssn ] = useState ( ) ;
36- const [ updated , setUpdated ] = useState ( format ( new Date ( ) , 'MMMM dd, yyyyy pp' ) ) ;
37- const [ link , setLink ] = useState ( '' ) ;
38- const [ editLink , setEditLink ] = useState ( '' ) ;
39- const [ policy , setPolicy ] = useState ( 'policy 1' ) ;
40- const [ editPolicy , setEditPolicy ] = useState ( 'policy 1' ) ;
41- const [ dataavail , setDataavail ] = useState ( false ) ;
42- const [ editDataavail , setEditDataavail ] = useState ( false ) ;
43- const handleChangeData = ( nextChecked ) => {
44- setDataavail ( nextChecked ) ;
45- } ;
46- const [ datashared , setDatashared ] = useState ( false ) ;
47- const [ editDatashared , setEditDatashared ] = useState ( false ) ;
48- const handleChangeData2 = ( nextChecked ) => {
49- setDatashared ( nextChecked ) ;
50- } ;
51- const [ peerreview , setPeerreview ] = useState ( false ) ;
52- const [ editPeerreview , setEditPeerreview ] = useState ( false ) ;
53- const handleChangePeer = ( nextChecked ) => {
54- setPeerreview ( nextChecked ) ;
55- } ;
56- const [ enforced , setEnforced ] = useState ( '' ) ;
57- const [ editEnforced , setEditEnforced ] = useState ( '' ) ;
58- const [ evidence , setEvidence ] = useState ( '' ) ;
59- const [ editEvidence , setEditEvidence ] = useState ( '' ) ;
60- const [ isPending , setIsPending ] = useState ( false ) ;
61-
62- const [ filteredData , setFilteredData ] = useState ( [ ] ) ;
63- const [ wordEntered , setWordEntered ] = useState ( '' ) ;
64-
65- const handleFilter = ( event ) => {
66- const searchWord = event . target . value ;
67- setWordEntered ( searchWord ) ;
68- const newFilter = posts . filter ( ( value ) => {
69- return value . title . toLowerCase ( ) . includes ( searchWord . toLowerCase ( ) ) ;
70- } ) ;
71-
72- if ( searchWord === '' ) {
73- setFilteredData ( [ ] ) ;
74- } else {
75- setFilteredData ( newFilter ) ;
76- }
77- } ;
78-
79- const history = useHistory ( ) ;
80-
81- useEffect ( ( ) => {
82- const fetchPosts = async ( ) => {
83- try {
84- setLoading ( true ) ;
85- const response = await api . get ( '/journals' ) ;
86- setPosts ( response . data ) ;
87- setLoading ( false ) ;
88- } catch ( err ) {
89- if ( err . response ) {
90- console . log ( err . response . data ) ;
91- console . log ( err . response . status ) ;
92- console . log ( err . response . headers ) ;
93- } else {
94- console . log ( `Error: ${ err . message } ` ) ;
95- }
96- }
97- } ;
98- fetchPosts ( ) ;
99- } , [ ] ) ;
100-
101- useEffect ( ( ) => {
102- const filteredResults = posts . filter (
103- ( post ) =>
104- post . issn . includes ( search ) || post . title . toLowerCase ( ) . includes ( search . toLowerCase ( ) ) ,
105- ) ;
106-
107- setSearchResults ( filteredResults . reverse ( ) ) ;
108- } , [ posts , search ] ) ;
109-
110- const indexOfLastPost = currentPage * postsPerPage ;
111- const indexOfFirstPost = indexOfLastPost - postsPerPage ;
112- const currentPost = searchResults . slice ( indexOfFirstPost , indexOfLastPost ) ;
113- const paginate = ( pageNumber ) => setCurrentPage ( pageNumber ) ;
114-
115- const handleSubmit = async ( e ) => {
116- e . preventDefault ( ) ;
117- const id = posts . length ? posts [ posts . length - 1 ] . id + 1 : 1 ;
118- const datetime = format ( new Date ( ) , 'MMMM dd, yyyyy pp' ) ;
119- const newPost = {
120- title,
121- authors,
122- journaltype,
123- topic,
124- published : datetime ,
125- issn,
126- updated,
127- link,
128- policy,
129- dataavail,
130- datashared,
131- peerreview,
132- enforced,
133- evidence,
134- } ;
135- try {
136- const response = await api . post ( '/journals' , newPost ) ;
137- const allPosts = [ ...posts , response . data ] ;
138- setPosts ( allPosts ) ;
139- history . push ( '/' ) ;
140- } catch ( err ) {
141- console . log ( `Error: ${ err . message } ` ) ;
142- }
143- } ;
144-
145- const handleEdit = async ( id ) => {
146- const datetime = format ( new Date ( ) , 'MMMM dd, yyyyy pp' ) ;
147- const updatedPost = {
148- title : editTitle ,
149- authors : editAuthors ,
150- journaltype : editJournaltype ,
151- topic : editTopic ,
152- issn : editIssn ,
153- updated : datetime ,
154- link : editLink ,
155- policy : editPolicy ,
156- dataavail : editDataavail ,
157- datashared : editDatashared ,
158- peerreview : editPeerreview ,
159- enforced : editEnforced ,
160- evidence : editEvidence ,
161- } ;
162- try {
163- const response = await api . put ( `/journals/${ id } ` , updatedPost ) ;
164- setPosts ( posts . map ( ( post ) => ( post . id === id ? { ...response . data } : post ) ) ) ;
165- history . push ( '/' ) ;
166- } catch ( err ) {
167- console . log ( `Error: ${ err . message } ` ) ;
168- }
169- } ;
170-
171- const handleDelete = async ( id ) => {
172- try {
173- await api . delete ( `/journals/${ id } ` ) ;
174- const postsList = posts . filter ( ( post ) => post . id !== id ) ;
175- setPosts ( postsList ) ;
176- history . push ( '/' ) ;
177- } catch ( err ) {
178- console . log ( `Error: ${ err . message } ` ) ;
179- }
180- } ;
181-
18220 return (
18321 < div className = 'App' >
184- < Switch >
185- < Route exact path = '/' >
186- < Home
187- search = { search }
188- setSearch = { setSearch }
189- posts = { posts }
190- searchResults = { searchResults }
191- filteredData = { filteredData }
192- setFilteredData = { setFilteredData }
193- wordEntered = { wordEntered }
194- setWordEntered = { setWordEntered }
195- handleFilter = { handleFilter }
196- />
197- </ Route >
198- < Route path = '/manifesto' >
199- < Manifesto />
200- </ Route >
201- < Route path = '/journal' >
202- < Journal
203- search = { search }
204- setSearch = { setSearch }
205- posts = { currentPost }
206- loading = { loading }
207- postsPerPage = { postsPerPage }
208- totalPosts = { posts . length }
209- paginate = { paginate }
210- />
211- </ Route >
212- < Route exact path = '/addjournal' >
213- < AddJournal
214- title = { title }
215- setTitle = { setTitle }
216- authors = { authors }
217- setAuthors = { setAuthors }
218- journaltype = { journaltype }
219- setJournaltype = { setJournaltype }
220- topic = { topic }
221- setTopic = { setTopic }
222- issn = { issn }
223- setIssn = { setIssn }
224- link = { link }
225- setLink = { setLink }
226- policy = { policy }
227- setPolicy = { setPolicy }
228- dataavail = { dataavail }
229- setDataavail = { setDataavail }
230- handleChangeData = { handleChangeData }
231- datashared = { datashared }
232- setDatashared = { setDatashared }
233- handleChangeData2 = { handleChangeData2 }
234- peerreview = { peerreview }
235- setPeerreview = { setPeerreview }
236- handleChangePeer = { handleChangePeer }
237- enforced = { enforced }
238- setEnforced = { setEnforced }
239- evidence = { evidence }
240- setEvidence = { setEvidence }
241- isPending = { isPending }
242- setIsPending = { setIsPending }
243- handleSubmit = { handleSubmit }
244- />
245- </ Route >
246- < Route path = '/edit/:id' >
247- < Edit
248- posts = { posts }
249- editTitle = { editTitle }
250- setEditTitle = { setEditTitle }
251- editAuthors = { editAuthors }
252- setEditAuthors = { setEditAuthors }
253- editJournaltype = { editJournaltype }
254- setEditJournaltype = { setEditJournaltype }
255- editTopic = { editTopic }
256- setEditTopic = { setEditTopic }
257- editIssn = { editIssn }
258- setEditIssn = { setEditIssn }
259- editLink = { editLink }
260- setEditLink = { setEditLink }
261- editPolicy = { editPolicy }
262- setEditPolicy = { setEditPolicy }
263- editDataavail = { editDataavail }
264- setEditDataavail = { setEditDataavail }
265- editDatashared = { editDatashared }
266- setEditDatashared = { setEditDatashared }
267- editPeerreview = { editPeerreview }
268- setEditPeerreview = { setEditPeerreview }
269- editEnforced = { editEnforced }
270- setEditEnforced = { setEditEnforced }
271- editEvidence = { editEvidence }
272- setEditEvidence = { setEditEvidence }
273- isPending = { isPending }
274- setIsPending = { setIsPending }
275- handleEdit = { handleEdit }
276- />
277- </ Route >
278- < Route path = '/policy/:id' >
279- < JournalDetails posts = { posts } handleDelete = { handleDelete } />
280- </ Route >
281- < Route path = '/Signup' >
282- < Auth />
283- </ Route >
284- < Route path = '/Login' >
285- < Login />
286- </ Route >
287- < Redirect to = '/' />
288- </ Switch >
289- < Navbar search = { search } setSearch = { setSearch } />
290- < Footer />
22+ < DataProvider >
23+ < Switch >
24+ < Route exact path = '/' >
25+ < Home />
26+ </ Route >
27+ < Route path = '/manifesto' >
28+ < Manifesto />
29+ </ Route >
30+ < Route path = '/journal' >
31+ < Journal />
32+ </ Route >
33+ < Route exact path = '/addjournal' >
34+ < AddJournal />
35+ </ Route >
36+ < Route path = '/edit/:id' >
37+ < Edit />
38+ </ Route >
39+ < Route path = '/policy/:id' >
40+ < JournalDetails />
41+ </ Route >
42+ < Route path = '/Signup' >
43+ < Auth />
44+ </ Route >
45+ < Route path = '/Login' >
46+ < Login />
47+ </ Route >
48+ < Redirect to = '/' />
49+ </ Switch >
50+ < Navbar />
51+ < Footer />
52+ </ DataProvider >
29153 </ div >
29254 ) ;
29355}
0 commit comments