refactor(js): use autosubmit controller in filter_component

This commit is contained in:
Paul Chavard 2023-01-11 21:47:22 +01:00
parent 5d7284b8da
commit 289d48f697
6 changed files with 19 additions and 31 deletions

View file

@ -1,12 +1,13 @@
= form_tag add_filter_instructeur_procedure_url(procedure), method: :post, class: 'dropdown-form large', id: 'filter-component', data: { controller: 'dossier-filter' } do
= form_tag add_filter_instructeur_procedure_path(procedure), method: :post, class: 'dropdown-form large', id: 'filter-component', data: { turbo: true, controller: 'autosubmit' } do
= label_tag :field, t('.column')
= select_tag :field, options_for_select(filterable_fields_for_select, field_id), include_blank: field_id.nil?, data: {action: "dossier-filter#onChange"}
= select_tag :field, options_for_select(filterable_fields_for_select, field_id), include_blank: field_id.nil?
%input.hidden{ type: 'submit', formaction: update_filter_instructeur_procedure_path(procedure), data: { autosubmit_target: 'submitter' } }
%br
= label_tag :value, t('.value'), for: 'value'
- if field_type == :enum
= select_tag :value, options_for_select(options_for_select_of_field), id: 'value', name: 'value'
= select_tag :value, options_for_select(options_for_select_of_field), id: 'value', name: 'value', data: { no_autosubmit: true }
- else
%input#value{ type: field_type, name: :value, maxlength: ProcedurePresentation::FILTERS_VALUE_MAX_LENGTH, disabled: field_id.nil? ? true : false }
%input#value{ type: field_type, name: :value, maxlength: ProcedurePresentation::FILTERS_VALUE_MAX_LENGTH, disabled: field_id.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

@ -131,19 +131,16 @@ module Instructeurs
end
def add_filter
respond_to do |format|
format.html do
procedure_presentation.add_filter(statut, params[:field], params[:value])
procedure_presentation.add_filter(statut, params[:field], params[:value])
redirect_back(fallback_location: instructeur_procedure_url(procedure))
end
format.turbo_stream do
@statut = statut
@procedure = procedure
@procedure_presentation = procedure_presentation
@field = params[:field]
end
end
redirect_back(fallback_location: instructeur_procedure_url(procedure))
end
def update_filter
@statut = statut
@procedure = procedure
@procedure_presentation = procedure_presentation
@field = params[:field]
end
def remove_filter

View file

@ -1,13 +0,0 @@
import { httpRequest } from '@utils';
import { ApplicationController } from './application_controller';
export class DossierFilterController extends ApplicationController {
onChange() {
const element = this.element as HTMLFormElement;
httpRequest(element.action, {
method: element.getAttribute('method') ?? '',
body: new FormData(element)
}).turbo();
}
}

View file

@ -1,2 +1,2 @@
= turbo_stream.replace 'filter-component' do
= turbo_stream.morph 'filter-component' do
= render Dossiers::FilterComponent.new(procedure: @procedure, procedure_presentation: @procedure_presentation, statut: @statut, field_id: @field)

View file

@ -394,7 +394,8 @@ Rails.application.routes.draw do
patch 'update_displayed_fields'
get 'update_sort/:table/:column' => 'procedures#update_sort', as: 'update_sort'
post 'add_filter'
get 'remove_filter' => 'procedures#remove_filter', as: 'remove_filter'
post 'update_filter'
get 'remove_filter'
get 'download_export'
post 'download_export'
get 'stats'

View file

@ -84,6 +84,7 @@ describe "procedure filters" do
find("input#value[type=date]", visible: true)
fill_in "Valeur", with: "10/10/2010"
click_button "Ajouter le filtre"
expect(page).to have_no_css("select#field", visible: true)
# use enum filter
click_on 'Sélectionner un filtre'
@ -134,6 +135,7 @@ describe "procedure filters" do
select column_name, from: "Colonne"
fill_in "Valeur", with: filter_value
click_button "Ajouter le filtre"
expect(page).to have_no_css("select#field", visible: true)
end
def add_column(column_name)