Skip to content

Fix App-Wide Navigation Issues - Back Buttons and Missing Features #204

@DrunkOnJava

Description

@DrunkOnJava

🐛 Problem Description

Multiple navigation inconsistencies and missing core features identified across all app screens.

Navigation Issues:

  1. Back buttons on main tab screens - Appearing on Home, Locations, Analytics, and Settings tabs
  2. Missing universal search - No app-wide search functionality
  3. No Add Item access point - Primary user action not accessible from main UI
  4. Tab bar text truncation - "Electro" instead of "Electronics"
  5. Missing barcode scanner access - Featured in onboarding but no UI entry point

🔍 Existing Code References

Navigation Components:

  • MainTabView: Source/Views/MainTabView.swift
    • Has state variables for modals: showingAddItem, showingScanner, showingNaturalLanguageSearch
    • Modal presentations configured but not triggered
  • NavigationStackView: UI-Navigation/Sources/UINavigation/Navigation/NavigationStackView.swift
    • Custom navigation wrapper with back button control

Missing Feature Implementations:

  • Add Item: State exists but no UI trigger
  • Barcode Scanner: Features-Scanner/Sources/FeaturesScanner/Views/BarcodeScannerView.swift - Fully implemented
  • Natural Language Search: Referenced but not implemented
  • Receipt Scanner: Features-Receipts/Sources/FeaturesReceipts/Views/ReceiptScannerView.swift - Available

📝 Implementation Plan

1. Remove Back Buttons from Main Tabs

// In MainTabView.swift, modify tab content views
TabView(selection: $selectedTab) {
    NavigationStackView(showBackButton: false) {
        HomeDashboardView()
    }
    .tabItem { /* ... */ }
    .tag(0)
    
    NavigationStackView(showBackButton: false) {
        ItemsListView()
    }
    .tabItem { /* ... */ }
    .tag(1)
    
    // Repeat for all tabs...
}

2. Add Floating Action Button for Add Item

// In MainTabView.swift
ZStack {
    TabView(selection: $selectedTab) {
        // ... existing tabs
    }
    
    // Floating Action Button
    VStack {
        Spacer()
        HStack {
            Spacer()
            
            Menu {
                Button(action: { showingAddItem = true }) {
                    Label("Add Item", systemImage: "plus.circle")
                }
                
                Button(action: { showingScanner = true }) {
                    Label("Scan Barcode", systemImage: "barcode.viewfinder")
                }
                
                Button(action: { showingReceiptScanner = true }) {
                    Label("Scan Receipt", systemImage: "doc.text.viewfinder")
                }
            } label: {
                Image(systemName: "plus.circle.fill")
                    .resizable()
                    .frame(width: 56, height: 56)
                    .foregroundColor(.accentColor)
                    .background(Circle().fill(Color.white))
                    .shadow(radius: 4)
            }
            .padding()
        }
    }
}

3. Implement Universal Search Bar

// Add to MainTabView or as overlay
struct UniversalSearchBar: View {
    @State private var searchText = ""
    @State private var showingResults = false
    
    var body: some View {
        VStack {
            HStack {
                Image(systemName: "magnifyingglass")
                    .foregroundColor(.secondary)
                
                TextField("Search items, locations, or scan barcode...", text: $searchText)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .onSubmit {
                        performSearch()
                    }
                
                Button(action: { showingScanner = true }) {
                    Image(systemName: "barcode.viewfinder")
                }
            }
            .padding()
            .background(Color(.systemBackground))
            .shadow(radius: 2)
        }
    }
}

4. Fix Tab Bar Text Truncation

// In ItemsListView category tabs
ScrollView(.horizontal, showsIndicators: false) {
    HStack(spacing: 12) {
        ForEach(categories) { category in
            Text(category.name)
                .font(.system(size: 14))
                .padding(.horizontal, 16)
                .padding(.vertical, 8)
                .background(selectedCategory == category ? Color.accentColor : Color.gray.opacity(0.2))
                .foregroundColor(selectedCategory == category ? .white : .primary)
                .clipShape(Capsule())
                .lineLimit(1)
                .minimumScaleFactor(0.8) // Allow text scaling
        }
    }
    .padding(.horizontal)
}

5. Add Quick Actions to Home Dashboard

// In HomeDashboardView.swift
struct QuickActionsCard: View {
    @Binding var showingAddItem: Bool
    @Binding var showingScanner: Bool
    
    var body: some View {
        VStack(alignment: .leading, spacing: 12) {
            Text("Quick Actions")
                .font(.headline)
            
            HStack(spacing: 16) {
                QuickActionButton(
                    icon: "plus.circle",
                    title: "Add Item",
                    action: { showingAddItem = true }
                )
                
                QuickActionButton(
                    icon: "barcode.viewfinder",
                    title: "Scan",
                    action: { showingScanner = true }
                )
                
                QuickActionButton(
                    icon: "magnifyingglass",
                    title: "Search",
                    action: { showingSearch = true }
                )
            }
        }
        .padding()
        .background(Color(.secondarySystemBackground))
        .cornerRadius(12)
    }
}

🎯 Additional Navigation Enhancements

Deep Linking Support

// Enable deep linking for common actions
enum DeepLink: String {
    case addItem = "homeinventory://add-item"
    case scanBarcode = "homeinventory://scan"
    case search = "homeinventory://search"
}

Keyboard Shortcuts (iPad)

.keyboardShortcut("n", modifiers: .command) // New item
.keyboardShortcut("f", modifiers: .command) // Search
.keyboardShortcut("s", modifiers: [.command, .shift]) // Scan

✅ Acceptance Criteria

  • No back buttons appear on main tab screens
  • Floating action button provides quick access to Add/Scan functions
  • Universal search accessible from all screens
  • Tab bar text displays without truncation
  • Barcode scanner accessible via multiple entry points
  • All modal presentations work correctly
  • Navigation state preserved when switching tabs
  • Keyboard shortcuts work on iPad

🏷️ Labels

  • bug
  • enhancement

📊 Priority

High - Core UX and navigation flow

🔗 Related Issues

📎 Key Files

  • Source/Views/MainTabView.swift - Main navigation container
  • UI-Navigation/Sources/UINavigation/Navigation/NavigationStackView.swift - Navigation wrapper
  • Features-Scanner/Sources/FeaturesScanner/Views/BarcodeScannerView.swift - Scanner implementation

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions