Skip to content

Commit 2ad50bb

Browse files
authored
Showing the user with id and access type on the details screen (#2274)
Also making sure the dividing line does not overflow the page width Utilized same table as the storage information. I made a few adjustments to make the css for the storage table simpler and work for both tables. <img width="978" height="1110" alt="Screenshot 2025-12-04 at 9 29 52 AM" src="https://github.com/user-attachments/assets/bfb78821-bd68-448a-89bc-387bc6c71ba6" />
1 parent db5b63d commit 2ad50bb

File tree

10 files changed

+71
-26
lines changed

10 files changed

+71
-26
lines changed

app/assets/stylesheets/_project.scss

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,25 +272,24 @@ blockquote {
272272
margin-bottom: 2rem;
273273
.detail-row {
274274
display: flex;
275-
padding: 1rem 1rem 2rem 1rem;
275+
padding: 0 1rem 1rem 1rem;
276276
justify-content: space-between;
277-
align-items: flex-start;
277+
align-items: center;
278278
border-bottom: 1px solid $gray-10;
279279
}
280280
.detail-row-last {
281281
border-bottom: none;
282282
display: flex;
283-
padding: 1rem;
283+
padding: 0 1rem 0 1rem;
284284
justify-content: space-between;
285-
align-items: flex-start;
285+
align-items: center;
286286
}
287287
.detail-subheading {
288-
line-height: 0 !important;
289288
margin: 0 !important;
289+
width: max-content;
290290
}
291291

292292
.detail-value {
293-
line-height: 0 !important;
294293
margin: 0 !important;
295294
}
296295
}

app/assets/stylesheets/_projects.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
display: -webkit-box;
7272
-webkit-box-orient: vertical;
7373
-webkit-line-clamp: 2;
74+
line-clamp: 2;
7475
}
7576

7677
a#show-more-less-link {

app/assets/stylesheets/application.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,3 +187,9 @@ h6 {
187187
color: $white;
188188
background-color: $black-hover;
189189
}
190+
191+
.info {
192+
display: flex;
193+
align-items: center;
194+
gap: 4px;
195+
}

app/presenters/project_show_presenter.rb

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,25 +54,27 @@ def updated
5454
end
5555

5656
def data_sponsor
57-
User.find_by(uid: @project_mf[:data_sponsor])
57+
@data_sponsor ||= User.find_by(uid: @project_mf[:data_sponsor])
5858
end
5959

6060
def data_manager
61-
User.find_by(uid: @project_mf[:data_manager])
61+
@data_manager ||= User.find_by(uid: @project_mf[:data_manager])
6262
end
6363

6464
def data_read_only_users
65-
(@project_mf[:ro_users] || []).map { |uid| ReadOnlyUser.find_by(uid:) }.compact
65+
(@project_mf[:ro_users] || []).map { |uid| UserPresenter.new(User.find_by(uid:)) }.compact
6666
end
6767

6868
def data_read_write_users
69-
(@project_mf[:rw_users] || []).map { |uid| User.find_by(uid:) }.compact
69+
(@project_mf[:rw_users] || []).map { |uid| UserReadWritePresenter.new(User.find_by(uid:)) }.compact
7070
end
7171

7272
def data_users
73-
unsorted_data_users = data_read_only_users + data_read_write_users
74-
sorted_data_users = unsorted_data_users.sort_by { |u| u.family_name || u.uid }
75-
sorted_data_users.uniq { |u| u.uid }
73+
@data_users ||= begin
74+
unsorted_data_users = data_read_only_users + data_read_write_users
75+
sorted_data_users = unsorted_data_users.sort_by { |u| u.family_name || u.uid }
76+
sorted_data_users.uniq { |u| u.uid }
77+
end
7678
end
7779

7880
def data_user_names

app/presenters/user_presenter.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# frozen_string_literal: true
2+
class UserPresenter
3+
attr_reader :user
4+
5+
delegate :uid, :family_name, to: :user
6+
7+
def initialize(user)
8+
@user = user
9+
end
10+
11+
def display_name
12+
user.display_name_only_safe
13+
end
14+
15+
def access_type
16+
"Data User - Read Only"
17+
end
18+
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
class UserReadWritePresenter < UserPresenter
3+
def access_type
4+
"Data User - Read Write"
5+
end
6+
end

app/views/new_project_wizard/_form_user_roles_input.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<lux-input-multiselect
4747
label=""
4848
selected-items-label=""
49-
none-selected-label="No pages selected"
49+
none-selected-label="No users selected"
5050
placeholder="Enter name or netid to search for a user"
5151
:async-load-items-function="searchUsers"
5252
>

