Skip to content

Commit d27203f

Browse files
committed
submission changes status, button fix, history approve added
1 parent 3171d41 commit d27203f

5 files changed

Lines changed: 39 additions & 31 deletions

File tree

src/backend/src/services/part-review.services.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,11 @@ export default class PartReviewService {
534534
...getPartSubmissionQueryArgs(organizationId)
535535
});
536536

537+
await prisma.part.update({
538+
where: { partId },
539+
data: { status: Review_Status.READY_FOR_REVIEW }
540+
});
541+
537542
if (!part.previewImageId && fileIds.length > 0) {
538543
await prisma.part.update({
539544
where: {

src/frontend/src/pages/PartPage/PartPageComponents/PartActionsMenu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ const PartActionsMenu: React.FC<PartActionsMenuProps> = ({
121121
const handleReopen = async () => {
122122
try {
123123
await editPart({
124-
reviewStatus: Review_Status.IN_PROGRESS,
124+
reviewStatus: part.status,
125125
wbsNum: wbsPipe(wbsNum),
126126
tagIds: part.tags.map((tag) => tag.partTagId),
127127
assigneeIds: part.assignees.map((assignee) => assignee.userId),

src/frontend/src/pages/PartPage/PartPageComponents/PdfDisplay.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ const PDFViewer: React.FC<FileDisplayProps> = ({ submission, review, hasNext, ne
288288
setIsDragging(false);
289289
setPosition({ x: 0, y: 0 });
290290
setScale(1);
291+
setLoadSuccess(false);
291292
};
292293

293294
return (

src/frontend/src/pages/PartPage/PartPageComponents/ReviewPage.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ const ReviewSidebar: React.FC<ReviewSidebarProps> = ({ submission, review }) =>
103103
<Button
104104
onClick={onFormSubmit(Review_Status.IN_PROGRESS)}
105105
sx={{
106+
minWidth: '5rem',
106107
variant: 'contained',
107108
textTransform: 'none',
108109
fontSize: 16,
@@ -118,10 +119,13 @@ const ReviewSidebar: React.FC<ReviewSidebarProps> = ({ submission, review }) =>
118119
>
119120
SAVE AS DRAFT
120121
</Button>
121-
<NERSuccessButton onClick={onFormSubmit(Review_Status.REVIEWED)}>Request Changes</NERSuccessButton>
122+
<NERSuccessButton onClick={onFormSubmit(Review_Status.REVIEWED)} sx={{ minWidth: '5rem' }}>
123+
Request Changes
124+
</NERSuccessButton>
122125
<Button
123126
onClick={onFormSubmit(Review_Status.APPROVED)}
124127
sx={{
128+
minWidth: '5rem',
125129
variant: 'contained',
126130
textTransform: 'none',
127131
fontSize: 16,

src/frontend/src/utils/part.utils.ts

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -67,56 +67,54 @@ export const getReviewRequestHistory = (reviewRequests: PartReviewRequest[]): Hi
6767
return historyEntries.sort((a, b) => a[0].getTime() - b[0].getTime());
6868
};
6969

70-
export const getReviewHistory = (submissions: PartSubmission[]): HistoryEntry[] => {
70+
export const getReviewHistory = (submissions: PartSubmission[], approved: boolean): HistoryEntry[] => {
7171
if (submissions.length === 0) return [];
7272
const historyEntries: HistoryEntry[] = [];
7373

74-
submissions.forEach((sub) => {
75-
// Each reviewer gets a separate "began reviewing" and "reviewed"
76-
const reviewsForReviewer = new Map<User, PartReview[]>();
77-
sub.reviews.forEach((review) => {
78-
const reviewer = review.userCreated;
79-
if (!reviewsForReviewer.has(reviewer)) {
80-
reviewsForReviewer.set(reviewer, []);
81-
}
82-
reviewsForReviewer.get(reviewer)!.push(review);
83-
});
84-
85-
reviewsForReviewer.forEach((reviews, reviewer) => {
86-
processReviewerHistory(reviews, reviewer, sub.name, historyEntries);
74+
submissions.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
75+
76+
// if part is approved, the last review must have approved it, so change that one to say reviewed
77+
submissions.forEach((sub, subIdx) => {
78+
sub.reviews.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
79+
sub.reviews.forEach((review, reviewIdx) => {
80+
processReviewerHistory(
81+
review,
82+
review.userCreated,
83+
sub.name,
84+
historyEntries,
85+
approved && subIdx === submissions.length - 1 && reviewIdx === sub.reviews.length - 1
86+
);
8787
});
8888
});
8989
return historyEntries;
9090
};
9191

9292
// Processes an individual reviewer's history in a submission
9393
export const processReviewerHistory = (
94-
reviews: PartReview[],
94+
review: PartReview,
9595
reviewer: User,
9696
subName: string,
97-
historyEntries: HistoryEntry[]
97+
historyEntries: HistoryEntry[],
98+
approved: boolean
9899
) => {
99100
const reviewerName = `${reviewer.firstName} ${reviewer.lastName}`;
100-
reviews.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
101-
if (reviews.length === 0) return;
102-
103-
const [firstReview] = reviews;
104-
historyEntries.push([new Date(firstReview.createdAt), `${reviewerName} began reviewing ${subName}`]);
105-
106-
reviews.forEach((review) => {
107-
if (review.completedAt) {
108-
const message = `${reviewerName} reviewed ${subName} (in ${subName} Review)`;
109-
historyEntries.push([new Date(review.completedAt), message]);
110-
}
111-
});
101+
if (review.createdAt.getDate !== review.completedAt?.getDate) {
102+
historyEntries.push([new Date(review.createdAt), `${reviewerName} began reviewing ${subName}`]);
103+
}
104+
if (review.completedAt) {
105+
const message = approved
106+
? `${reviewerName} approved ${subName}`
107+
: `${reviewerName} reviewed ${subName} (in ${subName} Review)`;
108+
historyEntries.push([new Date(review.completedAt), message]);
109+
}
112110
};
113111

114112
export const completePartHistory = (part: Part): string[] => {
115113
const history = [
116114
...getPartCreationHistory(part.createdAt, part.commonName),
117115
...getSubmissionHistory(part.submissions, part.commonName),
118116
...getReviewRequestHistory(part.reviewRequests),
119-
...getReviewHistory(part.submissions)
117+
...getReviewHistory(part.submissions, part.status === Review_Status.APPROVED)
120118
];
121119
const result: string[] = [];
122120
history

0 commit comments

Comments
 (0)