Skip to content

Commit 027f708

Browse files
committed
Auto merge of #2379 - Turbo87:readme, r=locks
Simplify README loading code This converts the README loading code into an ember-concurrency task in the controller, and removes the observer on the `readme` property by calling the code in the task directly. r? @locks
2 parents a54c7e1 + 0db37c8 commit 027f708

File tree

2 files changed

+27
-29
lines changed

2 files changed

+27
-29
lines changed

app/controllers/crate/version.js

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import { inject as service } from '@ember/service';
33
import Controller from '@ember/controller';
44
import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';
55
import ArrayProxy from '@ember/array/proxy';
6-
// eslint-disable-next-line ember/no-observers
7-
import { computed, observer } from '@ember/object';
6+
import { computed } from '@ember/object';
87
import moment from 'moment';
8+
import { task } from 'ember-concurrency';
99

1010
const NUM_VERSIONS = 5;
1111

@@ -157,15 +157,26 @@ export default Controller.extend({
157157
return data;
158158
}),
159159

160-
// eslint-disable-next-line ember/no-observers
161-
report: observer('crate.readme', function () {
162-
if (typeof document === 'undefined') {
163-
return;
160+
loadReadmeTask: task(function* () {
161+
if (this.currentVersion.get('readme_path')) {
162+
try {
163+
let r = yield fetch(this.currentVersion.get('readme_path'));
164+
if (r.ok) {
165+
this.crate.set('readme', yield r.text());
166+
167+
if (typeof document !== 'undefined') {
168+
setTimeout(() => {
169+
let e = document.createEvent('CustomEvent');
170+
e.initCustomEvent('hashchange', true, true);
171+
window.dispatchEvent(e);
172+
});
173+
}
174+
} else {
175+
this.crate.set('readme', null);
176+
}
177+
} catch (error) {
178+
this.crate.set('readme', null);
179+
}
164180
}
165-
setTimeout(() => {
166-
let e = document.createEvent('CustomEvent');
167-
e.initCustomEvent('hashchange', true, true);
168-
window.dispatchEvent(e);
169-
});
170181
}),
171182
});

app/routes/crate/version.js

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import Route from '@ember/routing/route';
44
import { inject as service } from '@ember/service';
55
import prerelease from 'semver/functions/prerelease';
66

7-
import fetch from 'fetch';
8-
97
import ajax from '../../utils/ajax';
108

119
export default Route.extend({
@@ -93,23 +91,12 @@ export default Route.extend({
9391
this.flashMessages.queue(`Version '${params.version_num}' of crate '${crate.get('name')}' does not exist`);
9492
}
9593

96-
const result = version || versions.find(version => version.get('num') === maxVersion) || versions.objectAt(0);
97-
98-
if (result.get('readme_path')) {
99-
fetch(result.get('readme_path'))
100-
.then(async r => {
101-
if (r.ok) {
102-
crate.set('readme', await r.text());
103-
} else {
104-
crate.set('readme', null);
105-
}
106-
})
107-
.catch(() => {
108-
crate.set('readme', null);
109-
});
110-
}
94+
return version || versions.find(version => version.get('num') === maxVersion) || versions.objectAt(0);
95+
},
11196

112-
return result;
97+
setupController(controller) {
98+
this._super(...arguments);
99+
controller.loadReadmeTask.perform();
113100
},
114101

115102
serialize(model) {

0 commit comments

Comments
 (0)