move/rename faceting components within their instructeur ns

This commit is contained in:
mfo 2024-07-22 09:22:05 +02:00
parent 61051771a7
commit 31255b69cc
No known key found for this signature in database
GPG key ID: 7CE3E1F5B794A8EC
13 changed files with 30 additions and 6 deletions

View 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

View file

@ -0,0 +1,5 @@
en:
column: Column
value: Value
add_filter: Add filter

View file

@ -0,0 +1,5 @@
fr:
column: Colonne
value: Valeur
add_filter: Ajouter le filtre

View file

@ -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'

View 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

View file

@ -0,0 +1,3 @@
---
en:
save: 'Save'

View file

@ -0,0 +1,3 @@
---
fr:
save: 'Enregistrer'

View file

@ -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'