40 lines
873 B
Ruby
40 lines
873 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Widgets
|
|
class Sidebar < Container
|
|
def trigger(event)
|
|
focus&.trigger event
|
|
end
|
|
|
|
def node
|
|
elem = render
|
|
React::Curses::Nodes.klass_for(elem).new nil, elem
|
|
end
|
|
|
|
def render
|
|
create_element :window, x: props[:x], y: props[:y], width: props[:width], height: props[:height] do
|
|
create_element :wrapper do
|
|
create_element Logo, props[:logo]
|
|
render_menu
|
|
end
|
|
end
|
|
end
|
|
|
|
def render_menu
|
|
create_element Menu, props[:menu].merge(
|
|
on_up: props[:on_menu_up],
|
|
on_down: props[:on_menu_down],
|
|
|
|
active_friend_index: props[:active_friend_index],
|
|
|
|
friends: props[:friends],
|
|
).freeze
|
|
end
|
|
|
|
def focus
|
|
case props[:focus]
|
|
when :menu then node.children[0].children[1].instance
|
|
end
|
|
end
|
|
end
|
|
end
|