Bug #91: Blank panel when tapping Translate without AI configured
Severity: Medium
Repro
- Ensure no AI API key is configured (or feature flag is off)
- Open any book → select text → tap "Translate" from edit menu
- Observe the AI panel
Expected
A clear error state or setup prompt: "Configure an AI provider in Settings to use translation."
Actual
The AI panel opens but shows a blank or unhelpful state. The .readerTranslateRequested notification fires, ensureAIReady() runs, but since isAIAvailable is false, the coordinator's setupIfNeeded() skips VM creation. The panel then renders with nil view models.
Root Cause
The Translate flow in ReaderContainerView.swift does:
.onReceive(.readerTranslateRequested) { notification in
ensureAIReady()
if let transVM = resolvedAICoordinator.translationViewModel {
transVM.originalText = info.selectedText
}
aiInitialTab = .translate
showAIPanel = true // ← opens panel regardless
}
No guard prevents showAIPanel = true when AI is unavailable. The panel opens but has no view models to render content.
Proper Fix
Either:
- Guard before opening: Check
resolvedAICoordinator.isAIAvailable before setting showAIPanel = true. Show an alert instead.
- Panel handles gracefully:
AIReaderPanel already has .featureDisabled state with "Enable AI in Settings" message — ensure this state is reached when VMs are nil.
Files
vreader/Views/Reader/ReaderContainerView.swift — notification handler (lines 138-146)
vreader/Views/Reader/ReaderContainerView+Sheets.swift — sheet builder checks for nil VMs
vreader/Views/Reader/AIReaderPanel.swift — has .featureDisabled state (lines 244-266) but may not be triggered
vreader/Services/AI/AIReaderAvailability.swift — availability check
vreader/Views/Reader/ReaderAICoordinator.swift — setupIfNeeded() skips when unavailable
Refs #6
Bug #91: Blank panel when tapping Translate without AI configured
Severity: Medium
Repro
Expected
A clear error state or setup prompt: "Configure an AI provider in Settings to use translation."
Actual
The AI panel opens but shows a blank or unhelpful state. The
.readerTranslateRequestednotification fires,ensureAIReady()runs, but sinceisAIAvailableis false, the coordinator'ssetupIfNeeded()skips VM creation. The panel then renders with nil view models.Root Cause
The Translate flow in
ReaderContainerView.swiftdoes:No guard prevents
showAIPanel = truewhen AI is unavailable. The panel opens but has no view models to render content.Proper Fix
Either:
resolvedAICoordinator.isAIAvailablebefore settingshowAIPanel = true. Show an alert instead.AIReaderPanelalready has.featureDisabledstate with "Enable AI in Settings" message — ensure this state is reached when VMs are nil.Files
vreader/Views/Reader/ReaderContainerView.swift— notification handler (lines 138-146)vreader/Views/Reader/ReaderContainerView+Sheets.swift— sheet builder checks for nil VMsvreader/Views/Reader/AIReaderPanel.swift— has.featureDisabledstate (lines 244-266) but may not be triggeredvreader/Services/AI/AIReaderAvailability.swift— availability checkvreader/Views/Reader/ReaderAICoordinator.swift—setupIfNeeded()skips when unavailableRefs #6