1- import { PaperClipIcon } from '@heroicons/react/outline/index '
1+ import { ReviewSummary } from 'apps/peer-review/app/ReviewSummary '
22interface Reviews {
33 reviewRound : ReviewRound
44 reviews : Review [ ]
55}
66
7- interface Review {
7+ export interface Review {
88 id : number
99 submissionId : number
1010 reviewerId : number
@@ -96,10 +96,10 @@ interface ReviewRound {
9696
9797interface Submission {
9898 itemsMax : number
99- items : Item [ ]
99+ items : SubmissionItem [ ]
100100}
101101
102- interface Item {
102+ export interface SubmissionItem {
103103 _href : string
104104 contextId : number
105105 currentPublicationId : number
@@ -156,9 +156,15 @@ interface CoverImage {
156156}
157157
158158const fetchPR = async ( submission : string ) => {
159- const url = `${ process . env . OJS_URL } /_reviews/${ submission } /reviews?apiToken=${ process . env . OJS_TOKEN } `
160- const res = await fetch ( url )
161- return res . json ( ) as Promise < Reviews [ ] >
159+ try {
160+ const url = `${ process . env . OJS_URL } /_reviews/${ submission } /reviews?apiToken=${ process . env . OJS_TOKEN } `
161+ const res = await fetch ( url )
162+ return res . json ( ) as Promise < Reviews [ ] >
163+ } catch ( e ) {
164+ console . error ( 'ERROR' )
165+ console . error ( e )
166+ return [ ]
167+ }
162168}
163169
164170const fetchFile = async ( file : string ) => {
@@ -167,143 +173,83 @@ const fetchFile = async (file: string) => {
167173 return res . blob ( )
168174}
169175
170- const fetchSubmission = async ( submission : string ) => {
171- const url = `${ process . env . OJS_URL } /submissions/${ submission } ?apiToken=${ process . env . OJS_TOKEN } `
172- console . log ( { url } )
173- const res = await fetch ( url )
174- console . log ( { res } )
175- return res . json ( ) as Promise < Item >
176+ export const fetchSubmission = async (
177+ submission : string ,
178+ query : URLSearchParams = new URLSearchParams ( ) ,
179+ ) => {
180+ try {
181+ const url = `${ process . env . OJS_URL } /submissions/${ submission } ?apiToken=${
182+ process . env . OJS_TOKEN
183+ } &${ query . toString ( ) } }`
184+ console . log ( { url } )
185+ const res = await fetch ( url )
186+ console . log ( { res } )
187+ return res . json ( ) as Promise < SubmissionItem >
188+ } catch ( e ) {
189+ console . error ( 'ERROR' )
190+ console . error ( e )
191+ return null
192+ }
176193}
177194
178195export default async function Page ( props : { params : { pr : string } } ) {
179196 const {
180197 params : { pr } ,
181198 } = props
182199
183- console . log ( props )
200+ console . log ( { props } )
184201 const thing = await fetchPR ( pr )
185202 const submission = await fetchSubmission ( pr )
186- console . log ( 'Submission' )
187- console . log ( submission )
203+ console . log ( { submission } )
204+ if ( ! submission ) {
205+ return < div > Submission not found</ div >
206+ }
188207 return (
189208 < div className = "container" >
190- < main className = "w-full max-w-2xl mx-auto" >
209+ < main className = "w-full max-w-2xl mx-auto flex flex-col gap-8 " >
191210 { /* Create a nicely styled page to display reviews, with links to download files */ }
192211
193- < h1 className = "my-10 text-2xl font-bold flex flex-col" >
212+ < h1 className = "mt-8 text-2xl font-bold flex flex-col" >
194213 < span className = "text-lg font-normal" > Reviews for</ span >
195214 < span > { submission . publications ?. [ 0 ] ?. title ?. en_US } </ span >
196215 </ h1 >
197- < div className = "flex flex-col" >
216+ < div className = "flex flex-col gap-2" >
217+ < span className = "text-lg font-normal" > by</ span >
218+ < span className = "font-normal" > { submission . publications ?. [ 0 ] ?. authorsString } </ span >
219+ </ div >
220+ < div className = "flex flex-col gap-2" >
221+ < span className = "text-lg font-normal" > Submitted</ span >
222+ < span className = "font-normal" > { submission . dateSubmitted } </ span >
223+ </ div >
224+
225+ < div className = "flex flex-col gap-2" >
226+ < span className = "text-lg font-normal" > Last Activity</ span >
227+ < span className = "font-normal" > { submission . lastModified } </ span >
228+ </ div >
229+
230+ < div className = "flex flex-col gap-2" >
231+ < span className = "text-lg font-normal" > Status</ span >
232+ < span className = "font-normal" > { submission . statusLabel } </ span >
233+ </ div >
234+
235+ < div className = "flex flex-col gap-2" >
236+ < span className = "text-lg font-normal" > Progress</ span >
237+ < span className = "font-normal" > { submission . submissionProgress } %</ span >
238+ </ div >
239+
240+ < div className = "flex flex-col gap-2" >
241+ < span className = "text-lg font-normal" > DOI</ span >
242+ < span className = "font-normal" > { submission . publications ?. [ 0 ] ?. [ 'pub-id::doi' ] } </ span >
243+ </ div >
244+
245+ < div className = "flex flex-col gap-8" >
198246 { thing . map ( ( review ) => (
199- < div className = "flex flex-col" key = { review . reviewRound . id } >
200- < h2 className = "text-xl font-bold" > Review Round { review . reviewRound . round } </ h2 >
247+ < div className = "flex flex-col gap-4 " key = { review . reviewRound . id } >
248+ < h2 className = "text-2xl font-bold" > Review Round { review . reviewRound . round } </ h2 >
201249 < h3 className = "text-lg font-bold" > { review . reviewRound . statusKey } </ h3 >
202250 < div className = "flex flex-col gap-8" >
203251 { review . reviews . map ( ( review ) => (
204- < div
205- className = "bg-white shadow overflow-hidden sm:rounded-lg"
206- key = { review . reviewerId }
207- >
208- < div className = "px-4 py-5 sm:px-6" >
209- < h3 className = "text-lg leading-6 font-medium text-gray-900" >
210- Review by { review . reviewerFullName }
211- </ h3 >
212- < p className = "mt-1 max-w-2xl text-sm text-gray-500" >
213- Personal details and application.
214- </ p >
215- </ div >
216- < div className = "border-t border-gray-200 px-4 py-5 sm:px-6" >
217- < dl className = "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2" >
218- < div className = "sm:col-span-1" >
219- < dt className = "text-sm font-medium text-gray-500" > Full name</ dt >
220- < dd className = "mt-1 text-sm text-gray-900" > { review . reviewerFullName } </ dd >
221- </ div >
222- < div className = "sm:col-span-1" >
223- < dt className = "text-sm font-medium text-gray-500" > Recommendation</ dt >
224- < dd className = "mt-1 text-sm text-gray-900" >
225- { review . recommendationText }
226- </ dd >
227- </ div >
228- < div className = "sm:col-span-1" >
229- < dt className = "text-sm font-medium text-gray-500" > Email address</ dt >
230- < dd className = "mt-1 text-sm text-gray-900" >
231- { review . reviewerComments ?. [ 0 ] ?. authorEmail ?. toLowerCase ( ) }
232- </ dd >
233- </ div >
234- < div className = "sm:col-span-1" >
235- < dt className = "text-sm font-medium text-gray-500" > Salary expectation</ dt >
236- < dd className = "mt-1 text-sm text-gray-900" > $120,000</ dd >
237- </ div >
238- < div className = "sm:col-span-2" >
239- < dt className = "text-sm font-medium text-gray-500" > Reviewer Comments</ dt >
240- < dd className = "mt-1 text-sm text-gray-900" >
241- < div
242- className = "prose"
243- dangerouslySetInnerHTML = { {
244- __html : review . reviewerComments ?. [ 0 ] ?. comments ,
245- } }
246- />
247- </ dd >
248- </ div >
249- { review . reviewFiles . length > 0 && (
250- < div className = "sm:col-span-2" >
251- < dt className = "text-sm font-medium text-gray-500" > Attachments</ dt >
252- < dd className = "mt-1 text-sm text-gray-900" >
253- < ul
254- role = "list"
255- className = "border border-gray-200 rounded-md divide-y divide-gray-200"
256- >
257- { review . reviewFiles . map ( ( file ) => (
258- < li
259- key = { file . _href }
260- className = "pl-3 pr-4 py-3 flex items-center justify-between text-sm"
261- >
262- < div className = "w-0 flex-1 flex items-center" >
263- < PaperClipIcon
264- className = "flex-shrink-0 h-5 w-5 text-gray-400"
265- aria-hidden = "true"
266- />
267- < span className = "ml-2 flex-1 w-0 truncate" >
268- { file . name . en_US }
269- </ span >
270- </ div >
271- < div className = "ml-4 flex-shrink-0" >
272- < a
273- href = "#"
274- className = "font-medium text-indigo-600 hover:text-indigo-500"
275- >
276- Download
277- </ a >
278- </ div >
279- </ li >
280- // <li className="pl-3 pr-4 py-3 flex items-center justify-between text-sm">
281- // <div className="w-0 flex-1 flex items-center">
282- // <PaperClipIcon
283- // className="flex-shrink-0 h-5 w-5 text-gray-400"
284- // aria-hidden="true"
285- // />
286- // <span className="ml-2 flex-1 w-0 truncate">
287- // coverletter_back_end_developer.pdf
288- // </span>
289- // </div>
290- // <div className="ml-4 flex-shrink-0">
291- // <a
292- // href="#"
293- // className="font-medium text-indigo-600 hover:text-indigo-500"
294- // >
295- // Download
296- // </a>
297- // </div>
298- // </li>
299- ) ) }
300- </ ul >
301- </ dd >
302- </ div >
303- ) }
304- </ dl >
305- </ div >
306- </ div >
252+ < ReviewSummary review = { review } key = { review . id } />
307253 ) ) }
308254 </ div >
309255 </ div >
0 commit comments