diff --git a/src/views/repos/Cob/Revision.svelte b/src/views/repos/Cob/Revision.svelte index 88495192c..34c359655 100644 --- a/src/views/repos/Cob/Revision.svelte +++ b/src/views/repos/Cob/Revision.svelte @@ -525,6 +525,12 @@ + {#if review.threads.length > 0} + {#each review.threads as thread} +
+ + {/each} + {/if} {/if} {/each} {/if} diff --git a/src/views/repos/Patch.svelte b/src/views/repos/Patch.svelte index f159baef7..732fc1f87 100644 --- a/src/views/repos/Patch.svelte +++ b/src/views/repos/Patch.svelte @@ -15,8 +15,12 @@ replies: Comment[]; } + interface ReviewWithThreads extends Review { + threads: Thread[]; + } + interface TimelineReview { - inner: [string, Review]; + inner: [string, ReviewWithThreads]; type: "review"; timestamp: number; } @@ -186,11 +190,21 @@ revisionDescription: rev.description, }, [ - ...rev.reviews.map(review => ({ - timestamp: review.timestamp, - type: "review", - inner: [review.author.id, review], - })), + ...rev.reviews.map(review => { + const reviewThreads: Thread[] = review.comments + .filter(comment => !comment.replyTo) + .map(thread => ({ + root: thread, + replies: review.comments + .filter(comment => comment.replyTo === thread.id) + .sort((a, b) => a.timestamp - b.timestamp), + })); + return { + timestamp: review.timestamp, + type: "review", + inner: [review.author.id, { ...review, threads: reviewThreads }], + }; + }), ...patch.merges .filter(merge => merge.revision === rev.id) .map(inner => ({