Skip to content

Commit 0761911

Browse files
committed
Add handler example for create/update
1 parent 5b73ace commit 0761911

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Create handler for serialization of any record
2+
import { recordIdentifierFor } from '@ember-data/store';
3+
import { serializeResources } from '@ember-data/json-api/request';
4+
5+
const updatesHandler = {
6+
MUTATION_OPS = new Set(['createRecord', 'updateRecord']);
7+
request(context, next) {
8+
if (!MUTATION_OPS.has(context.request.op)) {
9+
// Not a mutation, do nothing
10+
return next(context.request);
11+
}
12+
13+
if (context.request.body) {
14+
// body is already set, do nothing
15+
return next(context.request);
16+
}
17+
18+
const { data, store } = context.request;
19+
const newRequestParams = Object.assign({}, context.request, {
20+
body: serializeResources(
21+
store.cache,
22+
recordIdentifierFor(data.record)
23+
)
24+
});
25+
return next(newRequestParams);
26+
}
27+
}
28+
29+
// Add this handler to your request manager
30+
export default class extends RequestManager {
31+
constructor(args) {
32+
super(args);
33+
this.use([updatesHandler, Fetch]);
34+
this.useCache(CacheHandler);
35+
}
36+
}
37+
38+
// then in your app just use createRecord builder and let handler care about serialization
39+
import { createRecord } from '@ember-data/json-api/request';
40+
41+
const request = createRecord(record);
42+
await this.store.request(request);
43+
44+
// or overwrite body if you need to, handler will not touch it
45+
import { createRecord } from '@ember-data/json-api/request';
46+
47+
const record = this.store.createRecord('feature', { name: "rest-enabled" });
48+
const request = createRecord(record);
49+
// For some reason your endpoint for 'features' is not JSON:API compliant
50+
request.body = JSON.stringify({ name: 'rest-enabled' })
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { recordIdentifierFor } from '@ember-data/store';
2+
import { createRecord, serializeResources } from '@ember-data/json-api/request';
3+
4+
const record = this.store.createRecord('user', {});
5+
const request = createRecord(record);
6+
// You can in place add body to request options
7+
request.body = JSON.stringify(
8+
serializeResources(
9+
this.store.cache,
10+
recordIdentifierFor(record)
11+
)
12+
);
13+
14+
await this.store.request(request);
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Create handler for serialization of any record
2+
import { recordIdentifierFor } from '@ember-data/store';
3+
import { serializeResources } from '@ember-data/json-api/request';
4+
5+
const updatesHandler = {
6+
MUTATION_OPS = new Set(['createRecord', 'updateRecord']);
7+
request(context, next) {
8+
if (!MUTATION_OPS.has(context.request.op)) {
9+
// Not a mutation, do nothing
10+
return next(context.request);
11+
}
12+
13+
if (context.request.body) {
14+
// body is already set, do nothing
15+
return next(context.request);
16+
}
17+
18+
const { data, store } = context.request;
19+
const newRequestParams = Object.assign({}, context.request, {
20+
body: serializeResources(
21+
store.cache,
22+
recordIdentifierFor(data.record)
23+
)
24+
});
25+
return next(newRequestParams);
26+
}
27+
}
28+
29+
// Add this handler to your request manager
30+
export default class extends RequestManager {
31+
constructor(args) {
32+
super(args);
33+
this.use([updatesHandler, Fetch]);
34+
this.useCache(CacheHandler);
35+
}
36+
}
37+
38+
// then in your app just use updateRecord builder and let handler care about serialization
39+
import { updateRecord } from '@ember-data/json-api/request';
40+
41+
const request = updateRecord(record);
42+
await this.store.request(request);
43+
44+
// or overwrite body if you need to, handler will not touch it
45+
import { updateRecord } from '@ember-data/rest/request';
46+
47+
const record = this.store.updateRecord('feature', { name: "rest-enabled" });
48+
const request = updateRecord(record);
49+
// For some reason your endpoint for 'features' is not JSON:API compliant
50+
request.body = JSON.stringify({ name: 'rest-enabled' })

0 commit comments

Comments
 (0)