Skip to content

Commit 91ee3a7

Browse files
Implement dropdown menu for other actions in spaces (decidim#14863)
Co-authored-by: Alexandru Emil Lupu <[email protected]>
1 parent d076e34 commit 91ee3a7

File tree

27 files changed

+463
-191
lines changed

27 files changed

+463
-191
lines changed

decidim-admin/lib/decidim/admin/test/invite_participatory_space_users_shared_context.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def edit_user(username)
2828
visit participatory_space_user_roles_path
2929

3030
within "tr", text: username do
31+
find("button[data-component='dropdown']").click
3132
click_on "Edit"
3233
end
3334
end

decidim-assemblies/app/views/decidim/assemblies/admin/assembly_user_roles/index.html.erb

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,52 +9,76 @@
99
</h1>
1010
</div>
1111
<%= admin_filter_selector %>
12-
<div class="table-scroll">
12+
<div class="table-stacked">
1313
<table class="table-list">
1414
<thead>
1515
<tr>
16-
<th><%= sort_link(query, :name,t("models.assembly_user_role.fields.name", scope: "decidim.admin"), default_order: :desc) %></th>
16+
<th><%= sort_link(query, :name, t("models.assembly_user_role.fields.name", scope: "decidim.admin"), default_order: :desc) %></th>
1717
<th><%= sort_link(query, :email, t("models.assembly_user_role.fields.email", scope: "decidim.admin"), default_order: :desc) %></th>
1818
<th><%= sort_link(query, :last_sign_in_at, t("models.user.fields.last_sign_in_at", scope: "decidim.admin"), default_order: :desc) %></th>
1919
<th><%= sort_link(query, :invitation_accepted_at, t("models.user.fields.invitation_accepted_at", scope: "decidim.admin"), default_order: :desc) %></th>
2020
<th><%= sort_link(query, :role, t("models.assembly_user_role.fields.role", scope: "decidim.admin"), default_order: :desc) %></th>
21-
<th></th>
21+
<th><%= t("models.assembly_user_role.fields.actions", scope: "decidim.admin") %></th>
2222
</tr>
2323
</thead>
2424
<tbody>
2525
<% filtered_collection.each do |role| %>
2626
<tr>
27-
<td>
27+
<td data-label="<%= t("models.assembly_user_role.fields.name", scope: "decidim.admin") %>">
2828
<%= role.user.name %><br>
2929
</td>
30-
<td>
30+
<td data-label="<%= t("models.assembly_user_role.fields.email", scope: "decidim.admin") %>">
3131
<%= role.user.email %><br>
3232
</td>
33-
<td>
33+
<td data-label="<%= t("models.user.fields.last_sign_in_at", scope: "decidim.admin") %>">
3434
<% if role.user.invitation_sent_at %>
3535
<%= l role.user.invitation_sent_at, format: :short %>
3636
<% end %>
3737
</td>
38-
<td>
38+
<td data-label="<%= t("models.user.fields.invitation_accepted_at", scope: "decidim.admin") %>">
3939
<% if role.user.invitation_accepted_at %>
4040
<%= l role.user.invitation_accepted_at, format: :short %>
4141
<% end %>
4242
</td>
43-
<td>
43+
<td data-label="<%= t("models.user.fields.role", scope: "decidim.admin") %>">
4444
<%= t("#{role.role}", scope: "decidim.admin.models.assembly_user_role.roles") %><br>
4545
</td>
46-
<td class="table-list__actions">
47-
<% if allowed_to?(:invite, :assembly_user_role, user_role: role) && role.user.invited_to_sign_up? %>
48-
<%= icon_link_to "refresh-line", resend_invitation_assembly_user_role_path(current_assembly, role), t("actions.resend_invitation", scope: "decidim.admin"), class: "resend-invitation", method: :post %>
49-
<% end %>
46+
<td class="table-list__actions" data-label="<%= t("models.assembly_user_role.fields.actions", scope: "decidim.admin") %>">
47+
<button type="button" data-component="dropdown" data-target="actions-assembly-user-role-<%= role.id %>" aria-label="<%= t("decidim.admin.actions.actions_label", resource: role.user.name) %>">
48+
<%= icon "more-fill", class: "text-secondary" %>
49+
</button>
5050

51-
<% if allowed_to? :update, :assembly_user_role, user_role: role %>
52-
<%= icon_link_to "pencil-line", edit_assembly_user_role_path(current_assembly, role), t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit" %>
53-
<% end %>
51+
<div class="inline-block relative">
52+
<ul id="actions-assembly-user-role-<%= role.id %>" class="dropdown dropdown__action" aria-hidden="true">
53+
<% if allowed_to?(:invite, :assembly_user_role, user_role: role) && role.user.invited_to_sign_up? %>
54+
<li class="dropdown__item">
55+
<%= link_to resend_invitation_assembly_user_role_path(current_assembly, role), method: :post, class: "dropdown__button resend-invitation" do %>
56+
<%= icon "refresh-line" %> <%= t("actions.resend_invitation", scope: "decidim.admin") %>
57+
<% end %>
58+
</li>
5459

55-
<% if allowed_to? :destroy, :assembly_user_role, user_role: role %>
56-
<%= icon_link_to "delete-bin-line", assembly_user_role_path(current_assembly, role), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
57-
<% end %>
60+
<hr>
61+
<% end %>
62+
63+
<% if allowed_to? :update, :assembly_user_role, user_role: role %>
64+
<li class="dropdown__item">
65+
<%= link_to edit_assembly_user_role_path(current_assembly, role), class: "dropdown__button" do %>
66+
<%= icon "pencil-line" %> <%= t("actions.edit", scope: "decidim.admin") %>
67+
<% end %>
68+
</li>
69+
70+
<hr>
71+
<% end %>
72+
73+
<% if allowed_to? :destroy, :assembly_user_role, user_role: role %>
74+
<li class="dropdown__item">
75+
<%= link_to assembly_user_role_path(current_assembly, role), method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") }, class: "dropdown__button dropdown__button--danger" do %>
76+
<%= icon "delete-bin-line" %> <%= t("actions.destroy", scope: "decidim.admin") %>
77+
<% end %>
78+
</li>
79+
<% end %>
80+
</ul>
81+
</div>
5882
</td>
5983
</tr>
6084
<% end %>

decidim-assemblies/config/locales/en.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ en:
193193
vice_president: Vice president
194194
assembly_user_role:
195195
fields:
196+
actions: Actions
196197
email: Email
197198
name: Name
198199
role: Role

decidim-assemblies/spec/shared/manage_assembly_admins_examples.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
it "updates an assembly admin", versioning: true do
5757
within "#assembly_admins" do
5858
within "#assembly_admins tr", text: other_user.email do
59+
find("button[data-component='dropdown']").click
5960
click_on "Edit"
6061
end
6162
end
@@ -77,6 +78,7 @@
7778

7879
it "deletes an assembly_user_role" do
7980
within "#assembly_admins tr", text: other_user.email do
81+
find("button[data-component='dropdown']").click
8082
accept_confirm { click_on "Delete" }
8183
end
8284

@@ -105,6 +107,7 @@
105107

106108
it "resends the invitation to the user" do
107109
within "#assembly_admins tr", text: "[email protected]" do
110+
find("button[data-component='dropdown']").click
108111
click_on "Resend invitation"
109112
end
110113

decidim-conferences/app/views/decidim/conferences/admin/conference_registrations/index.html.erb

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,37 +24,47 @@
2424
<% end %>
2525
</h1>
2626
</div>
27-
<div class="table-scroll">
27+
<div class="table-stacked">
2828
<table class="table-list">
2929
<thead>
3030
<tr>
3131
<th><%= t("models.conference_registration.fields.name", scope: "decidim.conferences") %></th>
3232
<th><%= t("models.conference_registration.fields.email", scope: "decidim.conferences") %></th>
3333
<th><%= t("models.conference_registration.fields.registration_type", scope: "decidim.conferences") %></th>
3434
<th><%= t("models.conference_registration.fields.state", scope: "decidim.conferences") %></th>
35-
<th></th>
35+
<th><%= t("models.conference_registration.fields.actions", scope: "decidim.conferences") %></th>
3636
</tr>
3737
</thead>
3838
<tbody>
3939
<% @conference_registrations.each do |registration| %>
4040
<tr data-id="<%= registration.id %>">
41-
<td>
41+
<td data-label="<%= t("models.conference_registration.fields.name", scope: "decidim.conferences") %>">
4242
<%= registration.user.name %>
4343
</td>
44-
<td>
44+
<td data-label="<%= t("models.conference_registration.fields.email", scope: "decidim.conferences") %>">
4545
<%= registration.user.email %>
4646
</td>
47-
<td>
47+
<td data-label="<%= t("models.conference_registration.fields.registration_type", scope: "decidim.conferences") %>">
4848
<%= translated_attribute(registration.registration_type.title) %>
4949
</td>
50-
<td>
50+
<td data-label="<%= t("models.conference_registration.fields.state", scope: "decidim.conferences") %>">
5151
<%= t("models.conference_registration.fields.states.#{registration.confirmed? ? "confirmed" : "pending"}", scope: "decidim.conferences") %>
5252
</td>
53-
<td>
54-
<% if allowed_to?(:confirm, :conference_registration, conference_registration: registration) %>
55-
<% if !registration.confirmed? %>
56-
<%= icon_link_to "check-line", confirm_conference_conference_registration_path(current_conference, registration), t("actions.confirm", scope: "decidim.admin"), class: "action-icon--publish", method: :post %>
57-
<% end %>
53+
<td class="table-list__actions" data-label="<%= t("models.conference_registration.fields.actions", scope: "decidim.conferences") %>">
54+
<% if allowed_to?(:confirm, :conference_registration, conference_registration: registration) && !registration.confirmed? %>
55+
<button type="button" data-component="dropdown" data-target="actions-conference-registration-<%= registration.id %>" aria-label="<%= t("decidim.admin.actions.actions_label", resource: registration.user.name) %>">
56+
<%= icon "more-fill", class: "text-secondary" %>
57+
</button>
58+
59+
<div class="inline-block relative">
60+
<ul id="actions-conference-registration-<%= registration.id %>" class="dropdown dropdown__action" aria-hidden="true">
61+
<li class="dropdown__item">
62+
<%= link_to confirm_conference_conference_registration_path(current_conference, registration), method: :post, class: "dropdown__button action-icon--publish" do %>
63+
<%= icon "check-line" %> <%= t("actions.confirm", scope: "decidim.admin") %>
64+
<% end %>
65+
</li>
66+
</ul>
67+
</div>
5868
<% end %>
5969
</td>
6070
</tr>

decidim-conferences/app/views/decidim/conferences/admin/conference_speakers/index.html.erb

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,48 +25,77 @@
2525
</div>
2626
</div>
2727

28-
<div class="table-scroll">
28+
<div class="table-stacked">
2929
<table class="table-list">
3030
<thead>
3131
<tr>
3232
<th><%= t("models.conference_speaker.fields.full_name", scope: "decidim.admin") %></th>
3333
<th><%= t("models.conference_speaker.fields.position", scope: "decidim.admin") %></th>
3434
<th><%= t("models.conference_speaker.fields.affiliation", scope: "decidim.admin") %></th>
35-
36-
<th></th>
35+
<th><%= t("models.conference_speaker.fields.actions", scope: "decidim.admin") %></th>
3736
</tr>
3837
</thead>
3938
<tbody>
4039
<% @conference_speakers.each do |speaker| %>
4140
<% speaker_presenter = Decidim::Admin::ConferenceSpeakerPresenter.new(speaker) %>
4241
<tr>
43-
<td>
42+
<td data-label="<%= t("models.conference_speaker.fields.full_name", scope: "decidim.admin") %>">
4443
<%= speaker_presenter.name %>
4544
</td>
46-
<td>
45+
<td data-label="<%= t("models.conference_speaker.fields.position", scope: "decidim.admin") %>">
4746
<%= translated_attribute(speaker.position) %>
4847
</td>
49-
<td>
48+
<td data-label="<%= t("models.conference_speaker.fields.affiliation", scope: "decidim.admin") %>">
5049
<%= translated_attribute(speaker.affiliation) %>
5150
</td>
52-
<td class="table-list__actions">
53-
<% if allowed_to? :update, :conference_speaker, speaker: speaker %>
54-
<%= icon_link_to "pencil-line", edit_conference_speaker_path(current_conference, speaker), t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit" %>
55-
<% end %>
51+
<td class="table-list__actions" data-label="<%= t("models.conference_speaker.fields.actions", scope: "decidim.admin") %>">
52+
<button type="button" data-component="dropdown" data-target="actions-conference-speaker-<%= speaker.id %>" aria-label="<%= t("decidim.admin.actions.actions_label", resource: speaker_presenter.name) %>">
53+
<%= icon "more-fill", class: "text-secondary" %>
54+
</button>
55+
56+
<div class="inline-block relative">
57+
<ul id="actions-conference-speaker-<%= speaker.id %>" class="dropdown dropdown__action" aria-hidden="true">
58+
<% if allowed_to? :update, :conference_speaker, speaker: speaker %>
59+
<li class="dropdown__item">
60+
<%= link_to edit_conference_speaker_path(current_conference, speaker), class: "dropdown__button" do %>
61+
<%= icon "pencil-line" %>
62+
<%= t("actions.edit", scope: "decidim.admin") %>
63+
<% end %>
64+
</li>
65+
66+
<hr>
67+
<% end %>
68+
69+
<% if allowed_to? :update, :conference_speaker, speaker: speaker %>
70+
<% if speaker.published? %>
71+
<li class="dropdown__item">
72+
<%= link_to unpublish_conference_speaker_path(current_conference, speaker.id), method: :put, class: "dropdown__button" do %>
73+
<%= icon "close-circle-line" %>
74+
<%= t("actions.unpublish", scope: "decidim.admin") %>
75+
<% end %>
76+
</li>
77+
<% else %>
78+
<li class="dropdown__item">
79+
<%= link_to publish_conference_speaker_path(current_conference, speaker.id), method: :put, class: "dropdown__button" do %>
80+
<%= icon "check-line" %>
81+
<%= t("actions.publish", scope: "decidim.admin") %>
82+
<% end %>
83+
</li>
84+
<% end %>
5685

57-
<% if allowed_to? :update, :conference_speaker, speaker: speaker %>
58-
<% if speaker.published? %>
59-
<%= icon_link_to "close-circle-line", unpublish_conference_speaker_path(current_conference, speaker.id), t("actions.unpublish", scope: "decidim.admin"), method: :put, class: "action-icon--unpublish" %>
60-
<% else %>
61-
<%= icon_link_to "check-line", publish_conference_speaker_path(current_conference, speaker.id), t("actions.publish", scope: "decidim.admin"), method: :put, class: "action-icon--publish" %>
62-
<% end %>
63-
<% else %>
64-
<span class="action-space icon"></span>
65-
<% end %>
86+
<hr>
87+
<% end %>
6688

67-
<% if allowed_to? :destroy, :conference_speaker, speaker: speaker %>
68-
<%= icon_link_to "delete-bin-line", conference_speaker_path(current_conference, speaker), t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
69-
<% end %>
89+
<% if allowed_to? :destroy, :conference_speaker, speaker: speaker %>
90+
<li class="dropdown__item">
91+
<%= link_to conference_speaker_path(current_conference, speaker), method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") }, class: "dropdown__button" do %>
92+
<%= icon "delete-bin-line" %>
93+
<%= t("actions.destroy", scope: "decidim.admin") %>
94+
<% end %>
95+
</li>
96+
<% end %>
97+
</ul>
98+
</div>
7099
</td>
71100
</tr>
72101
<% end %>

0 commit comments

Comments
 (0)