Skip to content

Commit 5fce71a

Browse files
committed
Auto merge of #4152 - Turbo87:owners-list, r=locks
CrateSidebar: Show detailed list for small number of owners This PR extracts a `OwnersList` component and then adjusts it to show a more detailed list if the number of owners is five or less. ### Before: <img width="314" alt="Bildschirmfoto 2021-11-09 um 20 24 00" src="https://user-images.githubusercontent.com/141300/140990929-c17e09b4-d30f-45cb-96e1-f9a896956c57.png"> ### After: <img width="344" alt="Bildschirmfoto 2021-11-09 um 20 23 41" src="https://user-images.githubusercontent.com/141300/140990923-2ff9088d-5428-4536-b1a5-979863f375dc.png">
2 parents 65aef96 + 0971c51 commit 5fce71a

File tree

7 files changed

+84
-37
lines changed

7 files changed

+84
-37
lines changed

app/components/crate-sidebar.hbs

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -84,24 +84,7 @@
8484

8585
<div>
8686
<h3>Owners</h3>
87-
88-
<ul local-class='owners' data-test-owners>
89-
{{#each @crate.owner_team as |team|}}
90-
<li>
91-
<LinkTo @route={{team.kind}} @model={{team.login}} data-test-team-link={{team.login}}>
92-
<UserAvatar @user={{team}} @size="medium-small" />
93-
</LinkTo>
94-
</li>
95-
{{/each}}
96-
97-
{{#each @crate.owner_user as |user|}}
98-
<li>
99-
<LinkTo @route={{user.kind}} @model={{user.login}} data-test-user-link={{user.login}}>
100-
<UserAvatar @user={{user}} @size="medium-small" />
101-
</LinkTo>
102-
</li>
103-
{{/each}}
104-
</ul>
87+
<OwnersList @owners={{@crate.owners}} />
10588
</div>
10689
</div>
10790

@@ -110,7 +93,7 @@
11093
{{#if @crate.categories}}
11194
<div>
11295
<h3>Categories</h3>
113-
<ul>
96+
<ul local-class="categories">
11497
{{#each @crate.categories as |category|}}
11598
<li><LinkTo @route="category" @model={{category.slug}}>{{category.category}}</LinkTo></li>
11699
{{/each}}

app/components/crate-sidebar.module.css

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
flex-direction: column;
1111
}
1212

13-
ul {
13+
.categories {
1414
padding-left: 20px;
1515
}
1616
}
@@ -103,18 +103,6 @@
103103
}
104104
}
105105

106-
ul.owners {
107-
display: flex;
108-
flex-wrap: wrap;
109-
list-style: none;
110-
padding: 0;
111-
margin: 0;
112-
113-
li {
114-
margin: 0 7px 7px 0;
115-
}
116-
}
117-
118106
.more-versions-link,
119107
.reverse-deps-link {
120108
composes: small from '../styles/shared/typography.module.css';

app/components/owners-list.hbs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<ul
2+
role="list"
3+
local-class="list {{if this.showDetailedList "detailed"}}"
4+
data-test-owners
5+
>
6+
{{#each @owners as |owner|}}
7+
<li>
8+
<LinkTo
9+
@route={{owner.kind}}
10+
@model={{owner.login}}
11+
local-class="link"
12+
data-test-owner-link={{owner.login}}
13+
>
14+
<UserAvatar @user={{owner}} @size="medium-small" local-class="avatar" />
15+
<span local-class="name">{{or owner.display_name owner.name}}</span>
16+
</LinkTo>
17+
</li>
18+
{{/each}}
19+
</ul>

app/components/owners-list.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Component from '@glimmer/component';
2+
3+
export default class VersionRow extends Component {
4+
get showDetailedList() {
5+
return this.args.owners.length <= 5;
6+
}
7+
}

app/components/owners-list.module.css

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
.list.detailed {
2+
list-style: none;
3+
padding: 0;
4+
margin: 0;
5+
6+
> * + * {
7+
margin-top: 5px;
8+
}
9+
10+
.link {
11+
display: grid;
12+
grid-template-columns: auto 1fr;
13+
align-items: center;
14+
}
15+
16+
.avatar {
17+
margin-right: 10px;
18+
}
19+
20+
.name {
21+
overflow: hidden;
22+
text-overflow: ellipsis;
23+
white-space: nowrap;
24+
}
25+
}
26+
27+
.list:not(.detailed) {
28+
display: flex;
29+
flex-wrap: wrap;
30+
list-style: none;
31+
padding: 0;
32+
margin: 0 0 -10px;
33+
34+
> * {
35+
margin: 0 10px 10px 0;
36+
}
37+
38+
.name {
39+
display: none;
40+
}
41+
}
42+
43+
.avatar {
44+
border-radius: 4px;
45+
}

app/models/crate.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export default class Crate extends Model {
2020

2121
@hasMany('versions', { async: true }) versions;
2222

23-
@hasMany('users', { async: true }) owners;
2423
@hasMany('teams', { async: true }) owner_team;
2524
@hasMany('users', { async: true }) owner_user;
2625
@hasMany('version-download', { async: true }) version_downloads;
@@ -43,6 +42,12 @@ export default class Crate extends Model {
4342
}
4443
}
4544

45+
get owners() {
46+
let teams = this.owner_team.toArray() ?? [];
47+
let users = this.owner_user.toArray() ?? [];
48+
return [...teams, ...users];
49+
}
50+
4651
follow = memberAction({ type: 'PUT', path: 'follow' });
4752
unfollow = memberAction({ type: 'DELETE', path: 'follow' });
4853

tests/acceptance/crate-test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ module('Acceptance | crate page', function (hooks) {
148148
this.server.loadFixtures();
149149

150150
await visit('/crates/nanomsg');
151-
await click('[data-test-owners] [data-test-user-link="blabaere"]');
151+
await click('[data-test-owners] [data-test-owner-link="blabaere"]');
152152

153153
assert.equal(currentURL(), '/users/blabaere');
154154
assert.dom('[data-test-heading] [data-test-username]').hasText('blabaere');
@@ -158,7 +158,7 @@ module('Acceptance | crate page', function (hooks) {
158158
this.server.loadFixtures();
159159

160160
await visit('/crates/nanomsg');
161-
await click('[data-test-owners] [data-test-team-link="github:org:thehydroimpulse"]');
161+
await click('[data-test-owners] [data-test-owner-link="github:org:thehydroimpulse"]');
162162

163163
assert.equal(currentURL(), '/teams/github:org:thehydroimpulse');
164164
assert.dom('[data-test-heading] [data-test-team-name]').hasText('thehydroimpulseteam');
@@ -170,7 +170,7 @@ module('Acceptance | crate page', function (hooks) {
170170
await visit('/crates/nanomsg');
171171

172172
assert
173-
.dom('[data-test-owners] [data-test-team-link="github:org:thehydroimpulse"] img')
173+
.dom('[data-test-owners] [data-test-owner-link="github:org:thehydroimpulse"] img')
174174
.hasAttribute('src', 'https://avatars.githubusercontent.com/u/565790?v=3&s=64');
175175

176176
assert.dom('[data-test-owners] li').exists({ count: 4 });
@@ -181,7 +181,7 @@ module('Acceptance | crate page', function (hooks) {
181181

182182
await visit('/crates/nanomsg');
183183

184-
assert.dom('[data-test-owners] [data-test-team-link="github:org:thehydroimpulse"]').exists();
184+
assert.dom('[data-test-owners] [data-test-owner-link="github:org:thehydroimpulse"]').exists();
185185
assert.dom('[data-test-owners] li').exists({ count: 4 });
186186
});
187187

0 commit comments

Comments
 (0)