Skip to content

Instantly share code, notes, and snippets.

@aonawale
Forked from runspired/push-deletion.js
Created July 21, 2018 21:02
Show Gist options
  • Save aonawale/f62c23cb7f8a32068ce055f1ce70e3c1 to your computer and use it in GitHub Desktop.
Save aonawale/f62c23cb7f8a32068ce055f1ce70e3c1 to your computer and use it in GitHub Desktop.
Useful Ember Data helpers
/*
notifying the store that a record has been remotely deleted and should be fully removed.
*/
function pushDeletion(store, type, id) {
let record = store.peekRecord(type, id);
if (record !== null) {
let relationships = {};
let hasRelationships = false;
record.eachRelationship((name, { kind }) => {
hasRelationships = true;
relationships[name] = {
data: kind === 'hasMany' ? [] : null
};
});
if (hasRelationships) {
store.push({
data: {
type,
id,
relationships
}
});
}
record.unloadRecord();
}
}
/*
Avoids common pitfalls and the weird undocumented special-sauce format that must be used with the built in pushPayload
*/
function pushPayload(store, modelName, rawPayload) {
let ModelClass = store.modelFor(modelName);
let serializer = store.serializerFor(modelName);
let jsonApiPayload = serializer.normalizeResponse(store, ModelClass, rawPayload, null, 'query');
return store.push(jsonApiPayload);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment