Skip to content

Bug #91: Blank panel on Translate without AI #18

@lllyys

Description

@lllyys

Bug #91: Blank panel when tapping Translate without AI configured

Severity: Medium

Repro

  1. Ensure no AI API key is configured (or feature flag is off)
  2. Open any book → select text → tap "Translate" from edit menu
  3. 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:

  1. Guard before opening: Check resolvedAICoordinator.isAIAvailable before setting showAIPanel = true. Show an alert instead.
  2. 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.swiftsetupIfNeeded() skips when unavailable

Refs #6

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingseverity:mediumMedium severity

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions