Skip to content

Commit 3f254cd

Browse files
mllocsmicrostudi
authored andcommitted
Improve accountability results visualization (decidim#14067)
1 parent fceb077 commit 3f254cd

21 files changed

Lines changed: 190 additions & 90 deletions

File tree

decidim-accountability/app/controllers/decidim/accountability/results_controller.rb

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class ResultsController < Decidim::Accountability::ApplicationController
88
helper Decidim::TraceabilityHelper
99
helper Decidim::Accountability::BreadcrumbHelper
1010

11-
helper_method :results, :result, :first_class_taxonomies, :count_calculator
11+
helper_method :results, :result, :count_calculator, :selected_root_taxonomy, :selected_taxonomy_children, :selected_taxonomy_grandchildren?
1212

1313
before_action :set_controller_breadcrumb
1414

@@ -46,8 +46,24 @@ def default_filter_params
4646
}
4747
end
4848

49-
def first_class_taxonomies
50-
@first_class_taxonomies ||= current_organization.taxonomies.where(parent_id: current_component.available_root_taxonomies, id: current_component.available_taxonomy_ids)
49+
def selected_taxonomy_grandchildren?
50+
@selected_taxonomy_grandchildren ||= selected_root_taxonomy.all_children.count > selected_taxonomy_children.count
51+
end
52+
53+
def selected_taxonomy_children
54+
return [] if selected_root_taxonomy.blank?
55+
56+
@selected_taxonomy_children ||= current_organization.taxonomies.where(parent_id: selected_root_taxonomy.id, id: current_component.available_taxonomy_ids)
57+
end
58+
59+
def selected_root_taxonomy
60+
@selected_root_taxonomy ||= if params[:root_taxonomy_id] == "list"
61+
nil
62+
elsif params[:root_taxonomy_id].blank?
63+
current_component.available_root_taxonomies.find_by(id: component_settings.default_taxonomy)
64+
else
65+
current_component.available_root_taxonomies.find_by(id: params[:root_taxonomy_id])
66+
end
5167
end
5268

5369
def count_calculator(taxonomy_id)

decidim-accountability/app/packs/stylesheets/accountability.scss

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,16 @@
9797
}
9898

