Class: SolidQueueTui::Views::QueuesView

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_queue_tui/views/queues_view.rb

Instance Method Summary collapse

Constructor Details

#initialize(tui) ⇒ QueuesView

Returns a new instance of QueuesView.



6
7
8
9
10
11
12
# File 'lib/solid_queue_tui/views/queues_view.rb', line 6

def initialize(tui)
  @tui = tui
  @table_state = RatatuiRuby::TableState.new(nil)
  @table_state.select(0)
  @selected_row = 0
  @queues = []
end

Instance Method Details

#bindingsObject



67
68
69
70
71
72
# File 'lib/solid_queue_tui/views/queues_view.rb', line 67

def bindings
  [
    { key: "j/k", action: "Navigate" },
    { key: "G/g", action: "Bottom/Top" }
  ]
end


74
# File 'lib/solid_queue_tui/views/queues_view.rb', line 74

def breadcrumb = "queues"

#handle_input(event) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/solid_queue_tui/views/queues_view.rb', line 47

def handle_input(event)
  case event
  in { type: :key, code: "j" } | { type: :key, code: "up" }
    move_selection(-1)
  in { type: :key, code: "k" } | { type: :key, code: "down" }
    move_selection(1)
  in { type: :key, code: "g" }
    jump_to_top
  in { type: :key, code: "G" }
    jump_to_bottom
  else
    nil
  end
end

#render(frame, area) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/solid_queue_tui/views/queues_view.rb', line 20

def render(frame, area)
  columns = [
    { key: :name,   label: "QUEUE",   width: :fill },
    { key: :size,   label: "SIZE",    width: 10 },
    { key: :status, label: "STATUS",  width: 10, color_by: :status }
  ]

  rows = @queues.map do |q|
    {
      name: q.name,
      size: q.size,
      status: q.paused ? "paused" : "active"
    }
  end

  table = Components::JobTable.new(
    @tui,
    title: "Queues",
    columns: columns,
    rows: rows,
    selected_row: @selected_row,
    empty_message: "No queues found"
  )

  table.render(frame, area, @table_state)
end

#selected_itemObject



62
63
64
65
# File 'lib/solid_queue_tui/views/queues_view.rb', line 62

def selected_item
  return nil if @queues.empty? || @selected_row >= @queues.size
  @queues[@selected_row]
end

#update(queues:) ⇒ Object



14
15
16
17
18
# File 'lib/solid_queue_tui/views/queues_view.rb', line 14

def update(queues:)
  @queues = queues
  @selected_row = @selected_row.clamp(0, [@queues.size - 1, 0].max)
  @table_state.select(@selected_row)
end