mirror of
https://github.com/discourse/discourse.git
synced 2026-08-03 09:53:24 -05:00
UX: Show specific review actions in timeline (#36524)
The reviewable timeline now displays specific action text based on the review outcome instead of a generic "Reviewed by" message. This provides a clearer context about what action was taken on the reviewable item.
This commit is contained in:
@@ -944,7 +944,9 @@ en:
|
||||
claimed_by: "Claimed by %{username} · %{relativeDate}"
|
||||
unclaimed_by: "Unclaimed by %{username} · %{relativeDate}"
|
||||
reviewed: "Reviewed"
|
||||
reviewed_by: "Reviewed by %{username} · %{relativeDate}"
|
||||
approved_by: "Approved by %{username} · %{relativeDate}"
|
||||
rejected_by: "Rejected by %{username} · %{relativeDate}"
|
||||
ignored_by: "Ignored by %{username} · %{relativeDate}"
|
||||
view_conversation: "view PM"
|
||||
note_added: "Moderator note"
|
||||
note_added_by: "Moderator note by %{username} · %{relativeDate}"
|
||||
|
||||
@@ -131,15 +131,19 @@ export default class ReviewableTimeline extends Component {
|
||||
if (!reviewedEvents.has(reviewedKey)) {
|
||||
// Determine icon based on score status
|
||||
let reviewIcon;
|
||||
let titleKey;
|
||||
switch (score.status) {
|
||||
case 1: // approved
|
||||
reviewIcon = "check";
|
||||
titleKey = "review.timeline.approved_by";
|
||||
break;
|
||||
case 2: // rejected
|
||||
reviewIcon = "times";
|
||||
reviewIcon = "xmark";
|
||||
titleKey = "review.timeline.rejected_by";
|
||||
break;
|
||||
case 3: // ignored
|
||||
reviewIcon = "far-eye-slash";
|
||||
titleKey = "review.timeline.ignored_by";
|
||||
break;
|
||||
default:
|
||||
reviewIcon = "check"; // fallback
|
||||
@@ -150,10 +154,7 @@ export default class ReviewableTimeline extends Component {
|
||||
date: score.reviewed_at,
|
||||
user: score.reviewed_by,
|
||||
icon: reviewIcon,
|
||||
titleKey: "review.timeline.reviewed_by",
|
||||
description: score.reason
|
||||
? htmlSafe(`<p>${score.reason}</p>`)
|
||||
: undefined,
|
||||
titleKey,
|
||||
};
|
||||
|
||||
events.push(reviewedEvent);
|
||||
|
||||
@@ -34,10 +34,18 @@ module PageObjects
|
||||
within(reviewable_by_id(reviewable.id)) { page.has_css?(".review-item__status.--rejected") }
|
||||
end
|
||||
|
||||
def has_rejected_item_in_timeline?(reviewable)
|
||||
within(reviewable_by_id(reviewable.id)) { page.has_text?("Rejected by") }
|
||||
end
|
||||
|
||||
def has_reviewable_with_approved_status?(reviewable)
|
||||
within(reviewable_by_id(reviewable.id)) { page.has_css?(".review-item__status.--approved") }
|
||||
end
|
||||
|
||||
def has_approved_item_in_timeline?(reviewable)
|
||||
within(reviewable_by_id(reviewable.id)) { page.has_text?("Approved by") }
|
||||
end
|
||||
|
||||
def has_reviewable_with_ignored_status?(reviewable)
|
||||
within(reviewable_by_id(reviewable.id)) { page.has_css?(".review-item__status.--ignored") }
|
||||
end
|
||||
|
||||
@@ -331,6 +331,7 @@ describe "Viewing reviewable item", type: :system do
|
||||
refreshed_review_page.visit_reviewable(reviewable)
|
||||
refreshed_review_page.select_bundled_action(reviewable, "user-delete_user_block")
|
||||
expect(refreshed_review_page).to have_reviewable_with_rejected_status(reviewable)
|
||||
expect(refreshed_review_page).to have_rejected_item_in_timeline(reviewable)
|
||||
end
|
||||
|
||||
it "Allows to approve user" do
|
||||
@@ -340,6 +341,7 @@ describe "Viewing reviewable item", type: :system do
|
||||
refreshed_review_page.select_bundled_action(reviewable, "user-approve_user")
|
||||
|
||||
expect(refreshed_review_page).to have_reviewable_with_approved_status(reviewable)
|
||||
expect(refreshed_review_page).to have_approved_item_in_timeline(reviewable)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user