diff --git a/changelog.md b/changelog.md index bef447380..38bd959f8 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,9 @@ A User's UserProfile is now automatically created when you create a user in a post save signal. +RecordEditor.editItem will now take an item or an index rather than just an index. +Taking an index has been deprecated and will be removed in v0.15.0 + ### 0.13.1 (Minor Release) Upgrades the setup.py Django version from 2.0.9 to 2.0.13. Removes the six library dependency from setup.py. diff --git a/opal/static/js/opal/controllers/patient_list.js b/opal/static/js/opal/controllers/patient_list.js index b22d801a6..334b725d2 100644 --- a/opal/static/js/opal/controllers/patient_list.js +++ b/opal/static/js/opal/controllers/patient_list.js @@ -378,9 +378,16 @@ angular.module('opal.controllers').controller( } }; - episode.recordEditor.editItem(name, iix).then(function(result){ - reset_state(result); - }); + if(iix === episode[name].length){ + episode.recordEditor.newItem(name); + } + else{ + var item = episode[name][iix]; + + episode.recordEditor.editItem(name, item).then(function(result){ + reset_state(result); + }); + } }; function goUp() { diff --git a/opal/static/js/opal/services/record_editor.js b/opal/static/js/opal/services/record_editor.js index 32b4c2104..5ec812db7 100644 --- a/opal/static/js/opal/services/record_editor.js +++ b/opal/static/js/opal/services/record_editor.js @@ -1,5 +1,5 @@ angular.module('opal.services').factory('RecordEditor', function( - $http, $q, Item, $modal, $rootScope, $routeParams, + $http, $q, Item, $modal, $rootScope, $routeParams, $log, UserProfile){ "use strict"; var RecordEditor = function(episode){ @@ -56,7 +56,14 @@ angular.module('opal.services').factory('RecordEditor', function( }; self.editItem = function(name, iix){ - var item = self.getItem(name, iix); + var item; + if(_.isNumber(iix)){ + $log.warn("The ability to pass in an index to recordEditor.editItem will be removed in Opal v0.15.0, please pass in an item"); + item = self.getItem(name, iix); + } + else{ + item = iix; + } return self.openEditItemModal(item, name); }; diff --git a/opal/static/js/test/patient_list.controller.test.js b/opal/static/js/test/patient_list.controller.test.js index 557ed2f1b..92f4ddaa1 100644 --- a/opal/static/js/test/patient_list.controller.test.js +++ b/opal/static/js/test/patient_list.controller.test.js @@ -59,6 +59,7 @@ describe('PatientListCtrl', function() { var promise = deferred.promise spyOn(episode.recordEditor, 'editItem').and.returnValue(promise); + spyOn(episode.recordEditor, 'newItem').and.returnValue(promise); spyOn($cookies, 'put').and.stub(); @@ -791,7 +792,6 @@ describe('PatientListCtrl', function() { describe('newNamedItem', function(){ it('should pass through the current scopes tags', function(){ - spyOn(episode.recordEditor, "newItem"); $scope.newNamedItem(episode, "someName"); expect(episode.recordEditor.newItem).toHaveBeenCalledWith("someName") }); @@ -812,7 +812,7 @@ describe('PatientListCtrl', function() { it('should call through to the record editor', function(){ $scope.editNamedItem($scope.episode, 'demographics', 0); expect($scope.episode.recordEditor.editItem).toHaveBeenCalledWith( - 'demographics', 0 + 'demographics', $scope.episode.demographics[0] ); }); @@ -828,8 +828,8 @@ describe('PatientListCtrl', function() { it('should call through to the record editor when we add an item', function() { var iix = episodeData.diagnosis.length; $scope.editNamedItem($scope.episode, "diagnosis", iix); - expect($scope.episode.recordEditor.editItem).toHaveBeenCalledWith( - 'diagnosis', iix + expect($scope.episode.recordEditor.newItem).toHaveBeenCalledWith( + 'diagnosis' ); }); }); diff --git a/opal/static/js/test/record_editor_test.js b/opal/static/js/test/record_editor_test.js index 721369827..d882d64d8 100644 --- a/opal/static/js/test/record_editor_test.js +++ b/opal/static/js/test/record_editor_test.js @@ -6,7 +6,7 @@ describe('RecordEditor', function(){ var Flow, Episode, episode; var controller, UserProfile; var opalTestHelper; - var profile; + var profile, $log; var episodeData = { id: 123, @@ -95,6 +95,7 @@ describe('RecordEditor', function(){ $q = $injector.get('$q'); UserProfile = $injector.get('UserProfile'); opalTestHelper = $injector.get('opalTestHelper'); + $log = $injector.get('$log'); }); profile = opalTestHelper.getUserProfile(); @@ -105,14 +106,15 @@ describe('RecordEditor', function(){ }; }); + spyOn($log, "warn"); + episode = opalTestHelper.newEpisode($rootScope); // $rootScope.fields = fields; // episode = new Episode(angular.copy(episodeData)); }); describe("edit item", function(){ - describe("edit item", function(){ - it('should open the EditItemCtrl', function(){ + it('should open the EditItemCtrl with an index but warn', function(){ var deferred, callArgs; deferred = $q.defer(); deferred.resolve(); @@ -129,16 +131,40 @@ describe('RecordEditor', function(){ episode.recordEditor.editItem('diagnosis', 1); $scope.$digest(); callArgs = $modal.open.calls.mostRecent().args; + var expected = "The ability to pass in an index to recordEditor.editItem will be removed in Opal v0.15.0, please pass in an item"; + expect($log.warn).toHaveBeenCalledWith(expected); expect(callArgs.length).toBe(1); - expect(callArgs[0].controller).toBe('EditItemCtrl'); - expect(callArgs[0].templateUrl).toBe('/templates/modals/diagnosis.html/'); var resolves = callArgs[0].resolve; expect(resolves.item()).toEqual(episode.recordEditor.getItem('diagnosis', 1)); - expect(resolves.episode()).toEqual(episode); - expect(resolves.metadata(fakeMetadaa)).toEqual("some metadata"); - expect(resolves.referencedata(fakeReferencedata)).toEqual( "some reference data"); }); + it('should open the EditItemCtrl with an item', function(){ + var deferred, callArgs; + deferred = $q.defer(); + deferred.resolve(); + var modalPromise = deferred.promise; + var fakeMetadaa = { + load: function(){ return "some metadata"; } + }; + + var fakeReferencedata = { + load: function(){ return "some reference data"; } + }; + + spyOn($modal, 'open').and.returnValue({result: modalPromise} ); + episode.recordEditor.editItem('diagnosis', episode.diagnosis[0]); + $scope.$digest(); + callArgs = $modal.open.calls.mostRecent().args; + expect(callArgs.length).toBe(1); + expect(callArgs[0].controller).toBe('EditItemCtrl'); + expect(callArgs[0].templateUrl).toBe('/templates/modals/diagnosis.html/'); + var resolves = callArgs[0].resolve; + expect(resolves.item()).toEqual(episode.diagnosis[0]); + expect(resolves.episode()).toEqual(episode); + expect(resolves.metadata(fakeMetadaa)).toEqual("some metadata"); + expect(resolves.referencedata(fakeReferencedata)).toEqual( "some reference data"); + }); + it('should pull modal size through from the schema if it exists', function() { var deferred, callArgs; deferred = $q.defer(); @@ -239,8 +265,6 @@ describe('RecordEditor', function(){ expect($rootScope.state).toBe('normal'); expect(called).toBe(true); }); - }); - }); describe("get item", function(){ diff --git a/opal/templates/_helpers/record_panel.html b/opal/templates/_helpers/record_panel.html index fda180639..db0a66a31 100644 --- a/opal/templates/_helpers/record_panel.html +++ b/opal/templates/_helpers/record_panel.html @@ -42,7 +42,7 @@

{% if not singleton %} + ng-click="parent.recordEditor.editItem('{{ name }}', item)"> {% endif %} diff --git a/opal/templates/patient_lists/layouts/spreadsheet_list_base.html b/opal/templates/patient_lists/layouts/spreadsheet_list_base.html index c93d18595..c06b20121 100644 --- a/opal/templates/patient_lists/layouts/spreadsheet_list_base.html +++ b/opal/templates/patient_lists/layouts/spreadsheet_list_base.html @@ -164,7 +164,7 @@