From 482bfddf1226e575c742bf47493b3f84ecd02899 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Fri, 25 Sep 2015 14:46:49 -0700 Subject: [PATCH 01/14] Track changes --- .../show/measurements-table-row/component.js | 16 ++++++++++++++-- .../show/measurements-table-row/template.hbs | 6 ++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/pods/protected/strains/show/measurements-table-row/component.js b/app/pods/protected/strains/show/measurements-table-row/component.js index 252e6e3..39216ec 100644 --- a/app/pods/protected/strains/show/measurements-table-row/component.js +++ b/app/pods/protected/strains/show/measurements-table-row/component.js @@ -4,6 +4,16 @@ export default Ember.Component.extend({ tagName: 'tr', isEditing: false, + oldCharacteristicId: function() { + let json = this.get('row').toJSON(); + return json.characteristic; + }.property(), + + rowChanged: Ember.computed('row.notes', 'row.value', 'row.characteristic.id', function() { + return this.get('row.hasDirtyAttributes') || + this.get('oldCharacteristicId') !== this.get('row.characteristic.id'); + }), + actions: { edit: function() { // The parent table fetches all of the characteristics ahead of time @@ -13,8 +23,10 @@ export default Ember.Component.extend({ save: function() { this.toggleProperty('isEditing'); - this.get('row').save(); + if (this.get('rowChanged')) { + this.get('row').save(); + } }, - + }, }); diff --git a/app/pods/protected/strains/show/measurements-table-row/template.hbs b/app/pods/protected/strains/show/measurements-table-row/template.hbs index bdf8566..fd0bf3d 100644 --- a/app/pods/protected/strains/show/measurements-table-row/template.hbs +++ b/app/pods/protected/strains/show/measurements-table-row/template.hbs @@ -16,9 +16,15 @@ </td> {{#if canEdit}} <td> + {{#if rowChanged}} <button class="button-red smaller" {{action 'save'}}> Save </button> + {{else}} + <button class="button-gray smaller" {{action 'save'}}> + Cancel + </button> + {{/if}} </td> {{/if}} {{else}} From 34aa59caf30ae7edf04186e15273841314da937a Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Fri, 25 Sep 2015 15:37:23 -0700 Subject: [PATCH 02/14] Delete measurement --- .../strains/show/measurements-table-row/component.js | 4 ++++ .../strains/show/measurements-table-row/template.hbs | 5 ++++- .../protected/strains/show/measurements-table/template.hbs | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/pods/protected/strains/show/measurements-table-row/component.js b/app/pods/protected/strains/show/measurements-table-row/component.js index 39216ec..a527572 100644 --- a/app/pods/protected/strains/show/measurements-table-row/component.js +++ b/app/pods/protected/strains/show/measurements-table-row/component.js @@ -28,5 +28,9 @@ export default Ember.Component.extend({ } }, + delete: function() { + this.get('row').destroyRecord(); + } + }, }); diff --git a/app/pods/protected/strains/show/measurements-table-row/template.hbs b/app/pods/protected/strains/show/measurements-table-row/template.hbs index fd0bf3d..6b99871 100644 --- a/app/pods/protected/strains/show/measurements-table-row/template.hbs +++ b/app/pods/protected/strains/show/measurements-table-row/template.hbs @@ -17,7 +17,7 @@ {{#if canEdit}} <td> {{#if rowChanged}} - <button class="button-red smaller" {{action 'save'}}> + <button class="button-green smaller" {{action 'save'}}> Save </button> {{else}} @@ -44,6 +44,9 @@ <button class="button-gray smaller" {{action 'edit'}}> Edit </button> + <button class="button-red smaller" {{action 'delete'}}> + Delete + </button> </td> {{/if}} {{/if}} diff --git a/app/pods/protected/strains/show/measurements-table/template.hbs b/app/pods/protected/strains/show/measurements-table/template.hbs index 3f14ca7..ced8028 100644 --- a/app/pods/protected/strains/show/measurements-table/template.hbs +++ b/app/pods/protected/strains/show/measurements-table/template.hbs @@ -4,8 +4,8 @@ {{#if canEdit}} <col span="1" style="width:40%"> <col span="1" style="width:20%"> - <col span="1" style="width:30%"> - <col span="1" style="width:10%"> + <col span="1" style="width:20%"> + <col span="1" style="width:20%"> {{else}} <col span="1" style="width:40%"> <col span="1" style="width:30%"> From da27b42f76bf500ddcea1cb3dfd484fd111b1e72 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Tue, 29 Sep 2015 15:55:34 -0700 Subject: [PATCH 03/14] Add characteristic/measurement to strain --- app/pods/protected/strains/edit/route.js | 1 + app/pods/protected/strains/edit/template.hbs | 1 + .../strains/show/measurements-table/component.js | 14 +++++++++++++- .../strains/show/measurements-table/template.hbs | 8 ++++++++ app/pods/protected/strains/show/template.hbs | 1 + .../protected/strains/strain-form/template.hbs | 1 + 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/pods/protected/strains/edit/route.js b/app/pods/protected/strains/edit/route.js index 94a7710..6bb9b2f 100644 --- a/app/pods/protected/strains/edit/route.js +++ b/app/pods/protected/strains/edit/route.js @@ -17,6 +17,7 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { setupController: function(controller, models) { controller.setProperties(models); + controller.set('metaData', this.store.metadataFor('strain')); }, }); diff --git a/app/pods/protected/strains/edit/template.hbs b/app/pods/protected/strains/edit/template.hbs index d9c4d43..a4885d6 100644 --- a/app/pods/protected/strains/edit/template.hbs +++ b/app/pods/protected/strains/edit/template.hbs @@ -2,6 +2,7 @@ protected/strains/strain-form strain=strain species=species + canAdd=metaData.canAdd save="save" cancel="cancel" }} diff --git a/app/pods/protected/strains/show/measurements-table/component.js b/app/pods/protected/strains/show/measurements-table/component.js index af846d0..3fe5de5 100644 --- a/app/pods/protected/strains/show/measurements-table/component.js +++ b/app/pods/protected/strains/show/measurements-table/component.js @@ -11,7 +11,19 @@ export default Ember.Component.extend({ } }.on('didInsertElement'), - sortParams: ['characteristicTypeName', 'sortOrder', 'characteristicName'], + sortParams: ['characteristic.characteristicTypeName', 'characteristic.sortOrder', 'characteristic.characteristicName'], sortedMeasurements: Ember.computed.sort('model.measurements', 'sortParams'), + actions: { + addCharacteristic: function() { + const c = this.store.createRecord('characteristic', { + sortOrder: -999 + }) + const m = this.store.createRecord('measurement', { + characteristic: c + }); + this.get('model.measurements').addObject(m); + }, + }, + }); diff --git a/app/pods/protected/strains/show/measurements-table/template.hbs b/app/pods/protected/strains/show/measurements-table/template.hbs index ced8028..2f30a9e 100644 --- a/app/pods/protected/strains/show/measurements-table/template.hbs +++ b/app/pods/protected/strains/show/measurements-table/template.hbs @@ -1,3 +1,11 @@ +{{#if canAdd}} +<br> +<button class="button-green smaller" {{action "addCharacteristic"}}> + Add characteristic +</button> +<br><br> +{{/if}} + {{#if measurementsPresent}} <table class="flakes-table"> <colgroup> diff --git a/app/pods/protected/strains/show/template.hbs b/app/pods/protected/strains/show/template.hbs index dbe09fe..e16634a 100644 --- a/app/pods/protected/strains/show/template.hbs +++ b/app/pods/protected/strains/show/template.hbs @@ -77,6 +77,7 @@ protected/strains/show/measurements-table model=model canEdit=false + canAdd=false }} </dd> </dl> diff --git a/app/pods/protected/strains/strain-form/template.hbs b/app/pods/protected/strains/strain-form/template.hbs index 8260411..cf33026 100644 --- a/app/pods/protected/strains/strain-form/template.hbs +++ b/app/pods/protected/strains/strain-form/template.hbs @@ -54,6 +54,7 @@ protected/strains/show/measurements-table model=strain canEdit=strain.canEdit + canAdd=canAdd }} </div> <br> From 69dbdcaa8941b934b37f33d4e7e312e59ecb76af Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Thu, 1 Oct 2015 06:46:51 -0700 Subject: [PATCH 04/14] Adapter error deprecated. --- app/pods/application/adapter.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/app/pods/application/adapter.js b/app/pods/application/adapter.js index 0a943ec..184060e 100644 --- a/app/pods/application/adapter.js +++ b/app/pods/application/adapter.js @@ -12,24 +12,6 @@ export default DS.RESTAdapter.extend({ coalesceFindRequests: true, - ajaxError: function(jqXHR) { - // http://stackoverflow.com/a/24027443 - var error = this._super(jqXHR); - if (jqXHR && jqXHR.status === 422) { - var response = Ember.$.parseJSON(jqXHR.responseText), - errors = {}; - if (response.errors !== undefined) { - var jsonErrors = response.errors; - Ember.EnumerableUtils.forEach(Object.keys(jsonErrors), function(key) { - errors[Ember.String.camelize(key)] = jsonErrors[key]; - }); - } - return new DS.InvalidError(errors); - } else { - return error; - } - }, - shouldReloadAll: function() { return true; }, From f2f16e15a44782792cc63a02f9793f7672943c98 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Thu, 1 Oct 2015 07:13:36 -0700 Subject: [PATCH 05/14] Edit user --- app/pods/protected/users/edit/controller.js | 32 +++++++++++++++++++ app/pods/protected/users/edit/route.js | 8 +++++ app/pods/protected/users/edit/template.hbs | 6 ++++ .../protected/users/user-form/component.js | 13 ++++++++ .../protected/users/user-form/template.hbs | 32 +++++++++++++++++++ 5 files changed, 91 insertions(+) create mode 100644 app/pods/protected/users/edit/controller.js create mode 100644 app/pods/protected/users/edit/route.js create mode 100644 app/pods/protected/users/edit/template.hbs create mode 100644 app/pods/protected/users/user-form/component.js create mode 100644 app/pods/protected/users/user-form/template.hbs diff --git a/app/pods/protected/users/edit/controller.js b/app/pods/protected/users/edit/controller.js new file mode 100644 index 0000000..903eefd --- /dev/null +++ b/app/pods/protected/users/edit/controller.js @@ -0,0 +1,32 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + actions: { + save: function() { + let user = this.get('model'); + + if (user.get('hasDirtyAttributes')) { + user.save().then((user) => { + this.get('flashMessages').clearMessages(); + this.transitionToRoute('protected.users.show', user); + }, (err) => { + err.errors.forEach((error) => { + this.get('flashMessages').error(error.detail); + }); + }); + } else { + this.transitionToRoute('protected.users.show', user); + } + }, + + cancel: function() { + let user = this.get('model'); + + user.get('errors').clear(); + user.rollbackAttributes(); + + this.transitionToRoute('protected.users.show', user); + }, + + }, +}); diff --git a/app/pods/protected/users/edit/route.js b/app/pods/protected/users/edit/route.js new file mode 100644 index 0000000..bc22dc0 --- /dev/null +++ b/app/pods/protected/users/edit/route.js @@ -0,0 +1,8 @@ +import Ember from 'ember'; + +export default Ember.Route.extend({ + model: function(params) { + return this.store.findRecord('user', params.user_id, { reload: true }); + }, + +}); diff --git a/app/pods/protected/users/edit/template.hbs b/app/pods/protected/users/edit/template.hbs new file mode 100644 index 0000000..68d66b4 --- /dev/null +++ b/app/pods/protected/users/edit/template.hbs @@ -0,0 +1,6 @@ +{{ + protected/users/user-form + user=model + save="save" + cancel="cancel" +}} diff --git a/app/pods/protected/users/user-form/component.js b/app/pods/protected/users/user-form/component.js new file mode 100644 index 0000000..a53a469 --- /dev/null +++ b/app/pods/protected/users/user-form/component.js @@ -0,0 +1,13 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + actions: { + save: function() { + this.sendAction('save'); + }, + + cancel: function() { + this.sendAction('cancel'); + }, + } +}); diff --git a/app/pods/protected/users/user-form/template.hbs b/app/pods/protected/users/user-form/template.hbs new file mode 100644 index 0000000..60c2d77 --- /dev/null +++ b/app/pods/protected/users/user-form/template.hbs @@ -0,0 +1,32 @@ +<form class="grid-form" {{action 'save' on='submit'}}> + <fieldset> + <legend><em>{{user.name}}</em></legend> + <div data-row-span="1"> + <div data-field-span="1"> + <label>Name</label> + {{input value=user.name}} + </div> + </div> + <div data-row-span="1"> + <div data-field-span="1"> + <label>Email</label> + {{input value=user.email}} + </div> + </div> + <div data-row-span="1"> + <div data-field-span="1"> + <label>Role</label> + {{user.role}} + </div> + </div> + </fieldset> + <br> + <a class="button-red smaller" {{action 'cancel'}}> + Cancel + </a> + {{#if user.hasDirtyAttributes}} + <button type="submit" class="button-green smaller"> + Save + </button> + {{/if}} +</form> From 33ed70caaf1ade3e8e390f7274ed178eeab1ea74 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Thu, 1 Oct 2015 07:45:08 -0700 Subject: [PATCH 06/14] ember 1.13.7 & ember-data 1.13.13 --- bower.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bower.json b/bower.json index 48e0366..9efca06 100644 --- a/bower.json +++ b/bower.json @@ -2,10 +2,10 @@ "name": "hymenobacterdotinfo", "dependencies": { "jquery": "~2.1.1", - "ember": "1.13.7", + "ember": "1.13.10", "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3", "ember-cli-test-loader": "ember-cli-test-loader#0.1.3", - "ember-data": "1.13.8", + "ember-data": "1.13.13", "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.5", "ember-qunit": "0.4.9", "ember-qunit-notifications": "0.0.7", diff --git a/package.json b/package.json index b08c892..9bd4ccd 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "ember-cli-release": "0.2.3", "ember-cli-sri": "^1.0.3", "ember-cli-uglify": "^1.2.0", - "ember-data": "1.13.8", + "ember-data": "1.13.13", "ember-disable-proxy-controllers": "^1.0.0", "ember-export-application-global": "^1.0.3", "ember-select-2": "1.3.0" From 5be2888223c0c34b11d9b77b6863d1a94668d16d Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Sun, 4 Oct 2015 15:54:02 -0700 Subject: [PATCH 07/14] minor cleanup --- app/models/user.js | 1 + app/pods/application/adapter.js | 1 - app/pods/protected/strains/show/measurements-table/component.js | 2 +- app/pods/protected/users/show/template.hbs | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/user.js b/app/models/user.js index bb7c5fd..680a9f4 100644 --- a/app/models/user.js +++ b/app/models/user.js @@ -5,6 +5,7 @@ export default DS.Model.extend({ password : DS.attr('string'), name : DS.attr('string'), role : DS.attr('string'), + canEdit : DS.attr('boolean'), createdAt: DS.attr('date'), updatedAt: DS.attr('date'), deletedAt: DS.attr('date'), diff --git a/app/pods/application/adapter.js b/app/pods/application/adapter.js index 184060e..11498d0 100644 --- a/app/pods/application/adapter.js +++ b/app/pods/application/adapter.js @@ -1,5 +1,4 @@ import DS from 'ember-data'; -import Ember from 'ember'; export default DS.RESTAdapter.extend({ namespace: function() { diff --git a/app/pods/protected/strains/show/measurements-table/component.js b/app/pods/protected/strains/show/measurements-table/component.js index 3fe5de5..8d8e31d 100644 --- a/app/pods/protected/strains/show/measurements-table/component.js +++ b/app/pods/protected/strains/show/measurements-table/component.js @@ -18,7 +18,7 @@ export default Ember.Component.extend({ addCharacteristic: function() { const c = this.store.createRecord('characteristic', { sortOrder: -999 - }) + }); const m = this.store.createRecord('measurement', { characteristic: c }); diff --git a/app/pods/protected/users/show/template.hbs b/app/pods/protected/users/show/template.hbs index 32117c9..4f7fca9 100644 --- a/app/pods/protected/users/show/template.hbs +++ b/app/pods/protected/users/show/template.hbs @@ -43,7 +43,7 @@ {{/link-to}} {{#if model.canEdit}} <br> - {{#link-to 'protected.user.edit' model.id class="button-gray smaller"}} + {{#link-to 'protected.users.edit' model.id class="button-gray smaller"}} Edit {{/link-to}} {{/if}} From a1e4e03b8922abef5ed9deb405db21592eb73bb8 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Mon, 12 Oct 2015 10:20:17 -0700 Subject: [PATCH 08/14] Delete characteristic --- app/pods/components/delete-button/component.js | 13 +++++++++++++ app/pods/components/delete-button/template.hbs | 1 + .../protected/characteristics/show/controller.js | 11 +++++++++++ .../protected/characteristics/show/template.hbs | 2 ++ 4 files changed, 27 insertions(+) create mode 100644 app/pods/components/delete-button/component.js create mode 100644 app/pods/components/delete-button/template.hbs create mode 100644 app/pods/protected/characteristics/show/controller.js diff --git a/app/pods/components/delete-button/component.js b/app/pods/components/delete-button/component.js new file mode 100644 index 0000000..2ceca5b --- /dev/null +++ b/app/pods/components/delete-button/component.js @@ -0,0 +1,13 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + tagName: 'button', + classNames: ["button-red", "smaller"], + + click: function() { + if (window.confirm("Do you really want to delete this?")) { + this.attrs.delete(); + } + }, + +}); diff --git a/app/pods/components/delete-button/template.hbs b/app/pods/components/delete-button/template.hbs new file mode 100644 index 0000000..4b2e04f --- /dev/null +++ b/app/pods/components/delete-button/template.hbs @@ -0,0 +1 @@ +Delete diff --git a/app/pods/protected/characteristics/show/controller.js b/app/pods/protected/characteristics/show/controller.js new file mode 100644 index 0000000..cc45d06 --- /dev/null +++ b/app/pods/protected/characteristics/show/controller.js @@ -0,0 +1,11 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + actions: { + delete: function() { + this.get('model').destroyRecord() + this.transitionToRoute('protected.characteristics.index'); + }, + }, + +}); diff --git a/app/pods/protected/characteristics/show/template.hbs b/app/pods/protected/characteristics/show/template.hbs index de81623..010a8c5 100644 --- a/app/pods/protected/characteristics/show/template.hbs +++ b/app/pods/protected/characteristics/show/template.hbs @@ -26,6 +26,7 @@ <dl class="span-2"> <dt>Measurements</dt> <dd> + <p>To add/edit/remove a measurement, please visit the strain's page (links below)</p> {{protected/characteristics/show/measurements-table model=model}} </dd> </dl> @@ -54,4 +55,5 @@ {{#link-to 'protected.characteristics.edit' model.id class="button-gray smaller"}} Edit {{/link-to}} + {{delete-button delete=(action 'delete')}} {{/if}} From bf8289436f0bd0288ac7c5006ffd734584d4d83f Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Mon, 12 Oct 2015 10:41:07 -0700 Subject: [PATCH 09/14] Delete species --- app/pods/protected/species/show/controller.js | 11 +++++++++++ app/pods/protected/species/show/template.hbs | 1 + 2 files changed, 12 insertions(+) create mode 100644 app/pods/protected/species/show/controller.js diff --git a/app/pods/protected/species/show/controller.js b/app/pods/protected/species/show/controller.js new file mode 100644 index 0000000..cadc1f4 --- /dev/null +++ b/app/pods/protected/species/show/controller.js @@ -0,0 +1,11 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + actions: { + delete: function() { + this.get('model').destroyRecord(); + this.transitionToRoute('protected.species.index'); + }, + }, + +}); diff --git a/app/pods/protected/species/show/template.hbs b/app/pods/protected/species/show/template.hbs index 059ab04..528b969 100644 --- a/app/pods/protected/species/show/template.hbs +++ b/app/pods/protected/species/show/template.hbs @@ -62,4 +62,5 @@ {{#link-to 'protected.species.edit' model class="button-gray smaller"}} Edit {{/link-to}} + {{delete-button delete=(action 'delete')}} {{/if}} From 56e7b088acbd583de76613fb1b4e07c7fe8d98bc Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Mon, 12 Oct 2015 10:46:13 -0700 Subject: [PATCH 10/14] Delete strains --- app/pods/protected/strains/show/controller.js | 11 +++++++++++ app/pods/protected/strains/show/template.hbs | 1 + 2 files changed, 12 insertions(+) create mode 100644 app/pods/protected/strains/show/controller.js diff --git a/app/pods/protected/strains/show/controller.js b/app/pods/protected/strains/show/controller.js new file mode 100644 index 0000000..ab4d552 --- /dev/null +++ b/app/pods/protected/strains/show/controller.js @@ -0,0 +1,11 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + actions: { + delete: function() { + this.get('model').destroyRecord(); + this.transitionToRoute('protected.strains.index'); + }, + }, + +}); diff --git a/app/pods/protected/strains/show/template.hbs b/app/pods/protected/strains/show/template.hbs index e16634a..5260d43 100644 --- a/app/pods/protected/strains/show/template.hbs +++ b/app/pods/protected/strains/show/template.hbs @@ -105,4 +105,5 @@ {{#link-to 'protected.strains.edit' model.id class="button-gray smaller"}} Edit {{/link-to}} + {{delete-button delete=(action 'delete')}} {{/if}} From abb57c9ee0e2b8e1afc99b86b1fdef4a964b0044 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Mon, 12 Oct 2015 10:47:54 -0700 Subject: [PATCH 11/14] Confirm delete on meas/char --- .../strains/show/measurements-table-row/template.hbs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/pods/protected/strains/show/measurements-table-row/template.hbs b/app/pods/protected/strains/show/measurements-table-row/template.hbs index 6b99871..1c6cc07 100644 --- a/app/pods/protected/strains/show/measurements-table-row/template.hbs +++ b/app/pods/protected/strains/show/measurements-table-row/template.hbs @@ -44,9 +44,7 @@ <button class="button-gray smaller" {{action 'edit'}}> Edit </button> - <button class="button-red smaller" {{action 'delete'}}> - Delete - </button> + {{delete-button delete=(action 'delete')}} </td> {{/if}} {{/if}} From c3e0da9cb4d9e0543f09036ba5649df357fbe845 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Mon, 12 Oct 2015 12:05:45 -0700 Subject: [PATCH 12/14] Roughing in roles selection --- app/helpers/equal.js | 7 +++++++ app/pods/protected/users/edit/template.hbs | 1 + app/pods/protected/users/user-form/component.js | 6 ++++++ app/pods/protected/users/user-form/template.hbs | 10 +++++++++- 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 app/helpers/equal.js diff --git a/app/helpers/equal.js b/app/helpers/equal.js new file mode 100644 index 0000000..db3e867 --- /dev/null +++ b/app/helpers/equal.js @@ -0,0 +1,7 @@ +import Ember from 'ember'; + +export function equalHelper(params) { + return params[0] === params[1]; +} + +export default Ember.HTMLBars.makeBoundHelper(equalHelper); diff --git a/app/pods/protected/users/edit/template.hbs b/app/pods/protected/users/edit/template.hbs index 68d66b4..2f2f678 100644 --- a/app/pods/protected/users/edit/template.hbs +++ b/app/pods/protected/users/edit/template.hbs @@ -1,6 +1,7 @@ {{ protected/users/user-form user=model + currentUser=session.currentUser save="save" cancel="cancel" }} diff --git a/app/pods/protected/users/user-form/component.js b/app/pods/protected/users/user-form/component.js index a53a469..d5ce463 100644 --- a/app/pods/protected/users/user-form/component.js +++ b/app/pods/protected/users/user-form/component.js @@ -1,6 +1,12 @@ import Ember from 'ember'; export default Ember.Component.extend({ + isAdmin: Ember.computed('currentUser', function() { + return this.get('currentUser.role') == 'A'; + }), + + roles: Ember.String.w('A R W'), + actions: { save: function() { this.sendAction('save'); diff --git a/app/pods/protected/users/user-form/template.hbs b/app/pods/protected/users/user-form/template.hbs index 60c2d77..a872aae 100644 --- a/app/pods/protected/users/user-form/template.hbs +++ b/app/pods/protected/users/user-form/template.hbs @@ -16,7 +16,15 @@ <div data-row-span="1"> <div data-field-span="1"> <label>Role</label> - {{user.role}} + {{#if isAdmin}} + <select onchange={{action (mut user.role) value="target.value"}}> + {{#each roles as |roleChoice|}} + <option value={{roleChoice}} selected={{equal user.role roleChoice}}>{{roleChoice}}</option> + {{/each}} + </select> + {{else}} + {{user.role}} + {{/if}} </div> </div> </fieldset> From d353dc6e751e69c6e5cf76958906f6409c42adf2 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Mon, 12 Oct 2015 15:05:02 -0700 Subject: [PATCH 13/14] Clear store on role change Fixes #18. --- app/pods/protected/users/edit/controller.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/pods/protected/users/edit/controller.js b/app/pods/protected/users/edit/controller.js index 903eefd..3d4940c 100644 --- a/app/pods/protected/users/edit/controller.js +++ b/app/pods/protected/users/edit/controller.js @@ -6,8 +6,17 @@ export default Ember.Controller.extend({ let user = this.get('model'); if (user.get('hasDirtyAttributes')) { + let attrs = user.changedAttributes(), roleChanged = false; + if (attrs.role) { + roleChanged = true; + } user.save().then((user) => { this.get('flashMessages').clearMessages(); + if (roleChanged) { + // Need to clear the store so that canEdit and canAdd + // attributes reflect the new role. + this.get('store').unloadAll(); + } this.transitionToRoute('protected.users.show', user); }, (err) => { err.errors.forEach((error) => { From 4a54813440a135ccf4973aa6647ba337f03cd303 Mon Sep 17 00:00:00 2001 From: Matthew Dillon <mrdillon@alaska.edu> Date: Mon, 12 Oct 2015 20:43:36 -0700 Subject: [PATCH 14/14] Change password Fixes #14 --- .../users/changepassword/controller.js | 29 +++++++++++++++++++ .../protected/users/changepassword/route.js | 12 ++++++++ .../users/changepassword/template.hbs | 24 +++++++++++++++ app/pods/protected/users/show/controller.js | 7 +++++ app/pods/protected/users/show/template.hbs | 26 +++++++++++------ app/router.js | 1 + 6 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 app/pods/protected/users/changepassword/controller.js create mode 100644 app/pods/protected/users/changepassword/route.js create mode 100644 app/pods/protected/users/changepassword/template.hbs create mode 100644 app/pods/protected/users/show/controller.js diff --git a/app/pods/protected/users/changepassword/controller.js b/app/pods/protected/users/changepassword/controller.js new file mode 100644 index 0000000..a157605 --- /dev/null +++ b/app/pods/protected/users/changepassword/controller.js @@ -0,0 +1,29 @@ +import Ember from 'ember'; +import ajaxRequest from '../../../../utils/ajax-request'; + +export default Ember.Controller.extend({ + passwordConfirm: null, + + actions: { + save: function() { + if (this.get('password') !== this.get('passwordConfirm')) { + this.get('flashMessages').clearMessages(); + this.get('flashMessages').error("Password fields don't match"); + return; + } + + let url = `${this.get('globals.apiURL')}/api/${this.get('globals.genus')}/users/password`; + let options = { + method: 'POST', + data: { + password: this.get('password'), + }, + }; + ajaxRequest(url, options); + this.transitionTo('protected.users.index'); + this.get('flashMessages').information('Your password has been changed.'); + }, + + }, + +}); diff --git a/app/pods/protected/users/changepassword/route.js b/app/pods/protected/users/changepassword/route.js new file mode 100644 index 0000000..982b827 --- /dev/null +++ b/app/pods/protected/users/changepassword/route.js @@ -0,0 +1,12 @@ +import Ember from 'ember'; + +export default Ember.Route.extend({ + beforeModel: function(transition) { + this._super(transition); + + let user_id = transition.params['protected.users.changepassword'].user_id; + if (this.get('session.currentUser.id') !== user_id) { + this.transitionTo('protected.users.index'); + } + } +}); diff --git a/app/pods/protected/users/changepassword/template.hbs b/app/pods/protected/users/changepassword/template.hbs new file mode 100644 index 0000000..b22db6c --- /dev/null +++ b/app/pods/protected/users/changepassword/template.hbs @@ -0,0 +1,24 @@ +<div class="grid-1"> + <div class="span-1"> + <fieldset> + <legend>Change password</legend> + <form {{action 'save' on='submit'}}> + <ul> + <li> + <label>New Password</label> + {{input type="password" value=password}} + </li> + <li> + <label>New Password (confirm)</label> + {{input type="password" value=passwordConfirm}} + </li> + <li> + <button type="submit" class="button-green smaller"> + Submit + </button> + </li> + </ul> + </form> + </fieldset> + </div> +</div> diff --git a/app/pods/protected/users/show/controller.js b/app/pods/protected/users/show/controller.js new file mode 100644 index 0000000..481b126 --- /dev/null +++ b/app/pods/protected/users/show/controller.js @@ -0,0 +1,7 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + isUser: Ember.computed('model.id', 'session.currentUser.id', function() { + return this.get('model.id') === this.get('session.currentUser.id'); + }), +}); diff --git a/app/pods/protected/users/show/template.hbs b/app/pods/protected/users/show/template.hbs index 4f7fca9..9d21912 100644 --- a/app/pods/protected/users/show/template.hbs +++ b/app/pods/protected/users/show/template.hbs @@ -38,12 +38,20 @@ </fieldset> </div> <br> -{{#link-to 'protected.users.show' model.id class="button-gray smaller"}} - Change Password (Does nothing at the moment) -{{/link-to}} -{{#if model.canEdit}} - <br> - {{#link-to 'protected.users.edit' model.id class="button-gray smaller"}} - Edit - {{/link-to}} -{{/if}} +<div class="grid-2 gutter-20"> + {{#if isUser}} + <div class="span-1"> + {{#link-to 'protected.users.changepassword' model.id class="button-gray smaller"}} + Change Password + {{/link-to}} + </div> + {{/if}} + + <div class="span-1"> + {{#if model.canEdit}} + {{#link-to 'protected.users.edit' model.id class="button-gray smaller"}} + Edit + {{/link-to}} + {{/if}} + </div> +</div> diff --git a/app/router.js b/app/router.js index 5f48eec..3b3655a 100644 --- a/app/router.js +++ b/app/router.js @@ -22,6 +22,7 @@ Router.map(function() { this.route('users', function() { this.route('show', { path: ':user_id' }); this.route('edit', { path: ':user_id/edit' }); + this.route('changepassword', { path: ':user_id/changepassword' }); }); this.route('compare', function() {