Skip to content

Commit 4b723b7

Browse files
committed
update latest changes
1 parent 757d5ff commit 4b723b7

File tree

19 files changed

+405
-51
lines changed

19 files changed

+405
-51
lines changed

app/cells/decidim/alternative_landing/content_blocks/base_cell.rb

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,47 @@ def participatory_spaces
1818
].flatten.compact
1919
end
2020

21-
def available_components
22-
@available_components ||= components.where(manifest_name:).map do |component|
21+
def available_components(manifest_name)
22+
@available_components ||= {}
23+
@available_components[manifest_name] ||= components.where(manifest_name:).map do |component|
2324
["#{translated_attribute(component.name)} (#{translated_attribute(component.participatory_space.title)})", component.id]
2425
end.unshift [t(".all"), nil]
2526
end
2627

27-
def component
28-
@component ||= components.find_by(id: (defined?(form) ? form.object : model).settings.try(:component_id))
28+
def available_posts
29+
[
30+
[t("sidebar_right_stack_settings_form.filter_posts.all", scope: "decidim.alternative_landing.content_blocks"), "all"],
31+
[t("sidebar_right_stack_settings_form.filter_posts.organization", scope: "decidim.alternative_landing.content_blocks"), "organization"],
32+
[t("sidebar_right_stack_settings_form.filter_posts.users", scope: "decidim.alternative_landing.content_blocks"), "users"]
33+
]
34+
end
35+
36+
def available_meeting_components
37+
special_options = [
38+
[t(".all_meetings"), "all"],
39+
[t(".let_me_choose_individual_meetings"), "meeting-picker"]
40+
]
41+
42+
@available_meeting_components ||= special_options + available_components("meetings")
43+
end
44+
45+
def component(component_key = :component)
46+
@component_cache ||= {}
47+
@component_cache[component_key] ||= begin
48+
record = defined?(form) ? form.object : model
49+
component_id = record.settings.try("#{component_key}_id")
50+
component_relation.find_by(id: component_id) if component_id.present?
51+
end
2952
end
3053

3154
def components
3255
@components ||= Decidim::Component.where(participatory_space: participatory_spaces)
3356
end
3457

58+
def component_relation
59+
components
60+
end
61+
3562
def manifest_name
3663
raise NotImplementedError
3764
end

app/cells/decidim/alternative_landing/content_blocks/latest_blog_posts_cell.rb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,16 @@ def post_path(post)
2020
end
2121

2222
def posts
23-
@posts ||= Blogs::Post.where(
24-
component: component || components
25-
).limit(posts_to_show).order(created_at: :desc)
23+
scope = Blogs::Post.where(component: component || components)
24+
25+
case model.settings[:filter]
26+
when "organization"
27+
scope = scope.where(decidim_author_type: "Decidim::Organization")
28+
when "users"
29+
scope = scope.where(decidim_author_type: "Decidim::UserBaseEntity")
30+
end
31+
32+
scope.limit(posts_to_show).order(created_at: :desc)
2633
end
2734

2835
private

app/cells/decidim/alternative_landing/content_blocks/latest_blog_posts_settings_form/show.erb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
<%= t(".info", component: translated_attribute(component.name), space: translated_attribute(component.participatory_space.title)) %>
99
</p>
1010
<% end %>
11-
<%= settings_fields.select :component_id, available_components %>
11+
<%= settings_fields.select :component_id, available_components("blogs") %>
12+
<%= settings_fields.select :filter, available_posts, label: t("latest_blog_posts_settings_form.filter.name", scope: "decidim.alternative_landing.content_blocks") %>
1213
<% end %>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<label for="meetings_list">
2+
<%= t("name", scope: "decidim.components.meetings") %>
3+
4+
<select id="meetings_list"
5+
placeholder="<%= t("meetings_picker.choose_meetings", scope: "decidim.alternative_landing.content_blocks.sidebar_right_stack_settings_form") %>"
6+
data-tm-name="<%= form_name %>"
7+
data-tm-items="<%= selected_ids.to_json %>"
8+
data-tm-no-results="<%= t("meetings_picker.no_meetings", scope: "decidim.alternative_landing.content_blocks.sidebar_right_stack_settings_form") %>"
9+
class="mt-4" multiple>
10+
<% decorated_meetings do |meeting| %>
11+
<option value="<%= meeting.id %>"><%= decidim_sanitize translated_attribute(meeting.title) %> (<%= decidim_sanitize meeting.reference %>)</option>
12+
<% end %>
13+
</select>
14+
</label>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# frozen_string_literal: true
2+
3+
module Decidim
4+
module AlternativeLanding
5+
module ContentBlocks
6+
class MeetingsPickerCell < BaseCell
7+
def show
8+
render
9+
end
10+
11+
alias component model
12+
13+
def form
14+
options[:form]
15+
end
16+
17+
def field
18+
options[:field]
19+
end
20+
21+
def form_name
22+
"#{form.object_name}[settings][#{field}]"
23+
end
24+
25+
def selected_ids
26+
form.object["settings"]&.meeting_ids&.map(&:to_i) || []
27+
end
28+
29+
def meetings
30+
@meetings ||= Meetings::Meeting.upcoming.where(
31+
component: component || components
32+
)
33+
end
34+
35+
def decorated_meetings
36+
meetings.map do |meeting|
37+
yield Decidim::Meetings::MeetingPresenter.new(meeting)
38+
end
39+
end
40+
end
41+
end
42+
end
43+
end

