Add ApprovalDetail page with comment thread, revision request/resubmit flow, and ApprovalPayload component for structured payload display. Extend AgentDetail with permissions management, config revision history, and duplicate action. Add agent hire dialog with permission-gated access. Rework Costs page with per-agent breakdown table and period filtering. Add sidebar badge counts for pending approvals and inbox items. Enhance Dashboard with live metrics and sparkline trends. Extend Agents list with pending_approval status and bulk actions. Update IssueDetail with approval linking. Various component improvements to MetricCard, InlineEditor, CommentThread, and StatusBadge. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
25 lines
1.3 KiB
TypeScript
25 lines
1.3 KiB
TypeScript
import type { Approval, ApprovalComment, Issue } from "@paperclip/shared";
|
|
import { api } from "./client";
|
|
|
|
export const approvalsApi = {
|
|
list: (companyId: string, status?: string) =>
|
|
api.get<Approval[]>(
|
|
`/companies/${companyId}/approvals${status ? `?status=${encodeURIComponent(status)}` : ""}`,
|
|
),
|
|
create: (companyId: string, data: Record<string, unknown>) =>
|
|
api.post<Approval>(`/companies/${companyId}/approvals`, data),
|
|
get: (id: string) => api.get<Approval>(`/approvals/${id}`),
|
|
approve: (id: string, decisionNote?: string) =>
|
|
api.post<Approval>(`/approvals/${id}/approve`, { decisionNote }),
|
|
reject: (id: string, decisionNote?: string) =>
|
|
api.post<Approval>(`/approvals/${id}/reject`, { decisionNote }),
|
|
requestRevision: (id: string, decisionNote?: string) =>
|
|
api.post<Approval>(`/approvals/${id}/request-revision`, { decisionNote }),
|
|
resubmit: (id: string, payload?: Record<string, unknown>) =>
|
|
api.post<Approval>(`/approvals/${id}/resubmit`, { payload }),
|
|
listComments: (id: string) => api.get<ApprovalComment[]>(`/approvals/${id}/comments`),
|
|
addComment: (id: string, body: string) =>
|
|
api.post<ApprovalComment>(`/approvals/${id}/comments`, { body }),
|
|
listIssues: (id: string) => api.get<Issue[]>(`/approvals/${id}/issues`),
|
|
};
|