other option for groupe instructeurs injection
This commit is contained in:
parent
08fb49d176
commit
1424fca469
5 changed files with 37 additions and 29 deletions
|
@ -17,6 +17,11 @@ module Instructeurs
|
|||
def refresh_column_filter
|
||||
# According to the html, the selected filters is the last one
|
||||
column = ColumnType.new.cast(params['filters'].last['id'])
|
||||
|
||||
if column.groupe_instructeur?
|
||||
column.options_for_select = instructeur_groupes(procedure_id: column.h_id[:procedure_id])
|
||||
end
|
||||
|
||||
component = Instructeurs::ColumnFilterValueComponent.new(column:)
|
||||
|
||||
render turbo_stream: turbo_stream.replace('value', component)
|
||||
|
@ -48,5 +53,10 @@ module Instructeurs
|
|||
.includes(:assign_to)
|
||||
.find_by!(id: params[:id], assign_to: { instructeur: current_instructeur })
|
||||
end
|
||||
|
||||
def instructeur_groupes(procedure_id:)
|
||||
current_instructeur.groupe_instructeurs
|
||||
.filter_map { [_1.label, _1.id] if _1.procedure_id == procedure_id }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -8,7 +8,8 @@ class Column
|
|||
|
||||
TYPE_DE_CHAMP_TABLE = 'type_de_champ'
|
||||
|
||||
attr_reader :table, :column, :label, :type, :filterable, :displayable, :options_for_select
|
||||
attr_reader :table, :column, :label, :type, :filterable, :displayable
|
||||
attr_accessor :options_for_select
|
||||
|
||||
def initialize(procedure_id:, table:, column:, label: nil, type: :text, filterable: true, displayable: true, options_for_select: [])
|
||||
@procedure_id = procedure_id
|
||||
|
|
|
@ -83,12 +83,7 @@ module ColumnsConcern
|
|||
|
||||
private
|
||||
|
||||
def groupe_instructeurs_id_column
|
||||
groupes = Current.user&.instructeur&.groupe_instructeurs || []
|
||||
options_for_select = groupes.filter_map { [_1.label, _1.id] if _1.procedure_id == id }
|
||||
|
||||
dossier_col(table: 'groupe_instructeur', column: 'id', type: :enum, options_for_select:)
|
||||
end
|
||||
def groupe_instructeurs_id_column = dossier_col(table: 'groupe_instructeur', column: 'id', type: :enum)
|
||||
|
||||
def followers_instructeurs_email_column = dossier_col(table: 'followers_instructeurs', column: 'email')
|
||||
|
||||
|
|
|
@ -83,4 +83,28 @@ describe Instructeurs::ProcedurePresentationController, type: :controller do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#refresh_column_filter' do
|
||||
subject { get :refresh_column_filter, params: { id: procedure_presentation.id, filters: [{ id: column.id }] } }
|
||||
|
||||
let(:procedure) { create(:procedure, :routee) }
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
let(:column) { procedure.find_column(label: "Groupe instructeur") }
|
||||
|
||||
let(:procedure_presentation) do
|
||||
procedure.groupe_instructeurs.each { _1.add(instructeur) }
|
||||
instructeur.reload.assign_to.first.procedure_presentation_or_default_and_errors.first
|
||||
end
|
||||
|
||||
before { sign_in(instructeur.user) }
|
||||
|
||||
it 'refreshes the column filter' do
|
||||
subject
|
||||
|
||||
expect(response).to be_successful
|
||||
procedure.groupe_instructeurs.each do |gi|
|
||||
expect(response.body).to include(gi.label)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -128,28 +128,6 @@ describe ColumnsConcern do
|
|||
|
||||
it { is_expected.to include(decision_on, decision_before_field) }
|
||||
end
|
||||
|
||||
context 'when the procedure has several groupe instructeur' do
|
||||
let(:procedure) { create(:procedure, :routee) }
|
||||
let(:groupe_1) { procedure.groupe_instructeurs.first }
|
||||
let(:groupe_2) { procedure.groupe_instructeurs.last }
|
||||
let(:groupe_instructeur_column) { procedure.find_column(label: "Groupe instructeur") }
|
||||
|
||||
context 'and no instructeur is available in current' do
|
||||
it { expect(groupe_instructeur_column.options_for_select).to eq([]) }
|
||||
end
|
||||
|
||||
context 'and instructeur is available in current' do
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
|
||||
before do
|
||||
procedure.groupe_instructeurs.each { _1.add(instructeur) }
|
||||
allow(Current).to receive(:user).and_return(instructeur.user)
|
||||
end
|
||||
|
||||
it { expect(groupe_instructeur_column.options_for_select).to match_array([groupe_1, groupe_2].map { [_1.label, _1.id] }) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'export' do
|
||||
|
|
Loading…
Reference in a new issue