Add dashboard inbox decline and dismiss actions

Add dashboard inbox decline and dismiss actions
This commit is contained in:
Eyejoker
2026-04-27 03:34:36 +09:00
committed by GitHub
parent 96845110ee
commit 38c3430156
5 changed files with 404 additions and 27 deletions

View File

@@ -390,15 +390,15 @@ function readTaskForm(
}
function inboxActionsFor(item: InboxItem): DashboardInboxAction[] {
if (item.source !== 'paired-task') return [];
if (
item.kind === 'reviewer-request' ||
item.kind === 'approval' ||
item.kind === 'arbiter-request'
item.source === 'paired-task' &&
(item.kind === 'reviewer-request' ||
item.kind === 'approval' ||
item.kind === 'arbiter-request')
) {
return ['run'];
return ['run', 'decline', 'dismiss'];
}
return [];
return ['dismiss'];
}
function inboxActionLabel(
@@ -406,7 +406,8 @@ function inboxActionLabel(
action: DashboardInboxAction,
t: Messages,
): string {
if (action !== 'run') return action;
if (action === 'dismiss') return t.inbox.actions.dismiss;
if (action === 'decline') return t.inbox.actions.decline;
if (item.kind === 'reviewer-request') return t.inbox.actions.runReview;
if (item.kind === 'approval') return t.inbox.actions.finalize;
if (item.kind === 'arbiter-request') return t.inbox.actions.runArbiter;
@@ -1785,10 +1786,21 @@ function App() {
item: InboxItem,
action: DashboardInboxAction,
) {
if (
action === 'decline' &&
typeof window !== 'undefined' &&
!window.confirm(t.inbox.actions.confirmDecline)
) {
return;
}
const actionKey: InboxActionKey = `${item.id}:${action}`;
setInboxActionKey(actionKey);
try {
await runInboxAction(item.id, action);
await runInboxAction(item.id, action, {
lastOccurredAt: item.lastOccurredAt,
requestId: makeClientRequestId(),
});
await refresh(false);
} catch (err) {
setError(err instanceof Error ? err.message : String(err));

View File

@@ -101,7 +101,7 @@ export interface DashboardTask {
}
export type DashboardTaskAction = 'pause' | 'resume' | 'cancel';
export type DashboardInboxAction = 'run';
export type DashboardInboxAction = 'run' | 'decline' | 'dismiss';
export type DashboardTaskScheduleType = 'cron' | 'interval' | 'once';
export type DashboardTaskContextMode = 'group' | 'isolated';
@@ -214,15 +214,21 @@ export async function updateScheduledTask(
export async function runInboxAction(
inboxId: string,
action: DashboardInboxAction,
options: { requestId?: string; lastOccurredAt?: string } = {},
): Promise<{
ok: true;
id: string;
taskId: string;
intentKind: string;
queued: boolean;
taskId?: string;
intentKind?: string;
status?: string;
queued?: boolean;
dismissed?: boolean;
duplicate?: boolean;
}> {
return postJson(`/api/inbox/${encodeURIComponent(inboxId)}/actions`, {
action,
lastOccurredAt: options.lastOccurredAt,
requestId: options.requestId,
});
}

View File

@@ -110,6 +110,9 @@ export interface Messages {
runReview: string;
finalize: string;
runArbiter: string;
decline: string;
dismiss: string;
confirmDecline: string;
};
};
rooms: {
@@ -358,6 +361,9 @@ export const messages = {
runReview: 'Run review',
finalize: 'Finalize',
runArbiter: 'Run arbiter',
decline: 'Decline',
dismiss: 'Dismiss',
confirmDecline: 'Decline this item?',
},
},
rooms: {
@@ -590,6 +596,9 @@ export const messages = {
runReview: 'Run review',
finalize: 'Finalize',
runArbiter: 'Run arbiter',
decline: 'Decline',
dismiss: 'Dismiss',
confirmDecline: 'Decline this item?',
},
},
rooms: {
@@ -822,6 +831,9 @@ export const messages = {
runReview: '运行评审',
finalize: '完成',
runArbiter: '运行仲裁',
decline: '拒绝',
dismiss: '忽略',
confirmDecline: '确认拒绝此项?',
},
},
rooms: {
@@ -1054,6 +1066,9 @@ export const messages = {
runReview: 'レビュー実行',
finalize: 'Finalize',
runArbiter: '仲裁実行',
decline: '拒否',
dismiss: '非表示',
confirmDecline: 'この項目を拒否しますか?',
},
},
rooms: {