Phase 7 of the monorepo maintainability plan: New files created: - model/jobs.go - Job type, JobStatus constants, list.Item interface - model/messages.go - tea.Msg types (JobsLoadedMsg, StatusMsg, TickMsg, etc.) - model/styles.go - NewJobListDelegate(), JobListTitleStyle(), SpinnerStyle() - model/keys.go - KeyMap struct, DefaultKeys() function Modified files: - model/state.go - reduced from 226 to ~130 lines - Removed: Job, JobStatus, KeyMap, Keys, inline styles - Kept: State struct, domain re-exports, ViewMode, DatasetInfo, InitialState() - controller/commands.go - use model. prefix for message types - controller/controller.go - use model. prefix for message types - controller/settings.go - use model.SettingsContentMsg Deleted files: - controller/keys.go (moved to model/keys.go since State references KeyMap) Result: - No file >150 lines in model/ package - Single concern per file: state, jobs, messages, styles, keys - All 41 test packages pass
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
// Package model provides TUI data structures and state management
|
|
package model
|
|
|
|
import "fmt"
|
|
|
|
// JobStatus represents the status of a job
|
|
type JobStatus string
|
|
|
|
// JobStatus constants represent different job states
|
|
const (
|
|
StatusPending JobStatus = "pending" // Job is pending
|
|
StatusQueued JobStatus = "queued" // Job is queued
|
|
StatusRunning JobStatus = "running" // Job is running
|
|
StatusFinished JobStatus = "finished" // Job is finished
|
|
StatusFailed JobStatus = "failed" // Job is failed
|
|
)
|
|
|
|
// Job represents a job in the TUI
|
|
type Job struct {
|
|
Name string
|
|
Status JobStatus
|
|
TaskID string
|
|
Priority int64
|
|
}
|
|
|
|
// Title returns the job title for display
|
|
func (j Job) Title() string { return j.Name }
|
|
|
|
// Description returns a formatted description with status icon
|
|
func (j Job) Description() string {
|
|
icon := map[JobStatus]string{
|
|
StatusPending: "⏸",
|
|
StatusQueued: "⏳",
|
|
StatusRunning: "▶",
|
|
StatusFinished: "✓",
|
|
StatusFailed: "✗",
|
|
}[j.Status]
|
|
pri := ""
|
|
if j.Priority > 0 {
|
|
pri = fmt.Sprintf(" [P%d]", j.Priority)
|
|
}
|
|
return fmt.Sprintf("%s %s%s", icon, j.Status, pri)
|
|
}
|
|
|
|
// FilterValue returns the value used for filtering
|
|
func (j Job) FilterValue() string { return j.Name }
|