diff --git a/app/models/characteristic.js b/app/models/characteristic.js index d896ca1..ca4c5d9 100644 --- a/app/models/characteristic.js +++ b/app/models/characteristic.js @@ -12,4 +12,5 @@ export default DS.Model.extend({ updatedBy : DS.attr('number'), deletedBy : DS.attr('number'), sortOrder : DS.attr('number'), + canEdit : DS.attr('boolean'), }); diff --git a/app/pods/protected/characteristics/controller.js b/app/pods/protected/characteristics/controller.js index be9f042..0403cc5 100644 --- a/app/pods/protected/characteristics/controller.js +++ b/app/pods/protected/characteristics/controller.js @@ -1,6 +1,6 @@ import Ember from 'ember'; export default Ember.Controller.extend({ - sortParams: ['characteristicTypeName', 'sortOrder'], + sortParams: ['characteristicTypeName', 'sortOrder', 'characteristicName'], sortedCharacteristics: Ember.computed.sort('model', 'sortParams'), }); diff --git a/app/pods/protected/characteristics/editable-row/component.js b/app/pods/protected/characteristics/editable-row/component.js new file mode 100644 index 0000000..384d254 --- /dev/null +++ b/app/pods/protected/characteristics/editable-row/component.js @@ -0,0 +1,28 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + tagName: 'tr', + + actions: { + edit: function() { + this.set('characteristicName', this.get('row.characteristicName')); + this.set('characteristicTypeName', this.get('row.characteristicTypeName')); + this.set('sortOrder', this.get('row.sortOrder')); + this.toggleProperty('isEditing'); + }, + + save: function() { + if (this.get('characteristicName') !== this.get('row.characteristicName') || + this.get('characteristicTypeName') !== this.get('row.characteristicTypeName') || + this.get('sortOrder') !== this.get('row.sortOrder')) { + this.set('row.characteristicName', this.get('characteristicName')); + this.set('row.characteristicTypeName', this.get('characteristicTypeName')); + this.set('row.sortOrder', this.get('sortOrder')); + this.get('row').save(); + } + this.toggleProperty('isEditing'); + }, + + } + +}); diff --git a/app/pods/protected/characteristics/editable-row/template.hbs b/app/pods/protected/characteristics/editable-row/template.hbs new file mode 100644 index 0000000..8230297 --- /dev/null +++ b/app/pods/protected/characteristics/editable-row/template.hbs @@ -0,0 +1,15 @@ +{{#if isEditing}} + <td>{{input value=characteristicName}}</td> + <td>{{input value=characteristicTypeName}}</td> + <td>{{input value=sortOrder}}</td> + <td {{action 'save'}}>Save</td> +{{else}} + <td>{{row.characteristicName}}</td> + <td>{{row.characteristicTypeName}}</td> + <td>{{row.sortOrder}}</td> + {{#if row.canEdit}} + <td {{action 'edit'}}>Edit</td> + {{else}} + <td></td> + {{/if}} +{{/if}} diff --git a/app/pods/protected/characteristics/template.hbs b/app/pods/protected/characteristics/template.hbs index a599cbd..12ce1c1 100644 --- a/app/pods/protected/characteristics/template.hbs +++ b/app/pods/protected/characteristics/template.hbs @@ -7,15 +7,12 @@ <th>Name</th> <th>Type</th> <th>Sort Order</th> + <th></th> </tr> </thead> <tbody> {{#each sortedCharacteristics as |row|}} - <tr> - <td>{{row.characteristicName}}</td> - <td>{{row.characteristicTypeName}}</td> - <td>{{row.sortOrder}}</td> - </tr> + {{protected/characteristics/editable-row row=row}} {{/each}} </tbody> </table> diff --git a/app/serializers/characteristic.js b/app/serializers/characteristic.js new file mode 100644 index 0000000..41ce180 --- /dev/null +++ b/app/serializers/characteristic.js @@ -0,0 +1,18 @@ +import DS from 'ember-data'; +import Ember from 'ember'; + +export default DS.RESTSerializer.extend({ + isNewSerializerAPI: true, + + serializeHasMany: function(snapshot, json, relationship) { + var key = relationship.key; + var hasMany = snapshot.hasMany(key); + key = this.keyForRelationship ? this.keyForRelationship(key, "hasMany", "serialize") : key; + + json[key] = []; + hasMany.forEach((item) => { + json[key].push(+item.get('id')); + }); + } + +});