Skip to content

TUI: Refactor 500-line event loop into smaller components #156

@mihaelamj

Description

@mihaelamj

Summary

Break down the 500-line main event loop in PackageCurator into smaller, testable components.

Current Architecture

PackageCurator.run()
  ├─ 500-line switch statement
  ├─ View mode handling
  ├─ Input processing
  ├─ State mutations
  └─ Rendering logic

Proposed Architecture

PackageCurator
  ├─ ViewRouter (handles view transitions)
  ├─ InputHandler (processes keyboard input)
  ├─ RenderEngine (manages screen updates)
  └─ StateManager (coordinates state changes)

Design

// ViewRouter.swift
actor ViewRouter {
    func route(_ key: Key, state: AppState) -> ViewTransition?
}

// InputHandler.swift
struct InputHandler {
    func handleInput(_ key: Key, viewMode: ViewMode, state: AppState) -> InputAction
}

// RenderEngine.swift
actor RenderEngine {
    func render(viewMode: ViewMode, state: AppState, screen: Screen) async
}

Tasks

  • Design router/handler interfaces
  • Extract view routing logic into ViewRouter
  • Extract input handling into InputHandler
  • Extract rendering logic into RenderEngine
  • Update PackageCurator to use new components
  • Add tests for each component
  • Ensure no behavioral changes (refactor only)

Files

  • Sources/TUI/Routing/ViewRouter.swift (new)
  • Sources/TUI/Routing/InputHandler.swift (new)
  • Sources/TUI/Routing/RenderEngine.swift (new)
  • Sources/TUI/PackageCurator.swift

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions