1
0
forked from baron/baron-sso

정합성 검사 중복실행 방지

This commit is contained in:
2026-05-14 09:23:54 +09:00
parent df543d6203
commit 92e607aee8
4 changed files with 120 additions and 37 deletions

View File

@@ -77,6 +77,19 @@ function reasonLabel(reason: string) {
}
}
function recheckStatusText(status: "idle" | "running" | "success" | "error") {
switch (status) {
case "running":
return "정합성 검사를 실행 중입니다.";
case "success":
return "검사가 완료되었습니다.";
case "error":
return "검사에 실패했습니다.";
default:
return "";
}
}
function OrphanLoginIDTable({
items,
selectedIds,
@@ -156,6 +169,9 @@ function OrphanLoginIDTable({
function DataIntegrityContent() {
const queryClient = useQueryClient();
const [selectedOrphanIds, setSelectedOrphanIds] = useState<string[]>([]);
const [recheckStatus, setRecheckStatus] = useState<
"idle" | "running" | "success" | "error"
>("idle");
const { data, isLoading, isError, error, refetch, isFetching } = useQuery({
queryKey: ["data-integrity-report"],
queryFn: fetchDataIntegrityReport,
@@ -194,6 +210,16 @@ function DataIntegrityContent() {
deleteMutation.mutate(selectedOrphanIds);
}
};
const isManualRechecking = recheckStatus === "running";
const handleRecheck = async () => {
if (isManualRechecking) {
return;
}
setRecheckStatus("running");
const result = await refetch();
setRecheckStatus(result.isError ? "error" : "success");
};
const recheckMessage = recheckStatusText(recheckStatus);
return (
<main className="space-y-6 p-6 md:p-8">
@@ -204,15 +230,25 @@ function DataIntegrityContent() {
</h2>
</div>
<Button
type="button"
variant="outline"
onClick={() => refetch()}
disabled={isFetching}
>
<Database size={16} />
</Button>
<div className="flex flex-col items-end gap-1">
<Button
type="button"
variant="outline"
onClick={handleRecheck}
disabled={isLoading || isFetching || isManualRechecking}
>
<Database size={16} />
{isManualRechecking ? "검사 중" : "다시 검사"}
</Button>
{recheckMessage ? (
<output
aria-live="polite"
className="text-xs text-muted-foreground"
>
{recheckMessage}
</output>
) : null}
</div>
</div>
{isError ? (