Class: SolidQueueTui::Views::ScheduledView

Inherits:
Object
  • Object
show all
Includes:
Filterable
Defined in:
lib/solid_queue_tui/views/scheduled_view.rb

Constant Summary collapse

LOAD_THRESHOLD =
10

Constants included from Filterable

Filterable::FILTER_FIELDS

Instance Method Summary collapse

Methods included from Filterable

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

Constructor Details

#initialize(tui) ⇒ ScheduledView

Returns a new instance of ScheduledView.



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 11

def initialize(tui)
  @tui = tui
  @table_state = RatatuiRuby::TableState.new(nil)
  @table_state.select(0)
  @selected_row = 0
  @jobs = []
  @total_count = nil
  @all_loaded = false
  @confirm_action = nil
  init_filter
end

Instance Method Details

#append(jobs:) ⇒ Object



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

def append(jobs:)
  @jobs.concat(jobs)
  @all_loaded = jobs.size < SolidQueueTui.page_size
end

#bindingsObject



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 98

def bindings
  if @confirm_action
    [
      { key: "y", action: "Confirm" },
      { key: "n/Esc", action: "Cancel" }
    ]
  elsif filter_mode?
    filter_bindings
  else
    [
      { key: "j/k", action: "Navigate" },
      { key: "Enter", action: "Detail" },
      { key: "/", action: "Filter" },
      { key: "N", action: "Run Now" },
      { key: "D", action: "Discard" },
      { key: "G/g", action: "Bottom/Top" }
    ]
  end
end


118
119
120
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 118

def breadcrumb
  @filters.empty? ? "scheduled" : "scheduled:filtered"
end

#capturing_input?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 94

def capturing_input?
  filter_mode? || @confirm_action
end

#current_offsetObject



39
40
41
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 39

def current_offset
  @jobs.size
end

#handle_input(event) ⇒ Object



79
80
81
82
83
84
85
86
87
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 79

def handle_input(event)
  if @confirm_action
    handle_confirm_input(event)
  elsif filter_mode?
    handle_filter_input(event)
  else
    handle_normal_input(event)
  end
end

#render(frame, area) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 51

def render(frame, area)
  if @confirm_action
    confirm_area, content_area = @tui.layout_split(
      area,
      direction: :vertical,
      constraints: [
        @tui.constraint_length(3),
        @tui.constraint_fill(1)
      ]
    )
    render_confirm(frame, confirm_area)
    render_table(frame, content_area)
  elsif filter_mode?
    filter_area, content_area = @tui.layout_split(
      area,
      direction: :vertical,
      constraints: [
        @tui.constraint_length(3),
        @tui.constraint_fill(1)
      ]
    )
    render_filter_input(frame, filter_area)
    render_table(frame, content_area)
  else
    render_table(frame, area)
  end
end

#reset_pagination!Object



43
44
45
46
47
48
49
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 43

def reset_pagination!
  @jobs = []
  @total_count = nil
  @all_loaded = false
  @selected_row = 0
  @table_state.select(0)
end

#selected_itemObject



89
90
91
92
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 89

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

#total_count=(count) ⇒ Object



35
36
37
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 35

def total_count=(count)
  @total_count = count
end

#update(jobs:) ⇒ Object



23
24
25
26
27
28
# File 'lib/solid_queue_tui/views/scheduled_view.rb', line 23

def update(jobs:)
  @jobs = jobs
  @all_loaded = jobs.size < SolidQueueTui.page_size
  @selected_row = @selected_row.clamp(0, [@jobs.size - 1, 0].max)
  @table_state.select(@selected_row)
end