Skip to content

Commit e750dd0

Browse files
authored
Merge pull request #998 from ember-learn/kg-modernize
2 parents b438b42 + 69adf11 commit e750dd0

6 files changed

Lines changed: 52 additions & 110 deletions

File tree

app/controllers/project-version.js

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
/* eslint-disable ember/no-computed-properties-in-native-classes */
2-
import { action, computed, set } from '@ember/object';
1+
import { action } from '@ember/object';
32
import { service } from '@ember/service';
4-
import { readOnly, alias } from '@ember/object/computed';
53
import Controller from '@ember/controller';
6-
import { A } from '@ember/array';
74
import values from 'lodash.values';
85
import groupBy from 'lodash.groupby';
96
import semverCompare from 'semver-compare';
@@ -25,35 +22,30 @@ export default class ProjectVersionController extends Controller {
2522
@service router;
2623
@service('project') projectService;
2724

28-
@alias('filterData.sideNav.showPrivate')
29-
showPrivateClasses;
25+
get showPrivateClasses() {
26+
return this.filterData.showPrivateClasses;
27+
}
3028

31-
@computed('model')
3229
get classesIDs() {
3330
return this.getRelationshipIDs('classes');
3431
}
3532

36-
@computed('model')
3733
get publicClassesIDs() {
3834
return this.getRelationshipIDs('public-classes');
3935
}
4036

41-
@computed('model')
4237
get namespaceIDs() {
4338
return this.getRelationshipIDs('namespaces');
4439
}
4540

46-
@computed('model')
4741
get publicNamespaceIDs() {
4842
return this.getRelationshipIDs('public-namespaces');
4943
}
5044

51-
@computed('model.id')
5245
get moduleIDs() {
5346
return this.getModuleRelationships(this.model.id, 'modules');
5447
}
5548

56-
@computed('model.id')
5749
get publicModuleIDs() {
5850
return this.getModuleRelationships(this.model.id, 'public-modules');
5951
}
@@ -73,30 +65,25 @@ export default class ProjectVersionController extends Controller {
7365
getRelationshipIDs(relationship) {
7466
const projectId = this.model.project.id;
7567
const classes = this.model.hasMany(relationship);
76-
const sorted = A(classes.ids()).sort();
68+
const sorted = Array.from(classes.ids()).sort();
7769
//ids come in as ember-2.16.0-@ember/object/promise-proxy-mixin or ember-4.12.0-alpha.23-@ember/object/promise-proxy-mixin
7870
//so we remove the project name and version (including pre-release) to get the class name
79-
return A(sorted)
80-
.toArray()
81-
.map((id) => {
82-
// Remove project name prefix
83-
const withoutProject = id.replace(`${projectId}-`, '');
84-
// Remove version (e.g., 2.16.0 or 4.12.0-alpha.23) and the following dash
85-
return withoutProject.replace(/^\d+\.\d+\.\d+(?:-[a-z]+\.\d+)?-/i, '');
86-
});
71+
return sorted.map((id) => {
72+
// Remove project name prefix
73+
const withoutProject = id.replace(`${projectId}-`, '');
74+
// Remove version (e.g., 2.16.0 or 4.12.0-alpha.23) and the following dash
75+
return withoutProject.replace(/^\d+\.\d+\.\d+(?:-[a-z]+\.\d+)?-/i, '');
76+
});
8777
}
8878

89-
@computed('showPrivateClasses', 'classesIDs', 'publicClassesIDs')
9079
get shownClassesIDs() {
9180
return this.showPrivateClasses ? this.classesIDs : this.publicClassesIDs;
9281
}
9382

94-
@computed('showPrivateClasses', 'moduleIDs', 'publicModuleIDs')
9583
get shownModuleIDs() {
9684
return this.showPrivateClasses ? this.moduleIDs : this.publicModuleIDs;
9785
}
9886

99-
@computed('showPrivateClasses', 'namespaceIDs', 'publicNamespaceIDs')
10087
get shownNamespaceIDs() {
10188
return this.showPrivateClasses
10289
? this.namespaceIDs
@@ -120,20 +107,21 @@ export default class ProjectVersionController extends Controller {
120107
return values(groupedVersions).map((groupedVersion) => groupedVersion[0]);
121108
}
122109

123-
@alias('project.urlVersion')
124-
urlVersion;
110+
get urlVersion() {
111+
return this.projectService.getUrlVersion();
112+
}
125113

126-
@computed('projectVersions.[]', 'model.version')
127114
get selectedProjectVersion() {
128115
return this.projectVersions.filter((pV) => pV.id === this.model.version)[0];
129116
}
130117

131-
@readOnly('model.project.id')
132-
activeProject;
118+
get activeProject() {
119+
return this.model.project.id;
120+
}
133121

134122
@action
135123
togglePrivateClasses() {
136-
set(this, 'showPrivateClasses', !this.showPrivateClasses);
124+
this.filterData.togglePrivateClasses();
137125
}
138126

139127
@action

app/controllers/project-version/classes/class.js

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
// eslint-disable-next-line ember/no-computed-properties-in-native-classes
2-
import { action, computed, set, get } from '@ember/object';
1+
import { action } from '@ember/object';
32
import { service } from '@ember/service';
43
import Controller from '@ember/controller';
5-
import { A } from '@ember/array';
64
import { capitalize } from '@ember/string';
75
import { isEmpty } from '@ember/utils';
86
import { parentName } from '../../../utils/parent-name';
@@ -26,19 +24,16 @@ export default class ClassController extends Controller {
2624
@service
2725
metaStore;
2826

29-
@computed(
30-
'filterData.{showInherited,showProtected,showPrivate,showDeprecated}',
31-
)
3227
get visibilityFilter() {
3328
let appliedFilters = filterTypes
3429
.reduce((filters, filter) => {
35-
let filterValue = get(this, `filterData.show${capitalize(filter)}`)
30+
let filterValue = this.filterData[`show${capitalize(filter)}`]
3631
? filter
3732
: null;
3833
filters.push(filterValue);
3934
return filters;
40-
}, A())
41-
.compact();
35+
}, [])
36+
.filter(Boolean);
4237

4338
if (isEmpty(appliedFilters)) {
4439
return DEFAULT_FILTER;
@@ -48,30 +43,27 @@ export default class ClassController extends Controller {
4843
}
4944

5045
set visibilityFilter(value = '') {
51-
let filters = A(value.split(','));
46+
let filters = value.split(',');
5247
filterTypes.forEach((filter) => {
53-
let enabled = filters.indexOf(filter) > -1;
54-
set(this, `filterData.show${capitalize(filter)}`, enabled);
48+
this.filterData[`show${capitalize(filter)}`] =
49+
filters.indexOf(filter) > -1;
5550
});
5651
}
5752

58-
@computed('legacyModuleMappings.mappings', 'model.{module,name}')
5953
get hasImportExample() {
6054
return this.legacyModuleMappings.hasClassMapping(
6155
this.model.name,
6256
this.model.module,
6357
);
6458
}
6559

66-
@computed('legacyModulemappings.mappings', 'model.{module,name}')
6760
get module() {
6861
return this.legacyModuleMappings.getModule(
6962
this.model.name,
7063
this.model.module,
7164
);
7265
}
7366

74-
@computed('metaStore.availableProjectVersions', 'model.project.id')
7567
get allVersions() {
7668
return this.metaStore.availableProjectVersions[this.model.project.id];
7769
}

app/controllers/project-version/modules/module.js

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// eslint-disable-next-line ember/no-computed-properties-in-native-classes
2-
import { computed } from '@ember/object';
31
import { service } from '@ember/service';
4-
// eslint-disable-next-line ember/no-computed-properties-in-native-classes
5-
import { alias } from '@ember/object/computed';
62
import ClassController from '../classes/class';
73
import uniq from 'lodash.uniq';
84
import union from 'lodash.union';
@@ -11,33 +7,29 @@ export default class ModuleController extends ClassController {
117
@service
128
filterData;
139

14-
@alias('filterData.sideNav.showPrivate')
15-
showPrivateClasses;
10+
get showPrivateClasses() {
11+
return this.filterData.showPrivateClasses;
12+
}
1613

17-
@computed('model.submodules')
1814
get submodules() {
1915
return Object.keys(this.model.submodules);
2016
}
2117

22-
@computed('model.namespaces')
2318
get namespaces() {
2419
return Object.keys(this.model.namespaces);
2520
}
2621

27-
@computed('model.{privateclasses,publicclasses}', 'showPrivateClasses')
2822
get classes() {
2923
if (this.showPrivateClasses) {
3024
return this.model.publicclasses.concat(this.model.privateclasses);
3125
}
3226
return this.model.publicclasses;
3327
}
3428

35-
@computed('classes', 'namespaces')
3629
get classesAndNamespaces() {
3730
return uniq(union(this.namespaces, this.classes).sort(), true);
3831
}
3932

40-
@computed('model.{allstaticfunctions,staticfunctions}', 'showPrivateClasses')
4133
get functionHeadings() {
4234
if (this.model.allstaticfunctions && this.showPrivateClasses) {
4335
return Object.keys(this.model.allstaticfunctions).sort();
@@ -47,7 +39,6 @@ export default class ModuleController extends ClassController {
4739
return {};
4840
}
4941

50-
@computed('model.{allstaticfunctions,staticfunctions}', 'showPrivateClasses')
5142
get functions() {
5243
if (this.showPrivateClasses && this.model.allstaticfunctions) {
5344
return this.model.allstaticfunctions;

app/models/class.js

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,5 @@
1-
// eslint-disable-next-line ember/no-computed-properties-in-native-classes
2-
import { computed } from '@ember/object';
31
import Model, { belongsTo, attr } from '@ember-data/model';
42

5-
const projectNameFromClassName = (key) => {
6-
return computed(key, 'project.id', function () {
7-
const value = this.get(key) || '';
8-
if (value.indexOf('Ember.') > -1) {
9-
return 'ember';
10-
}
11-
12-
if (value.indexOf('DS.') > 1) {
13-
return 'ember-data';
14-
}
15-
16-
return this.project.id;
17-
});
18-
};
19-
20-
// ideally this computed property would not be needed and we'd have extendsVersion, extendsProject attrs from json-api-docs
21-
const guessVersionFor = (key) => {
22-
return computed(
23-
key,
24-
'extendedClassProjectName',
25-
'project.id',
26-
'projectVersion.version',
27-
function () {
28-
if (this.extendedClassProjectName === this.project.id) {
29-
return this.projectVersion.version;
30-
}
31-
32-
// try linking to latest version at least
33-
return 'release';
34-
},
35-
);
36-
};
37-
383
export default class Class extends Model {
394
@attr()
405
name;
@@ -81,24 +46,18 @@ export default class Class extends Model {
8146
@belongsTo('project-version', { inverse: 'classes' })
8247
projectVersion;
8348

84-
@computed('projectVersion.id')
8549
get project() {
8650
return this.projectVersion.get('project');
8751
}
8852

89-
@projectNameFromClassName('extends')
90-
extendedClassProjectName;
91-
92-
@guessVersionFor('extends')
93-
extendedClassVersion;
94-
95-
@projectNameFromClassName('uses')
96-
usedClassProjectName;
53+
get extendedClassProjectName() {
54+
return this.projectNameFromClassName(this['extends']);
55+
}
9756

98-
@guessVersionFor('uses')
99-
usedClassVersion;
57+
get usedClassProjectName() {
58+
return this.projectNameFromClassName(this.uses);
59+
}
10060

101-
@computed('extends')
10261
get extendedClassShortName() {
10362
let extendedClassName = this['extends'];
10463
if (extendedClassName.substr(0, 6) === 'Ember.') {
@@ -107,7 +66,6 @@ export default class Class extends Model {
10766
return extendedClassName;
10867
}
10968

110-
@computed('project.id', 'uses')
11169
get usesObjects() {
11270
return this.uses.map((className) => ({
11371
name: className,
@@ -121,4 +79,17 @@ export default class Class extends Model {
12179
: this.project.id,
12280
}));
12381
}
82+
83+
projectNameFromClassName(val) {
84+
const value = val ?? '';
85+
if (value.indexOf('Ember.') > -1) {
86+
return 'ember';
87+
}
88+
89+
if (value.indexOf('DS.') > 1) {
90+
return 'ember-data';
91+
}
92+
93+
return this.project.id;
94+
}
12495
}

app/services/filter-data.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ export default class FilterDataService extends Service {
66
@tracked showProtected = false;
77
@tracked showPrivate = false;
88
@tracked showDeprecated = false;
9+
@tracked showPrivateClasses = false;
910

10-
sideNav = {
11-
showPrivate: false,
12-
};
11+
togglePrivateClasses() {
12+
this.showPrivateClasses = !this.showPrivateClasses;
13+
}
1314
}

app/services/meta-store.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import Service from '@ember/service';
22
import { isPresent } from '@ember/utils';
3-
import { set } from '@ember/object';
43
import { A } from '@ember/array';
54
import getCompactVersion from 'ember-api-docs/utils/get-compact-version';
65
import getLastVersion from 'ember-api-docs/utils/get-last-version';
@@ -17,7 +16,7 @@ export default class MetaStoreService extends Service {
1716
let projectRevMap = this.projectRevMap;
1817
if (!isPresent(projectRevMap[projectVersionKey])) {
1918
projectRevMap[projectVersionKey] = projectRevDoc;
20-
set(this, 'projectRevMap', projectRevMap);
19+
this.projectRevMap = projectRevMap;
2120
}
2221
}
2322

0 commit comments

Comments
 (0)