diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index 0ce70099d..822cd1150 100644 --- a/apps/web/src/app/globals.css +++ b/apps/web/src/app/globals.css @@ -279,3 +279,8 @@ display: none; } } + +@keyframes spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} diff --git a/apps/web/src/components/incident/incident-card.tsx b/apps/web/src/components/incident/incident-card.tsx index 950173176..6ceea1562 100644 --- a/apps/web/src/components/incident/incident-card.tsx +++ b/apps/web/src/components/incident/incident-card.tsx @@ -140,8 +140,7 @@ export function IncidentCard({ incident, decision, onApprovalChange }: IncidentC setButtonState('error') setErrorMessage(error instanceof Error ? error.message : String(error)) } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [currentProposalId, decision, incident.incident_id, isDecisionReady, buttonState, onApprovalChange, csrfToken]) + }, [currentProposalId, decision, incident.incident_id, isDecisionReady, buttonState, onApprovalChange, csrfToken, t]) // ── handleReject(移植自 DualStateIncidentCard Phase 6.5)──────────────── const handleReject = useCallback(async () => { @@ -173,8 +172,7 @@ export function IncidentCard({ incident, decision, onApprovalChange }: IncidentC setButtonState('error') setErrorMessage(error instanceof Error ? error.message : String(error)) } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [currentProposalId, decision, incident.incident_id, isDecisionReady, buttonState, onApprovalChange, csrfToken]) + }, [currentProposalId, decision, incident.incident_id, isDecisionReady, buttonState, onApprovalChange, csrfToken, t]) // ── 授權按鈕渲染 ─────────────────────────────────────────────────────────── const renderApproveButtons = () => { @@ -318,7 +316,7 @@ export function IncidentCard({ incident, decision, onApprovalChange }: IncidentC {/* AI 提案行(可展開)*/} {decisionAction && ( <> -