Skip to content

Commit 2b77e4e

Browse files
committed
Auto merge of #3278 - Turbo87:versions-sort, r=locks
crate.versions: Add "Sort By" dropdown with "Date" and "SemVer" options <img width="213" alt="Bildschirmfoto 2021-02-10 um 23 22 11" src="https://user-images.githubusercontent.com/141300/107580473-e56a2e00-6bf6-11eb-95b6-e4249db8a742.png"> and if "Date" is chose, the following situation, where a bunch of patch releases for older versions got published, will be more visible: <img width="975" alt="Bildschirmfoto 2021-02-10 um 23 22 21" src="https://user-images.githubusercontent.com/141300/107580465-e1d6a700-6bf6-11eb-97ba-2b0db4b59683.png">
2 parents 7cb8ce1 + 5572b47 commit 2b77e4e

File tree

5 files changed

+69
-6
lines changed

5 files changed

+69
-6
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
<@menu.Item>
1+
<@menu.Item ...attributes>
22
<LinkTo @query={{@query}}>{{yield}}</LinkTo>
33
</@menu.Item>

app/controllers/crate/versions.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Controller from '@ember/controller';
2+
import { tracked } from '@glimmer/tracking';
3+
4+
export default class SearchController extends Controller {
5+
queryParams = ['sort'];
6+
7+
@tracked sort;
8+
9+
get currentSortBy() {
10+
return this.sort === 'semver' ? 'SemVer' : 'Date';
11+
}
12+
13+
get sortedVersions() {
14+
let versions = this.model.versions.toArray();
15+
16+
return this.sort === 'semver'
17+
? versions.sort((a, b) => b.semver.compare(a.semver))
18+
: versions.sort((a, b) => b.created_at - a.created_at);
19+
}
20+
}

app/styles/crate/versions.module.css

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
.back-link {
2-
margin-bottom: 20px;
1+
.results-meta {
2+
display: flex;
3+
align-items: center;
4+
justify-content: space-between;
5+
margin-bottom: 10px;
36
}
47

58
.page-description {

app/templates/crate/versions.hbs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
<CrateHeader @crate={{this.model}} />
22

3-
<LinkTo @route="crate" @model={{this.model}} local-class="back-link">&#11013; Back to Main Page</LinkTo>
3+
<div local-class="results-meta">
4+
<LinkTo @route="crate" @model={{this.model}} local-class="back-link">
5+
&#11013; Back to Main Page
6+
</LinkTo>
7+
8+
<div data-test-search-sort>
9+
<span local-class="sort-by-label">Sort by </span>
10+
<SortDropdown @current={{this.currentSortBy}} as |sd|>
11+
<sd.Option @query={{hash sort="date"}} data-test-date-sort>Date</sd.Option>
12+
<sd.Option @query={{hash sort="semver"}} data-test-semver-sort>SemVer</sd.Option>
13+
</SortDropdown>
14+
</div>
15+
</div>
416

517
<span local-class="page-description" data-test-page-description>
618
All <strong>{{ this.model.versions.length }}</strong>
@@ -9,9 +21,9 @@
921
</span>
1022

1123
<ul local-class="list">
12-
{{#each this.model.versions as |version|}}
24+
{{#each this.sortedVersions as |version|}}
1325
<li>
14-
<VersionList::Row @version={{version}} local-class="row" />
26+
<VersionList::Row @version={{version}} local-class="row" data-test-version={{version.num}} />
1527
</li>
1628
{{/each}}
1729
</ul>

tests/acceptance/versions-test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { click, currentURL, findAll, visit } from '@ember/test-helpers';
2+
import { module, test } from 'qunit';
3+
4+
import { setupApplicationTest } from 'cargo/tests/helpers';
5+
6+
module('Acceptance | crate versions page', function (hooks) {
7+
setupApplicationTest(hooks);
8+
9+
test('show versions sorted by date', async function (assert) {
10+
let crate = this.server.create('crate', { name: 'nanomsg' });
11+
this.server.create('version', { crate, num: '0.1.0', created_at: '2017-01-01' });
12+
this.server.create('version', { crate, num: '0.2.0', created_at: '2018-01-01' });
13+
this.server.create('version', { crate, num: '0.3.0', created_at: '2019-01-01' });
14+
this.server.create('version', { crate, num: '0.2.1', created_at: '2020-01-01' });
15+
16+
await visit('/crates/nanomsg/versions');
17+
assert.equal(currentURL(), '/crates/nanomsg/versions');
18+
19+
let versions = findAll('[data-test-version]').map(it => it.dataset.testVersion);
20+
assert.deepEqual(versions, ['0.2.1', '0.3.0', '0.2.0', '0.1.0']);
21+
22+
await click('[data-test-current-order]');
23+
await click('[data-test-semver-sort] a');
24+
25+
versions = findAll('[data-test-version]').map(it => it.dataset.testVersion);
26+
assert.deepEqual(versions, ['0.3.0', '0.2.1', '0.2.0', '0.1.0']);
27+
});
28+
});

0 commit comments

Comments
 (0)