Skip to content

Commit a3b972d

Browse files
authored
Merge pull request #142 from pattisdr/feature/edit-preprint-changes
Feature/Ember-OSF Edit Preprint Changes [PREP-137]
2 parents 1ae9823 + 0687056 commit a3b972d

28 files changed

+234
-6
lines changed

addon/adapters/contributor.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export default OsfAdapter.extend({
2828

2929
if (!sendEmail) {
3030
requestUrl += `&send_email=false`;
31+
} else if (sendEmail === 'preprint') {
32+
requestUrl += `&send_email=preprint`;
3133
}
3234

3335
return requestUrl;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import OsfAdapter from './osf-adapter';
2+
3+
export default OsfAdapter.extend({
4+
});

addon/adapters/preprint.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import OsfAdapter from './osf-adapter';
2+
3+
export default OsfAdapter.extend({
4+
// Override _buildRelationshipURL on ember-osf. Instead of relationship link, need a PATCH to self link
5+
_buildRelationshipURL(snapshot) {
6+
if (snapshot.record.get('links.self')) {
7+
return snapshot.record.get('links.self');
8+
}
9+
return null;
10+
},
11+
// Override _doRelatedRequest on ember-osf. Need to serializer preprint instead of file.
12+
_doRelatedRequest(store, snapshot, relatedSnapshots, relationship, url) {
13+
return this.ajax(url, 'PATCH', {
14+
data: store.serializerFor('preprint').serialize(snapshot),
15+
isBulk: false
16+
});
17+
}
18+
19+
});

addon/adapters/taxonomy.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import OsfAdapter from './osf-adapter';
2+
3+
export default OsfAdapter.extend({
4+
});

addon/models/node.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import Ember from 'ember';
22
import DS from 'ember-data';
3-
43
import OsfModel from './osf-model';
54

65
import FileItemMixin from 'ember-osf/mixins/file-item';
@@ -49,6 +48,9 @@ export default OsfModel.extend(FileItemMixin, {
4948
children: DS.hasMany('nodes', {
5049
inverse: 'parent'
5150
}),
51+
preprints: DS.hasMany('preprints', {
52+
inverse: 'node'
53+
}),
5254
affiliatedInstitutions: DS.hasMany('institutions', {
5355
inverse: 'nodes'
5456
}),
@@ -183,9 +185,11 @@ export default OsfModel.extend(FileItemMixin, {
183185
}).data;
184186
});
185187

186-
var emailQuery = '';
187-
if (sendEmail === false) {
188+
let emailQuery = '';
189+
if (!sendEmail) {
188190
emailQuery = '?send_email=false';
191+
} else if (sendEmail === 'preprint') {
192+
emailQuery = '?send_email=preprint';
189193
}
190194

191195
// TODO Get this working properly - should not be an ajax request in the future.

addon/models/preprint-provider.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import DS from 'ember-data';
2+
import OsfModel from './osf-model';
3+
4+
export default OsfModel.extend({
5+
name: DS.attr('string'),
6+
logo_path: DS.attr('string'),
7+
banner_path: DS.attr('string'),
8+
description: DS.attr('string'),
9+
10+
// Relationships
11+
preprints: DS.hasMany('preprint', { inverse: 'provider', async: true }),
12+
});

addon/models/preprint.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import DS from 'ember-data';
2+
import OsfModel from './osf-model';
3+
4+
/**
5+
* @module ember-preprints
6+
* @submodule models
7+
*/
8+
9+
/**
10+
* Model for OSF APIv2 preprints. This model may be used with one of several API endpoints. It may be queried directly,
11+
* or accessed via relationship fields.
12+
* For field and usage information, see:
13+
* https://api.osf.io/v2/docs/#!/v2/Preprint_List_GET
14+
* https://api.osf.io/v2/docs/#!/v2/Preprint_Detail_GET
15+
* https://api.osf.io/v2/docs/#!/v2/User_Preprints_GET
16+
* @class Preprint
17+
*/
18+
export default OsfModel.extend({
19+
title: DS.attr('string'),
20+
// TODO: May be a relationship in the future pending APIv2 changes
21+
subjects: DS.attr(),
22+
dateCreated: DS.attr('date'),
23+
datePublished: DS.attr('date'),
24+
dateModifed: DS.attr('date'),
25+
doi: DS.attr('string'),
26+
isPublished: DS.attr('boolean'),
27+
isPreprintOrphan: DS.attr('boolean'),
28+
29+
// Relationships
30+
node: DS.belongsTo('node', { inverse: null, async: true }),
31+
primaryFile: DS.belongsTo('file', { inverse: null }),
32+
provider: DS.belongsTo('preprint-provider', { inverse: 'preprints', async: true }),
33+
});

addon/models/taxonomy.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import DS from 'ember-data';
2+
import OsfModel from './osf-model';
3+
4+
/**
5+
* @module ember-preprints
6+
* @submodule models
7+
*/
8+
9+
/**
10+
* Model for OSF APIv2 preprints. This model may be used with one of several API endpoints. It may be queried directly. In the future, there will be multiple taxonomy endpoints under the same namespace.
11+
* For field and usage information, see:
12+
* https://api.osf.io/v2/docs/#!/v2/Plos_Taxonomy_GET
13+
* @class Taxonomy
14+
*/
15+
export default OsfModel.extend({
16+
text: DS.attr('string'),
17+
// TODO: Api implements this as a list field for now. This should be a relationship field in the future, when API supports it
18+
child_count: DS.attr(),
19+
parents: DS.attr()
20+
});

addon/serializers/preprint.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import OsfSerializer from './osf-serializer';
2+
import Ember from 'ember';
3+
4+
export default OsfSerializer.extend({
5+
serialize(snapshot) {
6+
// Normal OSF serializer strips out relationships. We need to add back primaryFile/node/provider for this endpoint
7+
const res = this._super(...arguments);
8+
res.data.relationships = {};
9+
for (var rel in snapshot.record._dirtyRelationships) {
10+
let relationship = Ember.String.underscore(rel);
11+
res.data.relationships[relationship] = {
12+
data: {
13+
id: snapshot.belongsTo(rel, { id: true }),
14+
type: relTypes[rel]
15+
}
16+
};
17+
}
18+
19+
if (res.data.attributes && 'subjects' in snapshot.record.changedAttributes())
20+
res.data.attributes.subjects = (snapshot.record.get('subjects') || []);
21+
return res;
22+
}
23+
24+
});
25+
26+
// Type mapping for preprint relationship fields
27+
const relTypes = {
28+
primaryFile: 'files',
29+
node: 'nodes',
30+
provider: 'providers'
31+
};

addon/serializers/taxonomy.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import OsfSerializer from './osf-serializer';
2+
3+
export default OsfSerializer.extend({
4+
});

0 commit comments

Comments
 (0)