diff --git a/packages/core/src/inbox/engagement.test.ts b/packages/core/src/inbox/engagement.test.ts index 4256dced8f..f880ace30c 100644 --- a/packages/core/src/inbox/engagement.test.ts +++ b/packages/core/src/inbox/engagement.test.ts @@ -65,6 +65,19 @@ describe("buildBulkActionEvents", () => { expect(events.every((e) => e.action_type === "delete")).toBe(true); }); + it("passes through the remove-suggested-reviewer action type", () => { + const events = buildBulkActionEvents({ + reports: [fakeReport({ id: "a" }), fakeReport({ id: "b" })], + actionType: "remove_suggested_reviewer", + surface: "toolbar", + }); + + expect( + events.every((e) => e.action_type === "remove_suggested_reviewer"), + ).toBe(true); + expect(events.every((e) => e.dismissal_reason === undefined)).toBe(true); + }); + it("attaches dismissal reason/note only for dismiss, truncating the note", () => { const longNote = "x".repeat(600); const [dismissed] = buildBulkActionEvents({ diff --git a/packages/core/src/inbox/engagement.ts b/packages/core/src/inbox/engagement.ts index bb31915e35..dc4428ddbb 100644 --- a/packages/core/src/inbox/engagement.ts +++ b/packages/core/src/inbox/engagement.ts @@ -123,7 +123,7 @@ export function resolveActionProperties( /** Bulk-capable report actions fired from the selection toolbar / dismiss flows. */ export type InboxBulkActionType = Extract< InboxReportActionProperties["action_type"], - "dismiss" | "snooze" | "delete" | "reingest" + "dismiss" | "snooze" | "delete" | "reingest" | "remove_suggested_reviewer" >; export interface BuildBulkActionEventsInput { @@ -137,8 +137,9 @@ export interface BuildBulkActionEventsInput { /** * Build `INBOX_REPORT_ACTION` payloads for a bulk (or single-report) dismiss / - * snooze / delete / reingest. Pure so it can be unit-tested and reused across - * the toolbar, the per-row dismiss action, and detail-screen dismiss. + * snooze / delete / reingest / remove-suggested-reviewer. Pure so it can be + * unit-tested and reused across the toolbar, the per-row dismiss action, and + * detail-screen dismiss. * * `is_bulk` / `bulk_size` carry the grouping; `rank` / `list_size` are left at 0 * because these flows act on a selection, not a positional list slot. diff --git a/packages/ui/src/features/inbox/components/InboxBulkSelectionBar.tsx b/packages/ui/src/features/inbox/components/InboxBulkSelectionBar.tsx index 263b2b5d4b..9a6e96e28b 100644 --- a/packages/ui/src/features/inbox/components/InboxBulkSelectionBar.tsx +++ b/packages/ui/src/features/inbox/components/InboxBulkSelectionBar.tsx @@ -3,6 +3,7 @@ import { EyeSlashIcon, PauseIcon, TrashIcon, + UserMinusIcon, XIcon, } from "@phosphor-icons/react"; import { isDismissalReasonSnooze } from "@posthog/shared/dismissalReasons"; @@ -158,6 +159,24 @@ export function InboxBulkSelectionBar({ Reingest + +