Skip to content

Commit 9cc3275

Browse files
authored
Merge pull request #948 from ember-learn/route-action-helper
remove ember-route-action-helper
2 parents 58c905a + cc5eae8 commit 9cc3275

File tree

5 files changed

+110
-146
lines changed

5 files changed

+110
-146
lines changed

app/controllers/project-version.js

Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { action, computed, set } from '@ember/object';
33
import { inject as service } from '@ember/service';
44
import { readOnly, alias } from '@ember/object/computed';
5-
import Controller from '@ember/controller';
5+
import Controller, { inject as controller } from '@ember/controller';
66
import { A } from '@ember/array';
77
import values from 'lodash.values';
88
import groupBy from 'lodash.groupby';
@@ -19,6 +19,16 @@ export default class ProjectVersionController extends Controller {
1919
@service
2020
project;
2121

22+
@service router;
23+
@service('project') projectService;
24+
25+
@controller('project-version.classes.class') classController;
26+
@controller('project-version.modules.module') moduleController;
27+
@controller('project-version.namespaces.namespace') namespaceController;
28+
@controller('project-version.classes.class.methods') methodsController;
29+
@controller('project-version.classes.class.events') eventsController;
30+
@controller('project-version.classes.class.properties') propertiesController;
31+
2232
@alias('filterData.sideNav.showPrivate')
2333
showPrivateClasses;
2434

@@ -128,4 +138,102 @@ export default class ProjectVersionController extends Controller {
128138
togglePrivateClasses() {
129139
set(this, 'showPrivateClasses', !this.showPrivateClasses);
130140
}
141+
142+
@action
143+
updateProject(project, ver /*, component */) {
144+
let projectVersionID = ver.compactVersion;
145+
let endingRoute;
146+
switch (this.router.currentRouteName) {
147+
case 'project-version.classes.class': {
148+
let className = this._getEncodedNameForCurrentClass();
149+
endingRoute = `classes/${className}`;
150+
break;
151+
}
152+
case 'project-version.classes.class.index': {
153+
let className = this._getEncodedNameForCurrentClass();
154+
endingRoute = `classes/${className}`;
155+
break;
156+
}
157+
case 'project-version.modules.module.index': {
158+
let moduleName = encodeURIComponent(this.moduleController.model.name);
159+
endingRoute = `modules/${moduleName}`;
160+
break;
161+
}
162+
case 'project-version.namespaces.namespace.index': {
163+
let namespaceName = this.namespaceController.model.name;
164+
endingRoute = `namespaces/${namespaceName}`;
165+
break;
166+
}
167+
case 'project-version.classes.class.methods.index': {
168+
let className = this._getEncodedNameForCurrentClass();
169+
endingRoute = `classes/${className}/methods`;
170+
break;
171+
}
172+
case 'project-version.classes.class.events.index': {
173+
let className = this._getEncodedNameForCurrentClass();
174+
endingRoute = `classes/${className}/events`;
175+
break;
176+
}
177+
case 'project-version.classes.class.properties.index': {
178+
let className = this._getEncodedNameForCurrentClass();
179+
endingRoute = `classes/${className}/properties`;
180+
break;
181+
}
182+
case 'project-version.classes.class.methods.method': {
183+
let className = this._getEncodedNameForCurrentClass();
184+
let methodName = this.methodsController.anchor;
185+
endingRoute = `classes/${className}/methods/${methodName}?anchor=${methodName}`;
186+
break;
187+
}
188+
case 'project-version.classes.class.events.event': {
189+
let className = this._getEncodedNameForCurrentClass();
190+
let eventName = this.eventsController.anchor;
191+
endingRoute = `classes/${className}/events/${eventName}?anchor=${eventName}`;
192+
break;
193+
}
194+
case 'project-version.classes.class.properties.property': {
195+
let className = this._getEncodedNameForCurrentClass();
196+
let propertyName = this.propertiesController.anchor;
197+
endingRoute = `classes/${className}/properties/${propertyName}?anchor=${propertyName}`;
198+
break;
199+
}
200+
default:
201+
endingRoute = '';
202+
break;
203+
}
204+
// if the user is navigating to/from api versions >= 2.16, take them
205+
// to the home page instead of trying to translate the url
206+
let shouldConvertPackages = this._shouldConvertPackages(
207+
ver,
208+
this.projectService.version
209+
);
210+
let isEmberProject = project === 'ember';
211+
212+
if (!isEmberProject || !shouldConvertPackages) {
213+
this.router.transitionTo(
214+
`/${project}/${projectVersionID}/${endingRoute}`
215+
);
216+
} else {
217+
this.router.transitionTo(`/${project}/${projectVersionID}`);
218+
}
219+
}
220+
221+
_getEncodedNameForCurrentClass() {
222+
// escape any reserved characters for url, like slashes
223+
return encodeURIComponent(this.classController.model.get('name'));
224+
}
225+
226+
// Input some version info, returns a boolean based on
227+
// whether the user is switching versions for a 2.16 docs release or later.
228+
// The urls for pre-2.16 classes and later packages are quite different
229+
_shouldConvertPackages(targetVer, previousVer) {
230+
let targetVersion = getCompactVersion(targetVer.id);
231+
let previousVersion = getCompactVersion(previousVer);
232+
let previousComparison = semverCompare(previousVersion, '2.16');
233+
let targetComparison = semverCompare(targetVersion, '2.16');
234+
return (
235+
(previousComparison < 0 && targetComparison >= 0) ||
236+
(previousComparison >= 0 && targetComparison < 0)
237+
);
238+
}
131239
}

app/routes/project-version.js

Lines changed: 0 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import { action } from '@ember/object';
21
import { inject as service } from '@ember/service';
32
import Route from '@ember/routing/route';
43
import semverCompare from 'semver-compare';
5-
import getCompactVersion from 'ember-api-docs/utils/get-compact-version';
64
import getFullVersion from 'ember-api-docs/utils/get-full-version';
75
import getLastVersion from 'ember-api-docs/utils/get-last-version';
86
import config from 'ember-api-docs/config/environment';
@@ -132,122 +130,13 @@ export default class ProjectVersionRoute extends Route {
132130
}
133131
}
134132

