gitlab-ce/app/components/rapid_diffs/app_component.rb

79 lines
1.8 KiB
Ruby

# frozen_string_literal: true
module RapidDiffs
class AppComponent < ViewComponent::Base
renders_one :diffs_list
attr_reader :presenter
delegate :diffs_stream_url, :reload_stream_url, :diffs_stats_endpoint, :diff_files_endpoint, :diff_file_endpoint,
:should_sort_metadata_files?, :diffs_slice, :lazy?, to: :presenter
delegate :diff_view, :current_user, to: :helpers
def initialize(presenter)
@presenter = presenter
end
def app_data
{
diffs_stream_url: diffs_stream_url,
reload_stream_url: reload_stream_url,
diffs_stats_endpoint: diffs_stats_endpoint,
diff_files_endpoint: diff_files_endpoint,
should_sort_metadata_files: should_sort_metadata_files?,
show_whitespace: show_whitespace?,
diff_view_type: diff_view,
diff_file_endpoint: diff_file_endpoint,
update_user_endpoint: update_user_endpoint,
lazy: lazy?
}
end
def update_user_endpoint
helpers.expose_path(helpers.api_v4_user_preferences_path)
end
def show_whitespace?
!helpers.hide_whitespace?
end
def parallel_view?
diff_view == :parallel
end
def empty_diff?
diffs_slice.nil? || diffs_slice.empty?
end
def browser_visible?
helpers.cookies[:file_browser_visible] != 'false'
end
def initial_browser_width
Integer(helpers.cookies[:mr_tree_list_width])
rescue StandardError
nil
end
def sidebar_style
styles = []
styles << "width: #{initial_browser_width}px;" if initial_browser_width
styles << "display: none;" unless browser_visible?
styles.join(' ')
end
def root_label
s_('RapidDiffs|Changes view')
end
def header_label
s_('RapidDiffs|View controls')
end
def content_label
s_('RapidDiffs|Diff files')
end
end
end