diff --git a/ui/src/components/IssueRow.tsx b/ui/src/components/IssueRow.tsx
index 7f6eaada..d3bcfcff 100644
--- a/ui/src/components/IssueRow.tsx
+++ b/ui/src/components/IssueRow.tsx
@@ -1,6 +1,7 @@
import type { ReactNode } from "react";
import type { Issue } from "@paperclipai/shared";
import { Link } from "@/lib/router";
+import { X } from "lucide-react";
import { cn } from "../lib/utils";
import { StatusIcon } from "./StatusIcon";
@@ -17,6 +18,8 @@ interface IssueRowProps {
trailingMeta?: ReactNode;
unreadState?: UnreadState | null;
onMarkRead?: () => void;
+ onArchive?: () => void;
+ archiveDisabled?: boolean;
className?: string;
}
@@ -31,6 +34,8 @@ export function IssueRow({
trailingMeta,
unreadState = null,
onMarkRead,
+ onArchive,
+ archiveDisabled,
className,
}: IssueRowProps) {
const issuePathId = issue.identifier ?? issue.id;
@@ -113,6 +118,26 @@ export function IssueRow({
)}
/>
+ ) : onArchive ? (
+
) : (
)}
diff --git a/ui/src/pages/Inbox.tsx b/ui/src/pages/Inbox.tsx
index b9f82047..5564e004 100644
--- a/ui/src/pages/Inbox.tsx
+++ b/ui/src/pages/Inbox.tsx
@@ -94,35 +94,6 @@ function readIssueIdFromRun(run: HeartbeatRun): string | null {
return null;
}
-function InboxArchiveButton({
- onArchive,
- disabled,
-}: {
- onArchive: () => void;
- disabled: boolean;
-}) {
- return (
-
- );
-}
function FailedRunInboxRow({
run,
@@ -957,8 +928,8 @@ export function Inbox() {
issueLinkState={issueLinkState}
className={
isArchiving
- ? "pointer-events-none -translate-x-3 opacity-0 transition-transform transition-opacity duration-200"
- : "transition-transform transition-opacity duration-200"
+ ? "pointer-events-none -translate-x-4 scale-[0.98] opacity-0 transition-all duration-200 ease-out"
+ : "transition-all duration-200 ease-out"
}
desktopMetaLeading={(
<>
@@ -987,19 +958,15 @@ export function Inbox() {
: `updated ${timeAgo(issue.updatedAt)}`
}
unreadState={
- isMineTab
- ? null
- : isUnread ? "visible" : isFading ? "fading" : "hidden"
+ isUnread ? "visible" : isFading ? "fading" : "hidden"
}
onMarkRead={() => markReadMutation.mutate(issue.id)}
- desktopTrailing={
- isMineTab ? (
- archiveIssueMutation.mutate(issue.id)}
- disabled={isArchiving || archiveIssueMutation.isPending}
- />
- ) : undefined
+ onArchive={
+ isMineTab
+ ? () => archiveIssueMutation.mutate(issue.id)
+ : undefined
}
+ archiveDisabled={isArchiving || archiveIssueMutation.isPending}
trailingMeta={
issue.lastExternalCommentAt
? `commented ${timeAgo(issue.lastExternalCommentAt)}`