app/cells/decidim/alternative_landing/content_blocks/sidebar_right_stack/show.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<%
3535
formatted_date = l(meeting.start_time, format: :long)
3636
%>
37-
<h3 class="text-2xl"><%= translated_attribute(meeting.title) %></h3>
37+
<h3 class="text-2xl"><%= decidim_sanitize translated_attribute(meeting.title) %></h3>
3838
<p><%= "#{formatted_date}" %></p>
3939
</li>
4040
<% end %>

app/cells/decidim/alternative_landing/content_blocks/sidebar_right_stack_cell.rb

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,32 @@ def background_image
2525
end
2626

2727
def meetings
28-
@meetings ||= Meetings::Meeting.upcoming.where(
29-
component: component || components
30-
)
28+
meeting_ids = Array(model.settings[:meeting_ids]).map(&:to_i).compact_blank
29+
scope = Decidim::Meetings::Meeting.upcoming.order(start_time: :asc)
30+
31+
case model.settings.meetings_component_id
32+
when "meeting-picker"
33+
return Decidim::Meetings::Meeting.none if meeting_ids.empty?
34+
35+
Decidim::Meetings::Meeting.where(id: meeting_ids)
36+
when "all"
37+
scope
38+
else
39+
scope.where(component: component(:meetings_component))
40+
end
3141
end
3242

3343
def posts
34-
@posts ||= Blogs::Post.where(
35-
component: component || components
36-
).order(created_at: :desc)
44+
scope = posts_component = component(:posts_component)
45+
scope = scope ? Blogs::Post.where(component: posts_component) : Blogs::Post.all
46+
47+
scope = case model.settings.filter_posts
48+
when "organization" then scope.where(decidim_author_type: "Decidim::Organization")
49+
when "users" then scope.where(decidim_author_type: "Decidim::UserBaseEntity")
50+
else scope
51+
end
52+
53+
scope.order(created_at: :desc)
3754
end
3855
end
3956
end
Lines changed: 98 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,103 @@
1-
<% form.fields_for :settings, form.object.settings do |settings_fields| %>
2-
3-
<h3><%= t(".settings_sidebar") %></h2>
4-
<div class="grid-x">
5-
<%= settings_fields.translated :text_field, :"title_sidebar", label: t(".title_sidebar") %>
6-
<div class="large">
7-
<%= settings_fields.translated :text_area, :"body", rows: 5, label: t(".body") %>
8-
</div>
9-
<div class="large">
10-
<%= settings_fields.translated :text_field, :"link_text_sidebar", label: t(".link_text") %>
11-
<%= settings_fields.translated :text_field, :"link_url_sidebar", label: t(".link_url") %>
1+
<%= append_stylesheet_pack_tag "decidim_alternative_landing", media: "all" %>
2+
<%= append_javascript_pack_tag "decidim_alternative_landing" %>
3+
<div class="form__wrapper">
4+
<% form.fields_for :settings, form.object.settings do |settings_fields| %>
5+
<div class="card" data-component="accordion" id="accordion-homepage_sidebar_title">
6+
<div class="card-divider">
7+
<div class="card-divider-button" data-open="true" data-controls="panel-homepage_sidebar_title" type="button">
8+
<%= icon "arrow-right-s-line" %>
9+
<h2 class="card-title" id="homepage_sidebar_title">
10+
<%= t(".settings_sidebar") %>
11+
</h2>
12+
</div>
13+
</div>
14+
<div id="panel-homepage_sidebar_title" class="card-section">
15+
<div class="row column">
16+
<%= settings_fields.translated :text_field, :title_sidebar, label: t(".title_sidebar") %>
17+
</div>
18+
<div class="row column">
19+
<%= settings_fields.translated :text_area, :body, rows: 5, label: t(".body") %>
20+
</div>
21+
<div class="row column">
22+
<%= settings_fields.translated :text_field, :link_text_sidebar, label: t(".link_text") %>
23+
</div>
24+
<div class="row column">
25+
<%= settings_fields.translated :text_field, :link_url_sidebar, label: t(".link_url") %>
26+
</div>
27+
<div class="row column">
28+
<% form.fields_for :images, form.object.images do |images_fields| %>
29+
<%= images_fields.upload :background_image, label: t(".image") %>
30+
<% end %>
31+
</div>
32+
</div>
1233
</div>
1334

