From 6131f63178201988f7f62bbdb4d1e2c5c1e14181 Mon Sep 17 00:00:00 2001 From: Stephanie Kwok Date: Mon, 21 Aug 2017 17:18:35 -0700 Subject: [PATCH 1/7] filter out previously selected items from options list --- .../ModelFieldReference.js | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/client/common/directives/ModelFieldReference/ModelFieldReference.js b/client/common/directives/ModelFieldReference/ModelFieldReference.js index 701b46b5..bb082783 100644 --- a/client/common/directives/ModelFieldReference/ModelFieldReference.js +++ b/client/common/directives/ModelFieldReference/ModelFieldReference.js @@ -61,6 +61,31 @@ angular.module('dashboard.directives.ModelFieldReference', [ scope.selected.item = null; //for single select; initialize to null so placeholder is displayed scope.list = []; + /** + * Watch for scope.data. If it has no data, it will clear the selected item/s. + */ + scope.$watch('data', function() { + if (!scope.data) scope.selected = {}; + }); + + scope.$watch('selected.items', function() { // watch selected.items to ensure previously selected items are accounted for. + if (scope.selected && scope.selected.items && scope.selected.items.length) { + scope.modelData[scope.options.relationship] = scope.selected.items; + scope.refreshChoices(); + } + }); + + function removeSelectedFromList(selected, list, id) { + var filteredList = _.reject(list, function(o) { + for (var i = 0; i < selected.length; i++) { + if (o[id] === selected[i][id]) { + return true; + } + } + }); + return filteredList; + } + function replaceSessionVariables(string) { if (typeof string !== 'string') return string; try { @@ -113,7 +138,7 @@ angular.module('dashboard.directives.ModelFieldReference', [ scope.refreshChoices = function(search) { var model = Config.serverParams.models[scope.options.model]; var params = { 'filter[limit]': 100 }; //limit only 100 items in drop down list - params['filter[where]['+scope.options.searchField+'][like]'] = "%" + search + "%"; + if (search) params['filter[where]['+scope.options.searchField+'][like]'] = "%" + search + "%"; if (scope.options.where) { //Add additional filtering on reference results var keys = Object.keys(scope.options.where); @@ -133,7 +158,7 @@ angular.module('dashboard.directives.ModelFieldReference', [ if (scope.options.api) apiPath = replaceSessionVariables(scope.options.api); GeneralModelService.list(apiPath, params, {preventCancel: true}).then(function(response) { if (!response) return; //in case http request was cancelled by newer request - scope.list = response; + scope.list = scope.selected.items ? removeSelectedFromList(scope.selected.items, response, scope.options.key) : response; if (scope.options.allowInsert) { var addNewItem = {}; addNewItem[scope.options.searchField] = "[Add New Item]"; @@ -235,6 +260,10 @@ angular.module('dashboard.directives.ModelFieldReference', [ scope.onSelect = function(item, model) { if (scope.options.multiple) { + if (item && item[scope.options.searchField] == "[Add New Item]") { + var value = element.find("input.ui-select-search").val(); + item[scope.key] = value; + } //For multi-select add as relationship array objects to modelData (when saving, the CMS relational-upsert.js will handle it) scope.selected.items.push(item); //Make sure to loop through all items for junctionMeta (previously loaded items will not have junctionMeta populated) @@ -326,6 +355,7 @@ angular.module('dashboard.directives.ModelFieldReference', [ //For single record reference just assign null scope.data = null; } + scope.refreshChoices(); }; scope.$on('ngGridEventStartCellEdit', function () { From 2060ebf921ff22d167ba24677f5c636318a5dce2 Mon Sep 17 00:00:00 2001 From: Stephanie Kwok Date: Mon, 21 Aug 2017 17:18:47 -0700 Subject: [PATCH 2/7] Check for property --- client/app/dashboard/model/edit/ModelEdit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/app/dashboard/model/edit/ModelEdit.js b/client/app/dashboard/model/edit/ModelEdit.js index e376f266..96bb7ed5 100644 --- a/client/app/dashboard/model/edit/ModelEdit.js +++ b/client/app/dashboard/model/edit/ModelEdit.js @@ -220,7 +220,7 @@ angular.module('dashboard.Dashboard.Model.Edit', [ displayInfo = key; } else { var property = $scope.model.properties[key]; - displayInfo = property.display; + if (property) displayInfo = property.display; } if (!displayInfo) { From 8759fcdcee453968878c1a7694a2ece108d634c2 Mon Sep 17 00:00:00 2001 From: Stephanie Kwok Date: Fri, 25 Aug 2017 14:55:47 -0700 Subject: [PATCH 3/7] Use _.find --- .../directives/ModelFieldReference/ModelFieldReference.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/client/common/directives/ModelFieldReference/ModelFieldReference.js b/client/common/directives/ModelFieldReference/ModelFieldReference.js index bb082783..76c92d65 100644 --- a/client/common/directives/ModelFieldReference/ModelFieldReference.js +++ b/client/common/directives/ModelFieldReference/ModelFieldReference.js @@ -77,11 +77,9 @@ angular.module('dashboard.directives.ModelFieldReference', [ function removeSelectedFromList(selected, list, id) { var filteredList = _.reject(list, function(o) { - for (var i = 0; i < selected.length; i++) { - if (o[id] === selected[i][id]) { - return true; - } - } + return _.find(selected, function(s) { + return o[id] === s[id]; + }) }); return filteredList; } From f5d1e58f9b959b4a29fca8a747ec231e0fe0c522 Mon Sep 17 00:00:00 2001 From: Stephanie Kwok Date: Fri, 25 Aug 2017 14:56:16 -0700 Subject: [PATCH 4/7] set scope.list to removeSelectedFromList --- .../directives/ModelFieldReference/ModelFieldReference.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/common/directives/ModelFieldReference/ModelFieldReference.js b/client/common/directives/ModelFieldReference/ModelFieldReference.js index 76c92d65..af7282b4 100644 --- a/client/common/directives/ModelFieldReference/ModelFieldReference.js +++ b/client/common/directives/ModelFieldReference/ModelFieldReference.js @@ -156,7 +156,7 @@ angular.module('dashboard.directives.ModelFieldReference', [ if (scope.options.api) apiPath = replaceSessionVariables(scope.options.api); GeneralModelService.list(apiPath, params, {preventCancel: true}).then(function(response) { if (!response) return; //in case http request was cancelled by newer request - scope.list = scope.selected.items ? removeSelectedFromList(scope.selected.items, response, scope.options.key) : response; + scope.list = removeSelectedFromList(scope.selected.items, response, scope.options.key); if (scope.options.allowInsert) { var addNewItem = {}; addNewItem[scope.options.searchField] = "[Add New Item]"; From 0d345e1574b5d53ea708958c188cdd0ffe51b650 Mon Sep 17 00:00:00 2001 From: Stephanie Kwok Date: Tue, 29 Aug 2017 10:48:59 -0700 Subject: [PATCH 5/7] =?UTF-8?q?Don=E2=80=99t=20check=20length?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../directives/ModelFieldReference/ModelFieldReference.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/common/directives/ModelFieldReference/ModelFieldReference.js b/client/common/directives/ModelFieldReference/ModelFieldReference.js index 6670efc4..df56c809 100644 --- a/client/common/directives/ModelFieldReference/ModelFieldReference.js +++ b/client/common/directives/ModelFieldReference/ModelFieldReference.js @@ -69,7 +69,7 @@ angular.module('dashboard.directives.ModelFieldReference', [ }); scope.$watch('selected.items', function() { // watch selected.items to ensure previously selected items are accounted for. - if (scope.selected && scope.selected.items && scope.selected.items.length) { + if (scope.selected && scope.selected.items) { scope.modelData[scope.options.relationship] = scope.selected.items; scope.refreshChoices(); } From a09dfe8d4620fc63458a2a72351ef4d711722cb8 Mon Sep 17 00:00:00 2001 From: Stephanie Kwok Date: Tue, 5 Sep 2017 17:41:57 -0700 Subject: [PATCH 6/7] Add check for scope.options.relationship --- .../directives/ModelFieldReference/ModelFieldReference.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/common/directives/ModelFieldReference/ModelFieldReference.js b/client/common/directives/ModelFieldReference/ModelFieldReference.js index df56c809..0925318b 100644 --- a/client/common/directives/ModelFieldReference/ModelFieldReference.js +++ b/client/common/directives/ModelFieldReference/ModelFieldReference.js @@ -70,7 +70,7 @@ angular.module('dashboard.directives.ModelFieldReference', [ scope.$watch('selected.items', function() { // watch selected.items to ensure previously selected items are accounted for. if (scope.selected && scope.selected.items) { - scope.modelData[scope.options.relationship] = scope.selected.items; + if (scope.options.relationship) scope.modelData[scope.options.relationship] = scope.selected.items; scope.refreshChoices(); } }); From fa22e621384a841fe384456f977ca80d0e8dd693 Mon Sep 17 00:00:00 2001 From: Stephanie Kwok Date: Tue, 12 Sep 2017 15:15:51 -0700 Subject: [PATCH 7/7] remove options.relationship --- .../directives/ModelFieldReference/ModelFieldReference.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/common/directives/ModelFieldReference/ModelFieldReference.js b/client/common/directives/ModelFieldReference/ModelFieldReference.js index 0925318b..82052939 100644 --- a/client/common/directives/ModelFieldReference/ModelFieldReference.js +++ b/client/common/directives/ModelFieldReference/ModelFieldReference.js @@ -69,8 +69,7 @@ angular.module('dashboard.directives.ModelFieldReference', [ }); scope.$watch('selected.items', function() { // watch selected.items to ensure previously selected items are accounted for. - if (scope.selected && scope.selected.items) { - if (scope.options.relationship) scope.modelData[scope.options.relationship] = scope.selected.items; + if (scope.selected.items) { scope.refreshChoices(); } });