Skip to content

Commit e4a2b5a

Browse files
committed
Enable maintain location when switching versions while on a function
1 parent 572b4ab commit e4a2b5a

File tree

3 files changed

+25
-55
lines changed

3 files changed

+25
-55
lines changed

app/controllers/project-version.js

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,13 @@ export default class ProjectVersionController extends Controller {
141141

142142
@action
143143
updateProject(project, ver /*, component */) {
144+
const currentURL = this.router.currentURL;
144145
this.router.transitionTo(
145146
findEndingRoute({
146147
project,
147148
targetVersion: ver.id,
148149
currentVersion: this.projectService.version,
149-
currentRouteName: this.router.currentRouteName,
150-
classModelName: this.classController?.model?.get('name'),
151-
moduleModelName: this.moduleController?.model?.name,
152-
namespaceModelName: this.namespaceController?.model?.name,
150+
currentURL,
153151
currentAnchor: window.location.hash,
154152
}),
155153
);
@@ -160,41 +158,16 @@ export function findEndingRoute({
160158
project,
161159
targetVersion,
162160
currentVersion,
163-
currentRouteName,
164-
classModelName,
165-
moduleModelName,
166-
namespaceModelName,
161+
currentURL,
167162
currentAnchor,
168163
}) {
169164
let projectVersionID = getCompactVersion(targetVersion);
170-
let endingRoute;
171-
switch (currentRouteName) {
172-
case 'project-version.classes.class': {
173-
let className = encodeURIComponent(classModelName);
174-
endingRoute = `classes/${className}`;
175-
break;
176-
}
177-
case 'project-version.modules.module': {
178-
let moduleName = encodeURIComponent(moduleModelName);
179-
endingRoute = `modules/${moduleName}`;
180-
break;
181-
}
182-
case 'project-version.namespaces.namespace': {
183-
let namespaceName = namespaceModelName;
184-
endingRoute = `namespaces/${namespaceName}`;
185-
break;
186-
}
187-
default:
188-
endingRoute = '';
189-
break;
190-
}
191-
192165
// if the user is navigating to/from api versions Ember >= 2.16 or Ember Data >= 4.0, take them
193166
// to the home page instead of trying to translate the url
194167
if (shouldGoToVersionIndex(project, targetVersion, currentVersion)) {
195168
return `/${project}/${projectVersionID}`;
196169
} else {
197-
return `/${project}/${projectVersionID}/${endingRoute}${currentAnchor}`;
170+
return `${currentURL.replace(getCompactVersion(currentVersion), projectVersionID)}${currentAnchor}`;
198171
}
199172
}
200173

tests/acceptance/switch-versions-test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,21 @@ module('Acceptance | version navigation', function (hooks) {
165165
);
166166
});
167167

168+
test('switching between versions on a function works', async function (assert) {
169+
await visit('/ember/6.5/functions/@ember%2Fdebug/debug');
170+
assert.strictEqual(
171+
currentURL(),
172+
'/ember/6.5/functions/@ember%2Fdebug/debug',
173+
);
174+
175+
await selectChoose('.ember-power-select-trigger', '6.4');
176+
177+
assert.strictEqual(
178+
currentURL(),
179+
'/ember/6.4/functions/@ember%2Fdebug/debug',
180+
);
181+
});
182+
168183
test('switching versions works if class name includes slashes', async function (assert) {
169184
await visit('/ember/3.4/classes/@ember%2Fobject%2Fcomputed');
170185
assert.equal(

tests/unit/controllers/project-version-test.js

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,7 @@ module('Unit | Controller | project version', function (hooks) {
5353
project: 'ember',
5454
targetVersion: '6.4.0',
5555
currentVersion: '6.5.0',
56-
currentRouteName: 'project-version.classes.class',
57-
classModelName: 'Component',
58-
moduleModelName: null,
59-
namespaceModelName: null,
56+
currentURL: '/ember/6.5/classes/Component',
6057
currentAnchor: '#didInsertElement',
6158
});
6259

@@ -69,10 +66,7 @@ module('Unit | Controller | project version', function (hooks) {
6966
project: 'ember',
7067
targetVersion: '6.4.0',
7168
currentVersion: '6.5.0',
72-
currentRouteName: 'project-version.modules.module',
73-
classModelName: null,
74-
moduleModelName: '@ember/application',
75-
namespaceModelName: null,
69+
currentURL: '/ember/6.5/modules/%40ember%2Fapplication',
7670
currentAnchor: '#classes',
7771
});
7872

@@ -87,10 +81,7 @@ module('Unit | Controller | project version', function (hooks) {
8781
project: 'ember',
8882
targetVersion: '2.15.0',
8983
currentVersion: '2.16.0',
90-
currentRouteName: 'project-version.classes.class',
91-
classModelName: 'Component',
92-
moduleModelName: null,
93-
namespaceModelName: null,
84+
currentURL: '/ember/2.16/classes/Component',
9485
currentAnchor: '#didInsertElement',
9586
});
9687

@@ -100,10 +91,7 @@ module('Unit | Controller | project version', function (hooks) {
10091
project: 'ember',
10192
targetVersion: '2.16.0',
10293
currentVersion: '2.15.0',
103-
currentRouteName: 'project-version.classes.class',
104-
classModelName: 'Component',
105-
moduleModelName: null,
106-
namespaceModelName: null,
94+
currentURL: '/ember/2.15/classes/Component',
10795
currentAnchor: '#didInsertElement',
10896
});
10997

@@ -115,10 +103,7 @@ module('Unit | Controller | project version', function (hooks) {
115103
project: 'ember-data',
116104
targetVersion: '3.28.0',
117105
currentVersion: '4.0.0',
118-
currentRouteName: 'project-version.classes.class',
119-
classModelName: 'Adapter',
120-
moduleModelName: null,
121-
namespaceModelName: null,
106+
currentURL: '/ember-data/4.0/classes/Adapter',
122107
currentAnchor: '',
123108
});
124109

@@ -128,10 +113,7 @@ module('Unit | Controller | project version', function (hooks) {
128113
project: 'ember-data',
129114
targetVersion: '4.0.0',
130115
currentVersion: '3.28.0',
131-
currentRouteName: 'project-version.classes.class',
132-
classModelName: 'DS.Adapter',
133-
moduleModelName: null,
134-
namespaceModelName: null,
116+
currentURL: '/ember-data/3.28/classes/DS.Adapter',
135117
currentAnchor: '',
136118
});
137119

0 commit comments

Comments
 (0)