github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/ui/app/serializers/application.js (about) 1 import { copy } from 'ember-copy'; 2 import { get } from '@ember/object'; 3 import { makeArray } from '@ember/array'; 4 import JSONSerializer from 'ember-data/serializers/json'; 5 import { pluralize, singularize } from 'ember-inflector'; 6 import removeRecord from '../utils/remove-record'; 7 8 export default JSONSerializer.extend({ 9 primaryKey: 'ID', 10 11 keyForAttribute(attr) { 12 return attr.camelize().capitalize(); 13 }, 14 15 keyForRelationship(attr, relationshipType) { 16 const key = `${singularize(attr) 17 .camelize() 18 .capitalize()}ID`; 19 return relationshipType === 'hasMany' ? pluralize(key) : key; 20 }, 21 22 // Modeled after the pushPayload for ember-data/serializers/rest 23 pushPayload(store, payload) { 24 const documentHash = { 25 data: [], 26 included: [], 27 }; 28 29 Object.keys(payload).forEach(key => { 30 const modelName = this.modelNameFromPayloadKey(key); 31 const serializer = store.serializerFor(modelName); 32 const type = store.modelFor(modelName); 33 34 makeArray(payload[key]).forEach(hash => { 35 const { data, included } = serializer.normalize(type, hash, key); 36 documentHash.data.push(data); 37 if (included) { 38 documentHash.included.push(...included); 39 } 40 }); 41 }); 42 43 store.push(documentHash); 44 }, 45 46 normalizeFindAllResponse(store, modelClass) { 47 const result = this._super(...arguments); 48 this.cullStore(store, modelClass.modelName, result.data); 49 return result; 50 }, 51 52 // When records are removed server-side, and therefore don't show up in requests, 53 // the local copies of those records need to be unloaded from the store. 54 cullStore(store, type, records, storeFilter = () => true) { 55 const newRecords = copy(records).filter(record => get(record, 'id')); 56 const oldRecords = store.peekAll(type); 57 oldRecords 58 .filter(record => get(record, 'id')) 59 .filter(storeFilter) 60 .forEach(old => { 61 const newRecord = newRecords.find(record => get(record, 'id') === get(old, 'id')); 62 if (!newRecord) { 63 removeRecord(store, old); 64 } else { 65 newRecords.removeObject(newRecord); 66 } 67 }); 68 }, 69 70 modelNameFromPayloadKey(key) { 71 return singularize(key.dasherize()); 72 }, 73 });