ccdb-web/app/components/collection/create-container.js

62 lines
2.2 KiB
JavaScript

import Component from '@ember/component';
import { inject as service } from '@ember/service';
import Changeset from 'ember-changeset';
import lookupValidator from 'ember-changeset-validations';
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]);
},
},
});