|
import { useState, useEffect } from 'react'; |
|
import { getDebugStatus, acknowledgeWarning, acknowledgeError, type DebugIssue } from '~/lib/api/debug'; |
|
|
|
const ACKNOWLEDGED_DEBUG_ISSUES_KEY = 'bolt_acknowledged_debug_issues'; |
|
|
|
const getAcknowledgedIssues = (): string[] => { |
|
try { |
|
const stored = localStorage.getItem(ACKNOWLEDGED_DEBUG_ISSUES_KEY); |
|
return stored ? JSON.parse(stored) : []; |
|
} catch { |
|
return []; |
|
} |
|
}; |
|
|
|
const setAcknowledgedIssues = (issueIds: string[]) => { |
|
try { |
|
localStorage.setItem(ACKNOWLEDGED_DEBUG_ISSUES_KEY, JSON.stringify(issueIds)); |
|
} catch (error) { |
|
console.error('Failed to persist acknowledged debug issues:', error); |
|
} |
|
}; |
|
|
|
export const useDebugStatus = () => { |
|
const [hasActiveWarnings, setHasActiveWarnings] = useState(false); |
|
const [activeIssues, setActiveIssues] = useState<DebugIssue[]>([]); |
|
const [acknowledgedIssueIds, setAcknowledgedIssueIds] = useState<string[]>(() => getAcknowledgedIssues()); |
|
|
|
const checkDebugStatus = async () => { |
|
try { |
|
const status = await getDebugStatus(); |
|
const issues: DebugIssue[] = [ |
|
...status.warnings.map((w) => ({ ...w, type: 'warning' as const })), |
|
...status.errors.map((e) => ({ ...e, type: 'error' as const })), |
|
].filter((issue) => !acknowledgedIssueIds.includes(issue.id)); |
|
|
|
setActiveIssues(issues); |
|
setHasActiveWarnings(issues.length > 0); |
|
} catch (error) { |
|
console.error('Failed to check debug status:', error); |
|
} |
|
}; |
|
|
|
useEffect(() => { |
|
|
|
checkDebugStatus(); |
|
|
|
const interval = setInterval(checkDebugStatus, 5 * 1000); |
|
|
|
return () => clearInterval(interval); |
|
}, [acknowledgedIssueIds]); |
|
|
|
const acknowledgeIssue = async (issue: DebugIssue) => { |
|
try { |
|
if (issue.type === 'warning') { |
|
await acknowledgeWarning(issue.id); |
|
} else { |
|
await acknowledgeError(issue.id); |
|
} |
|
|
|
const newAcknowledgedIds = [...acknowledgedIssueIds, issue.id]; |
|
setAcknowledgedIssueIds(newAcknowledgedIds); |
|
setAcknowledgedIssues(newAcknowledgedIds); |
|
setActiveIssues((prev) => prev.filter((i) => i.id !== issue.id)); |
|
setHasActiveWarnings(activeIssues.length > 1); |
|
} catch (error) { |
|
console.error('Failed to acknowledge issue:', error); |
|
} |
|
}; |
|
|
|
const acknowledgeAllIssues = async () => { |
|
try { |
|
await Promise.all( |
|
activeIssues.map((issue) => |
|
issue.type === 'warning' ? acknowledgeWarning(issue.id) : acknowledgeError(issue.id), |
|
), |
|
); |
|
|
|
const newAcknowledgedIds = [...acknowledgedIssueIds, ...activeIssues.map((i) => i.id)]; |
|
setAcknowledgedIssueIds(newAcknowledgedIds); |
|
setAcknowledgedIssues(newAcknowledgedIds); |
|
setActiveIssues([]); |
|
setHasActiveWarnings(false); |
|
} catch (error) { |
|
console.error('Failed to acknowledge all issues:', error); |
|
} |
|
}; |
|
|
|
return { hasActiveWarnings, activeIssues, acknowledgeIssue, acknowledgeAllIssues }; |
|
}; |
|
|