You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
965 B
TypeScript
32 lines
965 B
TypeScript
// frontend/lib/hooks/useApprovals.ts
|
|
"use client";
|
|
import useSWR from "swr";
|
|
import type { ApprovalQueue, Autonomy } from "@/lib/types";
|
|
import { approvalsApi } from "@/lib/approvals/api";
|
|
|
|
export function useApprovals() {
|
|
const { data, error, isLoading, mutate } = useSWR<ApprovalQueue>(
|
|
"approvals",
|
|
() => approvalsApi.queue(),
|
|
{ revalidateOnFocus: false },
|
|
);
|
|
|
|
const setAutonomy = async (level: Autonomy) => {
|
|
await approvalsApi.setAutonomy(level); // 변경 즉시 큐 재구성
|
|
await mutate(); // GET /approvals 가 derive_queue 반영
|
|
};
|
|
const approve = async (id: string) => {
|
|
await approvalsApi.approve(id);
|
|
await mutate();
|
|
};
|
|
const undo = async (id: string) => {
|
|
await approvalsApi.undo(id);
|
|
await mutate();
|
|
};
|
|
const approveAll = async () => {
|
|
await approvalsApi.approveAll();
|
|
await mutate();
|
|
};
|
|
return { data, error, isLoading, setAutonomy, approve, undo, approveAll, reload: mutate };
|
|
}
|