Class: SolidQueueTui::Views::QueuesView

Inherits:
Object
  • Object
show all
Includes:
FormattingHelpers, Confirmable, Filterable, Paginatable
Defined in:
lib/solid_queue_tui/views/queues_view.rb

Constant Summary

Constants included from Paginatable

Paginatable::LOAD_THRESHOLD

Constants included from Filterable

Filterable::FILTER_FIELDS

Instance Method Summary collapse

Methods included from FormattingHelpers

#format_duration, #format_number, #format_time, #humanize_duration, #time_ago, #time_until, #truncate

Methods included from Paginatable

#current_offset, #init_pagination, #items, #reset_pagination!, #total_count=

Methods included from Filterable

#clear_filter, #clear_filter_binding, #enter_filter_mode, #filter_bindings, #filter_mode?, #filter_title, #filters, #handle_filter_input, #init_filter, #render_filter_input

Methods included from Confirmable

#confirm_bindings, #confirm_mode?, #handle_confirm_input, #init_confirm, #render_confirm_popup

Constructor Details

#initialize(tui) ⇒ QueuesView

Returns a new instance of QueuesView.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/solid_queue_tui/views/queues_view.rb', line 11

def initialize(tui)
  @tui = tui
  @mode = :list
  @selected_queue = nil

  # List mode state
  @list_table_state = RatatuiRuby::TableState.new(nil)
  @list_table_state.select(0)
  @list_selected_row = 0
  @queues = []

  # Detail mode state (via Paginatable + Filterable)
  init_pagination
  init_confirm
  init_filter
end

Instance Method Details

#append(jobs:) ⇒ Object



44
45
46
# File 'lib/solid_queue_tui/views/queues_view.rb', line 44

def append(jobs:)
  append_items(jobs)
end

#bindingsObject



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/solid_queue_tui/views/queues_view.rb', line 82

def bindings
  if @mode == :list
    if confirm_mode?
      confirm_bindings
    else
      [
        { key: "j/k", action: "Navigate" },
        { key: "Enter", action: "View Jobs" },
        { key: "p", action: "Pause/Resume" },
        { key: "G/g", action: "Bottom/Top" }
      ]
    end
  else
    if confirm_mode?
      confirm_bindings
    elsif filter_mode?
      filter_bindings
    else
      [
        { key: "j/k", action: "Navigate" },
        { key: "Enter", action: "Detail" },
        { key: "/", action: "Filter" },
        clear_filter_binding,
        { key: "Esc", action: "Back" },
        { key: "G/g", action: "Bottom/Top" }
      ].compact
    end
  end
end


112
113
114
115
116
117
118
119
# File 'lib/solid_queue_tui/views/queues_view.rb', line 112

def breadcrumb
  if @mode == :list
    "queues"
  else
    base = "queues > #{@selected_queue&.name}"
    @filters.empty? ? base : "#{base}:filtered"
  end
end

#capturing_input?Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/solid_queue_tui/views/queues_view.rb', line 78

def capturing_input?
  detail_mode? || confirm_mode? || filter_mode?
end

#detail_mode?Boolean

Returns:

  • (Boolean)


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

def detail_mode? = @mode == :detail

#handle_input(event) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/solid_queue_tui/views/queues_view.rb', line 56

def handle_input(event)
  if @mode == :list
    handle_list_input(event)
  elsif confirm_mode?
    handle_confirm_input(event)
  elsif filter_mode?
    handle_filter_input(event)
  else
    handle_detail_input(event)
  end
end

#render(frame, area) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/solid_queue_tui/views/queues_view.rb', line 48

def render(frame, area)
  if @mode == :list
    render_list(frame, area)
  else
    render_detail(frame, area)
  end
end

#selected_itemObject



68
69
70
71
72
73
74
75
76
# File 'lib/solid_queue_tui/views/queues_view.rb', line 68

def selected_item
  if @mode == :list
    return nil if @queues.empty? || @list_selected_row >= @queues.size
    @queues[@list_selected_row]
  else
    return nil if items.empty? || @selected_row >= items.size
    items[@selected_row]
  end
end

#selected_queue_nameObject



30
31
32
# File 'lib/solid_queue_tui/views/queues_view.rb', line 30

def selected_queue_name
  @selected_queue&.name
end

#update(queues:) ⇒ Object



34
35
36
37
38
# File 'lib/solid_queue_tui/views/queues_view.rb', line 34

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

#update_detail(jobs:) ⇒ Object



40
41
42
# File 'lib/solid_queue_tui/views/queues_view.rb', line 40

def update_detail(jobs:)
  update_items(jobs)
end