9999
&__grid {
100-
@apply grid md:grid-cols-3 items-start gap-x-10 gap-y-8 md:gap-y-16;
100+
@apply grid md:grid-cols-3 items-start gap-x-6 gap-y-6;
101101

102-
& > :nth-child(even) {
103-
@apply grid md:col-span-2;
102+
&--one-level {
103+
@apply grid;
104+
}
105+
106+
&--two-levels {
107+
& > :nth-child(even) {
108+
@apply grid md:col-span-2;
109+
}
104110
}
105111

106112
/* display the titles only for the first two rows in desktop */
@@ -171,4 +177,28 @@
171177
&__filters {
172178
@apply w-full space-y-10;
173179
}
180+
181+
&__taxonomies {
182+
@apply w-full;
183+
184+
ul {
185+
@apply flex flex-wrap gap-4 mt-4;
186+
187+
li {
188+
@apply bg-white py-1 px-4 rounded;
189+
190+
a {
191+
@apply text-secondary font-semibold text-sm;
192+
}
193+
194+
&.active {
195+
@apply bg-secondary text-white;
196+
197+
a {
198+
@apply text-white;
199+
}
200+
}
201+
}
202+
}
203+
}
174204
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<div class="accountability__filters">
2+
<%= render partial: "search" %>
3+
<%= render partial: "root_taxonomies_selector" %>
4+
</div>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<h1 class="title-decorator"><%= component_name %></h1>
2+
3+
<% if component_settings.display_progress_enabled? %>
4+
<%= cell(
5+
"decidim/accountability/status",
6+
nil,
7+
title: t("decidim.accountability.results.home_header.global_status"),
8+
progress: progress_calculator(nil).presence,
9+
extra_classes: "accountability__status__home"
10+
) %>
11+
<% end %>
12+
<%= render partial: "filters" %>
Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,9 @@
1-
<div class="accountability__grid">
2-
<% first_class_taxonomies.each do |taxonomy| %>
3-
<% subelements = cell(
4-
"decidim/accountability/status",
5-
taxonomy,
6-
extra_classes: "accountability__status__background",
7-
url: results_path(filter: { taxonomies_part_of_contains: taxonomy }),
8-
render_blank: true
9-
) %>
1+
<h3 class="mb-8 font-semibold text-xl">
2+
<%= translated_attribute(selected_root_taxonomy.name) %>
3+
</h3>
104

11-
<div>
12-
<%= subelements.call %>
13-
</div>
14-
15-
<div>
16-
<% if subelements.has_results? %>
17-
<div class="accountability__subgrid">
18-
<% taxonomy.children.where(id: current_component.available_taxonomy_ids).each do |sub_taxonomy| %>
19-
<%= cell(
20-
"decidim/accountability/status",
21-
sub_taxonomy,
22-
extra_classes: "accountability__status__border",
23-
url: results_path(filter: { taxonomies_part_of_contains: sub_taxonomy })
24-
) %>
25-
<% end %>
26-
</div>
27-
<% else %>
28-
<%= cell("decidim/announcement", t("no_results", scope: "decidim.accountability.results")) %>
29-
<% end %>
30-
</div>
31-
<% end %>
32-
</div>
5+
<% if selected_taxonomy_grandchildren? %>
6+
<%= render "two_levels_taxonomies" %>
7+
<% else %>
8+
<%= render "one_level_taxonomies" %>
9+
<% end %>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<div class="accountability__grid accountability__grid--one-level">
2+
<% selected_taxonomy_children.each do |taxonomy| %>
3+
<% subelements = cell(
4+
"decidim/accountability/status",
5+
taxonomy,
6+
extra_classes: "accountability__status__background",
7+
url: results_path(filter: { taxonomies_part_of_contains: taxonomy }),
8+
render_blank: true
9+
) %>
10+
11+
<% if subelements.has_results? %>
12+
<div>
13+
<%= subelements.call %>
14+
</div>
15+
<% end %>
16+
<% end %>
17+
</div>

decidim-accountability/app/views/decidim/accountability/results/_projects_aside.html.erb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,4 @@
3737
<% end %>
3838
</div>
3939

40-
<div class="accountability__filters">
41-
<%= render partial: "search" %>
42-
</div>
40+
<%= render partial: "filters" %>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<div class="accountability__taxonomies">
2+
<h2 class="accountability__taxonomies__title">
3+
<%= t("decidim.accountability.results.root_taxonomies.title") %>
4+
</h2>
5+
<ul>
6+
<% current_component.available_root_taxonomies.each do |taxonomy| %>
7+
<% is_selected = selected_root_taxonomy&.id == taxonomy.id %>
8+
<li class="<%= "active" if is_selected && action_name == "home" %>">
9+
<% if is_selected %>
10+
<%= link_to translated_attribute(taxonomy.name), home_results_path(root_taxonomy_id: "list") %>
11+
<% else %>
12+
<%= link_to translated_attribute(taxonomy.name), home_results_path(root_taxonomy_id: taxonomy.id) %>
13+
<% end %>
14+
</li>
15+
<% end %>
16+
</ul>
17+
</div>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<div class="accountability__grid accountability__grid--two-levels">
2+
<% selected_taxonomy_children.each do |taxonomy| %>
3+
<% subelements = cell(
4+
"decidim/accountability/status",
5+
taxonomy,
6+
extra_classes: "accountability__status__background",
7+
url: results_path(filter: { taxonomies_part_of_contains: taxonomy }),
8+
render_blank: true
9+
) %>
10+
11+
<% if subelements.has_results? %>
12+
<div>
13+
<%= subelements.call %>
14+
</div>
15+
16+
<div>
17+
<div class="accountability__subgrid">
18+
<% taxonomy.children.where(id: current_component.available_taxonomy_ids).each do |sub_taxonomy| %>
19+
<%= cell(
20+
"decidim/accountability/status",
21+
sub_taxonomy,
22+
extra_classes: "accountability__status__border",
23+
url: results_path(filter: { taxonomies_part_of_contains: sub_taxonomy })
24+
) %>
25+
<% end %>
26+
</div>
27+
</div>
28+
<% end %>
29+
<% end %>
30+
</div>

decidim-accountability/app/views/decidim/accountability/results/home.html.erb

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,10 @@
88
<%= append_stylesheet_pack_tag "decidim_accountability" %>
99

1010
<% content_for :aside do %>
11-
<h1 class="title-decorator"><%= component_name %></h1>
12-
13-
<% if component_settings.display_progress_enabled? %>
14-
<%= cell(
15-
"decidim/accountability/status",
16-
nil,
17-
title: t("decidim.accountability.results.home_header.global_status"),
18-
progress: progress_calculator(nil).presence,
19-
extra_classes: "accountability__status__home"
20-
) %>
21-
<% end %>
22-
<div class="accountability__filters">
23-
<%= render partial: "search" %>
24-
</div>
11+
<%= render partial: "home_aside" %>
2512
<% end %>
2613

2714
<%= render layout: "layouts/decidim/shared/layout_two_col" do %>
28-
2915
<% if Decidim::Map.available?(:geocoding, :dynamic) && component_settings.geocoding_enabled? %>
3016
<div class="accountability__map">
3117
<%= cell "decidim/map", @all_geocoded_results, metadata_card: "decidim/accountability/result_metadata" %>
@@ -36,14 +22,14 @@
3622
<div class="editor-content"><%= decidim_sanitize_admin translated_attribute(component_settings.intro) %></div>
3723
</section>
3824

39-
<section class="layout-main__section">
40-
<% if first_class_taxonomies.empty? %>
41-
<%= cell("decidim/announcement",
42-
params[:filter].present? ?
43-
t("empty_filters", scope: "decidim.accountability.results.home") :
44-
t("empty", scope: "decidim.accountability.results.home")) %>
45-
<% end %>
46-
<%= render partial: "home_taxonomies" %>
47-
</section>
48-
25+
<% if selected_root_taxonomy.present? %>
26+
<section class="layout-main__section">
27+
<%= render partial: "home_taxonomies" %>
28+
</section>
29+
<% else %>
30+
<section id="results" class="layout-main__section">
31+
<%= cell "decidim/accountability/results", results %>
32+
<%= decidim_paginate results, order_start_time: params[:order_start_time] %>
33+
</section>
34+
<% end %>
4935
<% end %>

0 commit comments

Comments
 (0)