Skip to content

Commit 9a59bcf

Browse files
authored
Improve version selector sorting (#322)
1 parent ac5147b commit 9a59bcf

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

addon/components/docs-header/version-selector/component.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,27 @@ export default Component.extend({
3535
let versions = A(this.get('projectVersion.versions'));
3636
let latest = versions.findBy('key', latestVersionName);
3737
let primary = versions.findBy('key', primaryBranch);
38+
let otherTags = versions
39+
.reject(v => [ latest, primary ].includes(v))
40+
.sort((tagA, tagB) => {
41+
let keyA = tagA.key;
42+
let keyB = tagB.key;
43+
44+
if (keyA > keyB) {
45+
return -1;
46+
}
47+
if (keyA < keyB) {
48+
return 1;
49+
}
50+
51+
// names must be equal
52+
return 0;
53+
});
3854

3955
return [
4056
latest,
4157
primary,
42-
...A(versions.reject(v => [ latest, primary ].includes(v))).sortBy('key')
58+
...otherTags
4359
].filter(Boolean);
4460
}),
4561

tests/acceptance/version-selector-test.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,24 @@ module('Acceptance | Version selector test', function(hooks) {
5050
"path": "master",
5151
"name": "master"
5252
},
53+
"v0.2.x": {
54+
"sha": "aca26720d930843dd084b508fce75b158ff0386e",
55+
"tag": "v0.2.4",
56+
"path": "versions/v0.2.x",
57+
"name": "v0.2.x"
58+
},
5359
"v0.1.0": {
5460
"sha": "d752437850bc9833ea3e354095b501473b0420ae",
5561
"tag": "v0.1.0",
5662
"path": "v0.1.0",
5763
"name": "v0.1.0"
58-
}
64+
},
65+
"v0.3.0": {
66+
"sha": "833a8aa00df5918b07d0574a28a0adc41d5ac2e6",
67+
"tag": "v0.3.0",
68+
"path": "v0.3.0",
69+
"name": "v0.3.0"
70+
},
5971
});
6072

6173
await visit('/');
@@ -68,8 +80,14 @@ module('Acceptance | Version selector test', function(hooks) {
6880
assert.dom('[data-test-id="version"]:nth-child(2)').includesText('master', 'master is rendered secon');
6981
assert.dom('[data-test-id="version"]:nth-child(2)').includesText('53b73');
7082

71-
assert.dom('[data-test-id="version"]:nth-child(3)').includesText('v0.1.0', 'tags are rendered last');
72-
assert.dom('[data-test-id="version"]:nth-child(3)').includesText('d7524');
83+
assert.dom('[data-test-id="version"]:nth-child(3)').includesText('v0.3.0', 'tags are rendered last, in desc order');
84+
assert.dom('[data-test-id="version"]:nth-child(3)').includesText('833a8');
85+
86+
assert.dom('[data-test-id="version"]:nth-child(4)').includesText('v0.2.x');
87+
assert.dom('[data-test-id="version"]:nth-child(4)').includesText('aca26');
88+
89+
assert.dom('[data-test-id="version"]:nth-child(5)').includesText('v0.1.0');
90+
assert.dom('[data-test-id="version"]:nth-child(5)').includesText('d7524');
7391
});
7492

7593
test(`the version selector renders a tag for latest if present`, async function(assert) {

0 commit comments

Comments
 (0)