Merge pull request #9774 from colinux/perf-user-dossiers
ETQ usager l'affichage de la liste de mes dossiers va beaucoup plus vite
This commit is contained in:
commit
6674884c25
4 changed files with 116 additions and 57 deletions
|
@ -47,7 +47,7 @@ module Users
|
|||
deleted_dossiers = nil
|
||||
end
|
||||
|
||||
@dossiers_visibles = ordered_dossiers.visible_by_user
|
||||
@dossiers_visibles = ordered_dossiers.visible_by_user.preload(:etablissement, :individual, :invites)
|
||||
|
||||
@user_dossiers = current_user.dossiers.state_not_termine.merge(@dossiers_visibles)
|
||||
@dossiers_traites = current_user.dossiers.state_termine.merge(@dossiers_visibles)
|
||||
|
@ -408,21 +408,20 @@ module Users
|
|||
# else en-cours
|
||||
def statut(mes_dossiers, dossiers_traites, dossiers_invites, dossiers_supprimes_recemment, dossiers_supprimes_definitivement, dossier_transferes, dossiers_close_to_expiration, params_statut)
|
||||
tabs = {
|
||||
'en-cours' => mes_dossiers.present?,
|
||||
'traites' => dossiers_traites.present?,
|
||||
'dossiers-invites' => dossiers_invites.present?,
|
||||
'dossiers-supprimes-recemment' => dossiers_supprimes_recemment.present?,
|
||||
'dossiers-supprimes-definitivement' => dossiers_supprimes_definitivement.present?,
|
||||
'dossiers-transferes' => dossier_transferes.present?,
|
||||
'dossiers-expirant' => dossiers_close_to_expiration.present?
|
||||
'en-cours' => mes_dossiers,
|
||||
'traites' => dossiers_traites,
|
||||
'dossiers-invites' => dossiers_invites,
|
||||
'dossiers-supprimes-recemment' => dossiers_supprimes_recemment,
|
||||
'dossiers-supprimes-definitivement' => dossiers_supprimes_definitivement,
|
||||
'dossiers-transferes' => dossier_transferes,
|
||||
'dossiers-expirant' => dossiers_close_to_expiration
|
||||
}
|
||||
if tabs[params_statut]
|
||||
|
||||
if tabs[params_statut]&.present?
|
||||
params_statut
|
||||
else
|
||||
tabs
|
||||
.filter { |_tab, filled| filled }
|
||||
.map { |tab, _| tab }
|
||||
.first || 'en-cours'
|
||||
tab = tabs.find { |_tab, scope| scope.present? }
|
||||
tab&.first || 'en-cours'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -25,49 +25,50 @@
|
|||
= render Dossiers::UserProcedureFilterComponent.new(procedures_for_select: @procedures_for_select)
|
||||
|
||||
- if @search_terms.blank?
|
||||
%nav.fr-tabs{ role: 'navigation', 'aria-label': t('views.users.dossiers.secondary_menu') }
|
||||
%ul.fr-tabs__list{ role: 'tablist' }
|
||||
- if @user_dossiers.present?
|
||||
= tab_item(t('pluralize.en_cours', count: @user_dossiers.count),
|
||||
dossiers_path(statut: 'en-cours', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'en-cours',
|
||||
badge: number_with_html_delimiter(@user_dossiers.count))
|
||||
- if @dossiers_traites.present?
|
||||
// TODO: when renaming this tab in "Terminé", update notify_near_deletion_to_user email wording accordingly.
|
||||
= tab_item(t('pluralize.traites', count: @dossiers_traites.count),
|
||||
dossiers_path(statut: 'traites', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'traites',
|
||||
badge: number_with_html_delimiter(@dossiers_traites.count))
|
||||
- cache([current_user.id, @statut, current_user.dossiers, current_user.dossiers_invites], expires_in: 1.hour) do
|
||||
%nav.fr-tabs{ role: 'navigation', 'aria-label': t('views.users.dossiers.secondary_menu') }
|
||||
%ul.fr-tabs__list{ role: 'tablist' }
|
||||
- if @user_dossiers.present?
|
||||
= tab_item(t('pluralize.en_cours', count: @user_dossiers.count),
|
||||
dossiers_path(statut: 'en-cours', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'en-cours',
|
||||
badge: number_with_html_delimiter(@user_dossiers.count))
|
||||
- if @dossiers_traites.present?
|
||||
// TODO: when renaming this tab in "Terminé", update notify_near_deletion_to_user email wording accordingly.
|
||||
= tab_item(t('pluralize.traites', count: @dossiers_traites.count),
|
||||
dossiers_path(statut: 'traites', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'traites',
|
||||
badge: number_with_html_delimiter(@dossiers_traites.count))
|
||||
|
||||
- if @dossiers_invites.present?
|
||||
= tab_item(t('pluralize.dossiers_invites', count: @dossiers_invites.count),
|
||||
dossiers_path(statut: 'dossiers-invites', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-invites',
|
||||
badge: number_with_html_delimiter(@dossiers_invites.count))
|
||||
- if @dossiers_invites.present?
|
||||
= tab_item(t('pluralize.dossiers_invites', count: @dossiers_invites.count),
|
||||
dossiers_path(statut: 'dossiers-invites', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-invites',
|
||||
badge: number_with_html_delimiter(@dossiers_invites.count))
|
||||
|
||||
- if @dossiers_close_to_expiration.count > 0
|
||||
= tab_item(t('pluralize.dossiers_close_to_expiration', count: @dossiers_close_to_expiration.count),
|
||||
dossiers_path(statut: 'dossiers-expirant', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-expirant',
|
||||
badge: number_with_html_delimiter(@dossiers_close_to_expiration.count))
|
||||
- if @dossiers_close_to_expiration.count > 0
|
||||
= tab_item(t('pluralize.dossiers_close_to_expiration', count: @dossiers_close_to_expiration.count),
|
||||
dossiers_path(statut: 'dossiers-expirant', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-expirant',
|
||||
badge: number_with_html_delimiter(@dossiers_close_to_expiration.count))
|
||||
|
||||
- if @dossiers_supprimes_recemment.present?
|
||||
= tab_item(t('pluralize.dossiers_supprimes_recemment', count: @dossiers_supprimes_recemment.count),
|
||||
dossiers_path(statut: 'dossiers-supprimes-recemment', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-supprimes-recemment',
|
||||
badge: number_with_html_delimiter(@dossiers_supprimes_recemment.count))
|
||||
- if @dossiers_supprimes_recemment.present?
|
||||
= tab_item(t('pluralize.dossiers_supprimes_recemment', count: @dossiers_supprimes_recemment.count),
|
||||
dossiers_path(statut: 'dossiers-supprimes-recemment', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-supprimes-recemment',
|
||||
badge: number_with_html_delimiter(@dossiers_supprimes_recemment.count))
|
||||
|
||||
- if @dossiers_supprimes_definitivement.present?
|
||||
= tab_item(t('pluralize.dossiers_supprimes_definitivement', count: @dossiers_supprimes_definitivement.count),
|
||||
dossiers_path(statut: 'dossiers-supprimes-definitivement', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-supprimes-definitivement',
|
||||
badge: number_with_html_delimiter(@dossiers_supprimes_definitivement.count))
|
||||
- if @dossiers_supprimes_definitivement.present?
|
||||
= tab_item(t('pluralize.dossiers_supprimes_definitivement', count: @dossiers_supprimes_definitivement.count),
|
||||
dossiers_path(statut: 'dossiers-supprimes-definitivement', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-supprimes-definitivement',
|
||||
badge: number_with_html_delimiter(@dossiers_supprimes_definitivement.count))
|
||||
|
||||
- if @dossier_transferes.present?
|
||||
= tab_item(t('pluralize.dossiers_transferes', count: @dossier_transferes.count),
|
||||
dossiers_path(statut: 'dossiers-transferes', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-transferes',
|
||||
badge: number_with_html_delimiter(@dossier_transferes.count))
|
||||
- if @dossier_transferes.present?
|
||||
= tab_item(t('pluralize.dossiers_transferes', count: @dossier_transferes.count),
|
||||
dossiers_path(statut: 'dossiers-transferes', procedure_id: params[:procedure_id]),
|
||||
active: @statut == 'dossiers-transferes',
|
||||
badge: number_with_html_delimiter(@dossier_transferes.count))
|
||||
|
||||
.fr-container
|
||||
.fr-grid-row.fr-grid-row--center
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
RSpec.configure do |config|
|
||||
config.around(:all, :caching) do |example|
|
||||
config.around(:example, :caching) do |example|
|
||||
caching_was = ActionController::Base.perform_caching
|
||||
cache_store_was = Rails.cache
|
||||
|
||||
|
|
|
@ -3,15 +3,15 @@ describe 'users/dossiers/index', type: :view do
|
|||
let(:dossier_brouillon) { create(:dossier, state: Dossier.states.fetch(:brouillon), user: user) }
|
||||
let(:dossier_en_construction) { create(:dossier, state: Dossier.states.fetch(:en_construction), user: user) }
|
||||
let(:dossier_termine) { create(:dossier, state: Dossier.states.fetch(:accepte), user: user) }
|
||||
let(:user_dossiers) { [dossier_brouillon, dossier_en_construction, dossier_termine] }
|
||||
let(:dossiers_invites) { [] }
|
||||
let(:user_dossiers) { Kaminari.paginate_array([dossier_brouillon, dossier_en_construction, dossier_termine]).page(1) }
|
||||
let(:statut) { 'en-cours' }
|
||||
let(:filter) { DossiersFilter.new(user, ActionController::Parameters.new(random_param: 'random_param')) }
|
||||
|
||||
before do
|
||||
before do |config|
|
||||
allow(view).to receive(:new_demarche_url).and_return('#')
|
||||
allow(controller).to receive(:current_user) { user }
|
||||
assign(:user_dossiers, Kaminari.paginate_array(user_dossiers).page(1))
|
||||
assign(:user_dossiers, user_dossiers)
|
||||
assign(:dossiers_invites, Kaminari.paginate_array(dossiers_invites).page(1))
|
||||
assign(:dossiers_supprimes_recemment, Kaminari.paginate_array(user_dossiers).page(1))
|
||||
assign(:dossiers_supprimes_definitivement, Kaminari.paginate_array(user_dossiers).page(1))
|
||||
|
@ -22,7 +22,8 @@ describe 'users/dossiers/index', type: :view do
|
|||
assign(:statut, statut)
|
||||
assign(:filter, filter)
|
||||
assign(:all_dossiers_uniq_procedures_count, 0)
|
||||
render
|
||||
|
||||
render if !config.metadata[:caching]
|
||||
end
|
||||
|
||||
it 'affiche les dossiers' do
|
||||
|
@ -56,7 +57,7 @@ describe 'users/dossiers/index', type: :view do
|
|||
end
|
||||
|
||||
context 'quand il n’y a aucun dossier' do
|
||||
let(:user_dossiers) { [] }
|
||||
let(:user_dossiers) { [] }
|
||||
let(:dossiers_invites) { [] }
|
||||
|
||||
it 'n’affiche pas la table' do
|
||||
|
@ -101,4 +102,62 @@ describe 'users/dossiers/index', type: :view do
|
|||
expect(rendered).to have_text("Supprimer le dossier")
|
||||
end
|
||||
end
|
||||
|
||||
context 'caching', caching: true do
|
||||
it "works" do
|
||||
expect(user_dossiers).to receive(:present?).once
|
||||
2.times { render; user.reload }
|
||||
end
|
||||
|
||||
it "cache key depends on statut" do
|
||||
expect(user_dossiers).to receive(:present?).twice
|
||||
render
|
||||
|
||||
assign(:statut, "termines")
|
||||
user.reload
|
||||
|
||||
render
|
||||
end
|
||||
|
||||
it "cache key depends on dossier updated_at" do
|
||||
expect(user_dossiers).to receive(:present?).twice
|
||||
render
|
||||
|
||||
dossier_termine.touch
|
||||
user.reload
|
||||
|
||||
render
|
||||
end
|
||||
|
||||
it "cache key depends on dossiers list" do
|
||||
render
|
||||
expect(rendered).to have_text(/3\s+en cours/)
|
||||
|
||||
assign(:user_dossiers, Kaminari.paginate_array(user_dossiers.concat([create(:dossier, :en_construction, user: user)])).page(1))
|
||||
user.reload
|
||||
|
||||
render
|
||||
expect(rendered).to have_text(/4\s+en cours/)
|
||||
end
|
||||
|
||||
it "cache key dpeends on dossier invites" do
|
||||
expect(user_dossiers).to receive(:present?).twice
|
||||
render
|
||||
|
||||
create(:invite, user:)
|
||||
user.reload
|
||||
|
||||
render
|
||||
end
|
||||
|
||||
it "cache key depends on dossier deletion" do
|
||||
expect(user_dossiers).to receive(:present?).twice
|
||||
render
|
||||
|
||||
dossier_termine.expired_keep_track_and_destroy!
|
||||
user.reload
|
||||
|
||||
render
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue