move/rename faceting components within their instructeur ns
This commit is contained in:
parent
61051771a7
commit
31255b69cc
13 changed files with 30 additions and 6 deletions
56
app/components/instructeurs/column_filter_component.rb
Normal file
56
app/components/instructeurs/column_filter_component.rb
Normal file
|
@ -0,0 +1,56 @@
|
|||
class Instructeurs::ColumnFilterComponent < ApplicationComponent
|
||||
attr_reader :procedure, :procedure_presentation, :statut, :facet
|
||||
|
||||
def initialize(procedure:, procedure_presentation:, statut:, facet: nil)
|
||||
@procedure = procedure
|
||||
@procedure_presentation = procedure_presentation
|
||||
@statut = statut
|
||||
@facet = facet
|
||||
end
|
||||
|
||||
def facet_type = facet.present? ? facet.type : :text
|
||||
|
||||
def options_for_select_of_field
|
||||
if facet.scope.present?
|
||||
I18n.t(facet.scope).map(&:to_a).map(&:reverse)
|
||||
elsif facet.table == 'groupe_instructeur'
|
||||
current_instructeur.groupe_instructeurs.filter_map do
|
||||
if _1.procedure_id == procedure.id
|
||||
[_1.label, _1.id]
|
||||
end
|
||||
end
|
||||
else
|
||||
find_type_de_champ(facet.column).options_for_select
|
||||
end
|
||||
end
|
||||
|
||||
def filter_react_props
|
||||
{
|
||||
selected_key: facet.present? ? facet.id : '',
|
||||
items: filterable_fields_options,
|
||||
name: :field,
|
||||
id: 'search-filter',
|
||||
'aria-describedby': 'instructeur-filter-combo-label',
|
||||
form: 'filter-component',
|
||||
data: { no_autosubmit: 'input blur', no_autosubmit_on_empty: 'true', autosubmit_target: 'input' }
|
||||
}
|
||||
end
|
||||
|
||||
def filterable_fields_options
|
||||
procedure.facets.filter_map do |facet|
|
||||
next if facet.filterable == false
|
||||
|
||||
[facet.label, facet.id]
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_type_de_champ(column)
|
||||
TypeDeChamp
|
||||
.joins(:revision_types_de_champ)
|
||||
.where(revision_types_de_champ: { revision_id: procedure.revisions })
|
||||
.order(created_at: :desc)
|
||||
.find_by(stable_id: column)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
en:
|
||||
column: Column
|
||||
value: Value
|
||||
add_filter: Add filter
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
fr:
|
||||
column: Colonne
|
||||
value: Valeur
|
||||
add_filter: Ajouter le filtre
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
= form_tag add_filter_instructeur_procedure_path(procedure), method: :post, class: 'dropdown-form large', id: 'filter-component', data: { turbo: true, controller: 'autosubmit' } do
|
||||
.fr-select-group
|
||||
= label_tag :field, t('.column'), class: 'fr-label fr-m-0', id: 'instructeur-filter-combo-label', for: 'search-filter'
|
||||
%react-fragment
|
||||
= render ReactComponent.new "ComboBox/SingleComboBox", **filter_react_props
|
||||
|
||||
%input.hidden{ type: 'submit', formaction: update_filter_instructeur_procedure_path(procedure), data: { autosubmit_target: 'submitter' } }
|
||||
|
||||
= label_tag :value, t('.value'), for: 'value', class: 'fr-label'
|
||||
- if facet_type == :enum
|
||||
= select_tag :value, options_for_select(options_for_select_of_field), id: 'value', name: 'value', class: 'fr-select', data: { no_autosubmit: true }
|
||||
- else
|
||||
%input#value.fr-input{ type: facet_type, name: :value, maxlength: ProcedurePresentation::FILTERS_VALUE_MAX_LENGTH, disabled: facet.nil? ? true : false, data: { no_autosubmit: true } }
|
||||
|
||||
= hidden_field_tag :statut, statut
|
||||
= submit_tag t('.add_filter'), class: 'fr-btn fr-btn--secondary fr-mt-2w'
|
16
app/components/instructeurs/column_picker_component.rb
Normal file
16
app/components/instructeurs/column_picker_component.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
class Instructeurs::ColumnPickerComponent < ApplicationComponent
|
||||
attr_reader :procedure, :procedure_presentation
|
||||
|
||||
def initialize(procedure:, procedure_presentation:)
|
||||
@procedure = procedure
|
||||
@procedure_presentation = procedure_presentation
|
||||
@displayable_fields_for_select, @displayable_fields_selected = displayable_fields_for_select
|
||||
end
|
||||
|
||||
def displayable_fields_for_select
|
||||
[
|
||||
procedure.facets.reject(&:virtual).map { |facet| [facet.label, facet.id] },
|
||||
procedure_presentation.displayed_fields.map { Facet.new(**_1.deep_symbolize_keys).id }
|
||||
]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
en:
|
||||
save: 'Save'
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
fr:
|
||||
save: 'Enregistrer'
|
|
@ -0,0 +1,5 @@
|
|||
= form_tag update_displayed_fields_instructeur_procedure_path(@procedure), method: :patch, class: 'dropdown-form large columns-form' do
|
||||
%react-fragment
|
||||
= render ReactComponent.new "ComboBox/MultiComboBox", items: @displayable_fields_for_select, selected_keys: @displayable_fields_selected, name: 'values[]', 'aria-label': 'Colonne à afficher'
|
||||
|
||||
= submit_tag t('.save'), class: 'fr-btn fr-btn--secondary'
|
Loading…
Add table
Add a link
Reference in a new issue