ENH: Collection Edit (parity with reading) (#48)

This commit is contained in:
Matthew Ryan Dillon 2017-11-30 15:51:16 -07:00 committed by GitHub
parent bfae4422f4
commit cb3bc081a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 337 additions and 121 deletions

View file

@ -2,13 +2,57 @@ import Ember from 'ember';
import Changeset from 'ember-changeset';
import lookupValidator from 'ember-changeset-validations';
const { Component } = Ember;
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');
this.set('changeset', new Changeset(model, lookupValidator(validations), validations));
let changesets = {};
changesets['new'] = [];
changesets['delete'] = [];
changesets['hasMany'] = [];
changesets['model'] = new Changeset(model,
lookupValidator(validations['collection']),
validations['collection']);
// TODO: gross, just grab these data in the route.
model.get('collectionSpecies').then((collectionSpecies) => {
let collectionSpeciesChangesets = [];
collectionSpecies.forEach((cs) => {
const changeset = new Changeset(cs,
lookupValidator(validations['collectionSpecies']),
validations['collectionSpecies']);
collectionSpeciesChangesets.push({ model: cs, changeset: changeset });
});
changesets['hasMany']['collectionSpecies'] = collectionSpeciesChangesets;
this.set('changesets', changesets);
});
},
actions: {
addCollectionSpecies() {
const store = this.get('store');
let changesets = this.get('changesets');
const validations = this.get('validations');
const collection = this.get('model');
const cs = store.createRecord('collection-species', { collection: collection });
collection.get('collectionSpecies').pushObject(cs);
changesets['new'].pushObject(cs);
const changeset = new Changeset(cs,
lookupValidator(validations['collectionSpecies']),
validations['collectionSpecies']);
changesets['hasMany']['collectionSpecies'].pushObject({ model: cs, changeset: changeset });
},
deleteCollectionSpecies(changesetRecord) {
let changesets = this.get('changesets');
changesets['delete'].pushObject(changesetRecord.model);
changesets['hasMany']['collectionSpecies'].removeObject(changesetRecord);
},
},
});

View file

@ -9,6 +9,7 @@ export default Component.extend({
columns: [
{ label: 'Project', valuePath: 'project.name', },
{ label: 'IACUC', valuePath: 'project.iacucNumber', },
{ label: 'Species', valuePath: 'speciesAndCounts', },
{ label: 'Region', valuePath: 'studyLocation.site.region.name', },
{ label: 'Site', valuePath: 'studyLocation.site.name', },
{ label: 'Study Location', valuePath: 'studyLocation.code', },