demarches-normaliennes/app/components/instructeurs/column_table_header_component.rb

45 lines
1.3 KiB
Ruby

# frozen_string_literal: true
class Instructeurs::ColumnTableHeaderComponent < ApplicationComponent
def initialize(procedure_presentation:)
@procedure_presentation = procedure_presentation
@columns = procedure_presentation.displayed_fields_for_headers
@sorted_column = procedure_presentation.sorted_column
end
private
def classname(column)
return 'status-col' if column.dossier_state?
return 'number-col' if column.type == :number
return 'sva-col' if column.column == 'sva_svr_decision_on'
end
def column_header(column)
id = column.id
order = opposite_order_for(column)
button_to(
label_and_arrow(column),
[:instructeur, @procedure_presentation],
params: { sorted_column: { id: id, order: order } },
class: 'fr-text--bold'
)
end
def opposite_order_for(column)
@sorted_column.column == column ? @sorted_column.opposite_order : 'asc'
end
def label_and_arrow(column)
return column.label if @sorted_column.column != column
@sorted_column.ascending? ? "#{column.label} ↑" : "#{column.label} ↓"
end
def aria_sort(column)
return {} if @sorted_column.column != column
@sorted_column.ascending? ? { "aria-sort": "ascending" } : { "aria-sort": "descending" }
end
end