135-
_getEncodedNameForCurrentClass() {
136-
// escape any reserved characters for url, like slashes
137-
return encodeURIComponent(
138-
this.modelFor('project-version.classes.class').get('name')
139-
);
140-
}
141-
142133
serialize(model) {
143134
return {
144135
project: model.get('project.id'),
145136
project_version: model.get('compactVersion'),
146137
};
147138
}
148139

149-
@action
150-
updateProject(project, ver /*, component */) {
151-
let projectVersionID = ver.compactVersion;
152-
let endingRoute;
153-
switch (this.router.currentRouteName) {
154-
case 'project-version.classes.class': {
155-
let className = this._getEncodedNameForCurrentClass();
156-
endingRoute = `classes/${className}`;
157-
break;
158-
}
159-
case 'project-version.classes.class.index': {
160-
let className = this._getEncodedNameForCurrentClass();
161-
endingRoute = `classes/${className}`;
162-
break;
163-
}
164-
case 'project-version.modules.module.index': {
165-
let moduleName = encodeURIComponent(
166-
this.paramsFor('project-version.modules.module').module
167-
);
168-
endingRoute = `modules/${moduleName}`;
169-
break;
170-
}
171-
case 'project-version.namespaces.namespace.index': {
172-
let namespaceName = this.paramsFor(
173-
'project-version.namespaces.namespace'
174-
).namespace;
175-
endingRoute = `namespaces/${namespaceName}`;
176-
break;
177-
}
178-
case 'project-version.classes.class.methods.index': {
179-
let className = this._getEncodedNameForCurrentClass();
180-
endingRoute = `classes/${className}/methods`;
181-
break;
182-
}
183-
case 'project-version.classes.class.events.index': {
184-
let className = this._getEncodedNameForCurrentClass();
185-
endingRoute = `classes/${className}/events`;
186-
break;
187-
}
188-
case 'project-version.classes.class.properties.index': {
189-
let className = this._getEncodedNameForCurrentClass();
190-
endingRoute = `classes/${className}/properties`;
191-
break;
192-
}
193-
case 'project-version.classes.class.methods.method': {
194-
let className = this._getEncodedNameForCurrentClass();
195-
let methodName = this.paramsFor(
196-
'project-version.classes.class.methods.method'
197-
).method;
198-
endingRoute = `classes/${className}/methods/${methodName}?anchor=${methodName}`;
199-
break;
200-
}
201-
case 'project-version.classes.class.events.event': {
202-
let className = this._getEncodedNameForCurrentClass();
203-
let eventName = this.paramsFor(
204-
'project-version.classes.class.events.event'
205-
).event;
206-
endingRoute = `classes/${className}/events/${eventName}?anchor=${eventName}`;
207-
break;
208-
}
209-
case 'project-version.classes.class.properties.property': {
210-
let className = this._getEncodedNameForCurrentClass();
211-
let propertyName = this.paramsFor(
212-
'project-version.classes.class.properties.property'
213-
).property;
214-
endingRoute = `classes/${className}/properties/${propertyName}?anchor=${propertyName}`;
215-
break;
216-
}
217-
default:
218-
endingRoute = '';
219-
break;
220-
}
221-
// if the user is navigating to/from api versions >= 2.16, take them
222-
// to the home page instead of trying to translate the url
223-
let shouldConvertPackages = this.shouldConvertPackages(
224-
ver,
225-
this.projectService.version
226-
);
227-
let isEmberProject = project === 'ember';
228-
if (!isEmberProject || !shouldConvertPackages) {
229-
this.router.transitionTo(
230-
`/${project}/${projectVersionID}/${endingRoute}`
231-
);
232-
} else {
233-
this.router.transitionTo(`/${project}/${projectVersionID}`);
234-
}
235-
}
236-
237-
// Input some version info, returns a boolean based on
238-
// whether the user is switching versions for a 2.16 docs release or later.
239-
// The urls for pre-2.16 classes and later packages are quite different
240-
shouldConvertPackages(targetVer, previousVer) {
241-
let targetVersion = getCompactVersion(targetVer.id);
242-
let previousVersion = getCompactVersion(previousVer);
243-
let previousComparison = semverCompare(previousVersion, '2.16');
244-
let targetComparison = semverCompare(targetVersion, '2.16');
245-
return (
246-
(previousComparison < 0 && targetComparison >= 0) ||
247-
(previousComparison >= 0 && targetComparison < 0)
248-
);
249-
}
250-
251140
/**
252141
splits the first encoded revision string in the list and takes the string after the version (which is the encoded name), then decodes the result.
253142
*/

app/templates/project-version.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<div class="select-container">
66
<PowerSelect
7-
@onChange={{route-action "updateProject" this.activeProject}}
7+
@onChange={{fn this.updateProject this.activeProject}}
88
@options={{this.projectVersions}}
99
@selected={{this.selectedProjectVersion}}
1010
@ariaLabel="Select a version"

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@
9797
"ember-qunit": "^5.1.5",
9898
"ember-resolver": "^8.0.3",
9999
"ember-rfc176-data": "^0.3.17",
100-
"ember-route-action-helper": "^2.0.8",
101100
"ember-showdown-shiki": "^1.2.1",
102101
"ember-sinon": "^4.1.1",
103102
"ember-source": "~3.28.8",

pnpm-lock.yaml

Lines changed: 0 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)