app/views/projects/details.html.erb

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<button id="project-content" class="tab-nav"> Content Preview </button>
55
<button id="project-details" class="tab-nav"> Details </button>
66
</div>
7-
<div class="basic-details-container">
7+
<div class="basic-details-container lux">
88
<div class="basic-details-navigation">
99
<ul>
1010
<li><a id="basic-details-link" href="#basic-details-section">Basic Details</a></li>
@@ -66,7 +66,7 @@
6666
<% end %>
6767
</p>
6868
</div>
69-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="1" viewBox="0 0 1200 1" fill="none">
69+
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="1" viewBox="0 0 1200 1" fill="none">
7070
<path d="M6.36558e-08 0.5L1200 0.500105" stroke="#EEEEEE"/>
7171
</svg>
7272
</ul>
@@ -79,23 +79,30 @@
7979
</div>
8080
<div class="detail-pair">
8181
<li class="detail-subheading">Data Sponsor</li>
82-
<p class="detail-value"><%= @presenter.data_sponsor.display_name_safe %></p>
82+
<p class="detail-value"><%= render partial: 'shared/user_display', locals: {user_name: @presenter.data_sponsor.display_name_only_safe, user_id: @presenter.data_sponsor.uid }%></p>
8383
</div>
8484
<div class="detail-pair">
8585
<li class="detail-subheading">Data Manager</li>
86-
<p class="detail-value"><%= @presenter.data_manager.display_name_safe %></p>
86+
<p class="detail-value"><%= render partial: 'shared/user_display', locals: {user_name: @presenter.data_manager.display_name_only_safe, user_id: @presenter.data_manager.uid }%></p>
8787
</div>
8888
<div class="detail-pair">
8989
<li class="detail-subheading">Data User(s)</li>
9090
<p class="detail-value">
91-
<% if @presenter.data_user_names == 0 %>
92-
<strong class="px-0">&mdash;</strong>
91+
<% if @presenter.data_users.count == 0 %>
92+
<strong class="px-0">&mdash;</strong>
9393
<% else %>
94-
<%= @presenter.data_user_names %>
94+
<div class="detail-table">
95+
<% @presenter.data_users.each do |user| %>
96+
<div class="detail-row<%= "-last" if user == @presenter.data_users.last %>">
97+
<div class="detail-subheading"><%= render partial: 'shared/user_display', locals: {user_name: user.display_name, user_id: user.uid }%></div>
98+
<div class="detail-value"><%= user.access_type %></div>
99+
</div>
100+
<% end %>
101+
</div>
95102
<% end %>
96103
</p>
97104
</div>
98-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="1" viewBox="0 0 1200 1" fill="none">
105+
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="1" viewBox="0 0 1200 1" fill="none">
99106
<path d="M6.36558e-08 0.5L1200 0.500105" stroke="#EEEEEE"/>
100107
</svg>
101108
</ul>
@@ -152,7 +159,7 @@
152159
<% end %>
153160
154161
</ul>
155-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="1" viewBox="0 0 1200 1" fill="none">
162+
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="1" viewBox="0 0 1200 1" fill="none">
156163
<path d="M6.36558e-08 0.5L1200 0.500105" stroke="#EEEEEE"/>
157164
</svg>
158165
@@ -185,7 +192,7 @@
185192
<div class="provenance-value"> <%= @presenter.approved_on.keys.first %> <%= @presenter.approved_on.values.first %></div>
186193
</div>
187194
</ul>
188-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="1" viewBox="0 0 1200 1" fill="none">
195+
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="1" viewBox="0 0 1200 1" fill="none">
189196
<path d="M6.36558e-08 0.5L1200 0.500105" stroke="#EEEEEE"/>
190197
</svg>
191198
</ul>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<div class="info">
2+
<div class="item-text"><%= user_name %></div>
3+
<lux-badge color="gray" class="badge">
4+
<div class="badge-text"><%= user_id %></div>
5+
</lux-badge>
6+
</div>

spec/system/project_details_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
expect(page).to have_content(project_in_mediaflux.project_directory)
4040

4141
# Make sure both data manager and sponsor are rendered
42-
expect(page).to have_content("#{data_manager.display_name} (#{data_manager.uid})")
43-
expect(page).to have_content("#{sponsor_user.display_name} (#{sponsor_user.uid})")
42+
expect(page).to have_content("Data Manager\n#{data_manager.display_name}\n#{data_manager.uid}")
43+
expect(page).to have_content("Data Sponsor\n#{sponsor_user.display_name}\n#{sponsor_user.uid}")
4444

4545
# Per ticket #1114 sponsor users no longer have edit access
4646
expect(page).not_to have_selector(:link_or_button, "Edit") # button next to role and description heading

0 commit comments

Comments
 (0)