import Ember from 'ember'; import Changeset from 'ember-changeset'; import lookupValidator from 'ember-changeset-validations'; const { Component, inject: { service } } = Ember; export default Component.extend({ store: service(), init() { this._super(...arguments); const model = this.get('model'); const validations = this.get('validations'); const hasMany = this.get('hasMany'); let changesets = {}; changesets['new'] = []; changesets['delete'] = []; changesets['hasMany'] = []; changesets['model'] = new Changeset(model, lookupValidator(validations['collection']), validations['collection']); hasMany.forEach((hasMany) => { let relatedChangesets = []; let validation = validations[hasMany]; const related = model.get(hasMany); related.forEach((r) => { const changeset = new Changeset(r, lookupValidator(validation), validation); relatedChangesets.push({ model: r, changeset: changeset }); }); changesets['hasMany'][hasMany] = relatedChangesets; }); this.set('changesets', changesets); }, actions: { addHasMany(modelName, relatedName) { const store = this.get('store'); let changesets = this.get('changesets'); const validations = this.get('validations'); const validation = validations[relatedName]; const model = this.get('model'); const related = store.createRecord(modelName, { collection: model }); model.get(relatedName).pushObject(related); changesets['new'].pushObject(related); const changeset = new Changeset(related, lookupValidator(validation), validation); changesets['hasMany'][relatedName].pushObject({ model: related, changeset: changeset }); }, deleteHasMany(changesetRecord, relatedName) { let changesets = this.get('changesets'); changesets['delete'].pushObject(changesetRecord.model); changesets['hasMany'][relatedName].removeObject(changesetRecord); }, updateDatasheet(changeset, event) { changeset.set('datasheet', event.target.files[0]); }, }, });