14-
<% form.fields_for :images, form.object.images do |images_fields| %>
15-
<%= images_fields.upload :background_image, label: t(".image") %>
16-
<% end %>
17-
</div>
18-
19-
<h3><%= t(".settings_meetings") %></h2>
20-
<div class="grid-x">
21-
<%= settings_fields.translated :text_field, :"title_meetings", label: t(".title_meetings") %>
22-
<div class="large">
23-
<%= settings_fields.translated :text_field, :"link_text_meetings", label: t(".link_text") %>
24-
<%= settings_fields.translated :text_field, :"link_url_meetings", label: t(".link_url") %>
35+
<div class="card" data-component="accordion" id="accordion-homepage_meetings_title">
36+
<div class="card-divider">
37+
<div class="card-divider-button" data-open="true" data-controls="panel-homepage_meetings_title" type="button">
38+
<%= icon "arrow-right-s-line" %>
39+
<h2 class="card-title" id="homepage_meetings_title">
40+
<%= t(".settings_meetings") %>
41+
</h2>
42+
</div>
43+
</div>
44+
<div id="panel-homepage_meetings_title" class="card-section">
45+
<div class="row column">
46+
<%= settings_fields.translated :text_field, :title_meetings, label: t(".title_meetings") %>
47+
</div>
48+
<div class="row column">
49+
<%= settings_fields.translated :text_field, :link_text_meetings, label: t(".link_text") %>
50+
</div>
51+
<div class="row column">
52+
<%= settings_fields.translated :text_field, :link_url_meetings, label: t(".link_url") %>
53+
</div>
54+
<div class="meetings-fields">
55+
<div class="row column">
56+
<% if component(:meetings_component) %>
57+
<p class="callout secondary">
58+
<%= t(".info_meetings", component: translated_attribute(component(:meetings_component).name), space: translated_attribute(component(:meetings_component).participatory_space.title)) %>
59+
</p>
60+
<% end %>
61+
<%= settings_fields.select :meetings_component_id, available_meeting_components %>
62+
</div>
63+
<div class="row column meetings-fields--individual-picker">
64+
<%= cell "decidim/alternative_landing/content_blocks/meetings_picker", component, form:, field: :meeting_ids %>
65+
</div>
66+
</div>
67+
</div>
2568
</div>
26-
</div>
2769

28-
29-
<h3><%= t(".settings_posts") %></h2>
30-
<div class="grid-x">
31-
<%= settings_fields.translated :text_field, :"title_posts", label: t(".title_posts") %>
32-
<div class="large">
33-
<%= settings_fields.translated :text_field, :"link_text_posts", label: t(".link_text") %>
34-
<%= settings_fields.translated :text_field, :"link_url_posts", label: t(".link_url") %>
70+
<div class="card" data-component="accordion" id="accordion-homepage_posts_title">
71+
<div class="card-divider">
72+
<div class="card-divider-button" data-open="true" data-controls="panel-homepage_posts_title" type="button">
73+
<%= icon "arrow-right-s-line" %>
74+
<h2 class="card-title" id="homepage_posts_title">
75+
<%= t(".settings_posts") %>
76+
</h2>
77+
</div>
78+
</div>
79+
<div id="panel-homepage_posts_title" class="card-section">
80+
<div class="row column">
81+
<%= settings_fields.translated :text_field, :title_posts, label: t(".title_posts") %>
82+
</div>
83+
<div class="row column">
84+
<%= settings_fields.translated :text_field, :link_text_posts, label: t(".link_text") %>
85+
</div>
86+
<div class="row column">
87+
<%= settings_fields.translated :text_field, :link_url_posts, label: t(".link_url") %>
88+
</div>
89+
<div class="row column">
90+
<% if component(:posts_component) %>
91+
<p class="callout secondary">
92+
<%= t(".info_posts", component: translated_attribute(component(:posts_component).name), space: translated_attribute(component(:posts_component).participatory_space.title)) %>
93+
</p>
94+
<% end %>
95+
<%= settings_fields.select :posts_component_id, available_components("blogs") %>
96+
</div>
97+
<div class="row column">
98+
<%= settings_fields.select :filter_posts, available_posts, label: t("sidebar_right_stack_settings_form.filter_posts.name", scope: "decidim.alternative_landing.content_blocks") %>
99+
</div>
100+
</div>
35101
</div>
36-
</div>
37-
<% end %>
38-
39-
102+
<% end %>
103+
</div>

app/cells/decidim/alternative_landing/content_blocks/sidebar_right_stack_settings_form_cell.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module Decidim
44
module AlternativeLanding
55
module ContentBlocks
6-
class SidebarRightStackSettingsFormCell < Decidim::ViewModel
6+
class SidebarRightStackSettingsFormCell < BaseCell
77
alias form model
88
end
99
end

app/packs/entrypoints/decidim_alternative_landing.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import "src/decidim/alternative_landing/alternative_landing.js"
2+
import "src/decidim/alternative_landing/choose_meetings"
3+
import "src/decidim/alternative_landing/meeting_dependent_input"
24

35
require.context("../images", true)
46

0 commit comments

Comments
 (0)