diff --git a/web/app/views/index.scala.html b/web/app/views/index.scala.html index 1e495d77e4..6f2d99044f 100644 --- a/web/app/views/index.scala.html +++ b/web/app/views/index.scala.html @@ -389,7 +389,7 @@ - + {{#each owners as |owner|}} {{input class="userEntity" value=owner.userName}} @@ -662,8 +662,7 @@ {{/dataset-schema}}
- {{#dataset-author owners=owners ownerTypes=ownerTypes showMsg=showMsg alertType=alertType ownerMessage=ownerMessage parentController=this}} - {{/dataset-author}} + {{dataset-author owners=owners ownerTypes=ownerTypes showMsg=showMsg alertType=alertType ownerMessage=ownerMessage parentController=this}}
{{#unless isSFDC}}
@@ -752,8 +751,7 @@
- {{#dataset-author owners=owners ownerTypes=ownerTypes showMsg=showMsg alertType=alertType ownerMessage=ownerMessage parentController=this}} - {{/dataset-author}} + {{dataset-author owners=owners ownerTypes=ownerTypes showMsg=showMsg alertType=alertType ownerMessage=ownerMessage parentController=this}}
diff --git a/web/public/javascripts/components/components.js b/web/public/javascripts/components/components.js index 3445bd1e6a..5180b7fbb0 100644 --- a/web/public/javascripts/components/components.js +++ b/web/public/javascripts/components/components.js @@ -167,6 +167,30 @@ App.DatasetImpactComponent = Ember.Component.extend({ }); App.DatasetAuthorComponent = Ember.Component.extend({ + didInsertElement() { + this._super(...arguments); + // Apply jQuery sortable plugin to element + this.$('[data-attribute=owner-table]') + .sortable({ + start: (e, {item}) => this.set('startPosition', item.index()), + + update: (e, {item}) => { + const startPosition = this.get('startPosition'); + const endPosition = item.index(); // New position where UI element was dropped + const owners = this.get('owners') || []; + + // Updates the owners array to reflect the UI position changes + if (owners.length) { + const _owners = owners.slice(0); + const updatedOwner = _owners.splice(startPosition, 1).pop(); + _owners.splice(endPosition, 0, updatedOwner); + owners.setObjects(_owners); + setOwnerNameAutocomplete(this.controller); + } + } + }); + }, + actions: { addOwner: function(data) { var owners = data; diff --git a/web/public/javascripts/routers/datasets.js b/web/public/javascripts/routers/datasets.js index 64c93b4915..cae0800ea3 100644 --- a/web/public/javascripts/routers/datasets.js +++ b/web/public/javascripts/routers/datasets.js @@ -43,80 +43,6 @@ function formatValue(key, value){ } } -function setOwnerNameAutocomplete(controller) -{ - if (!controller) - { - return; - } - - $('.userEntity').blur(function(data){ - var userEntitiesMaps = controller.get("userEntitiesMaps"); - var value = this.value; - if (userEntitiesMaps[value]) - { - controller.set("showMsg", false); - var owners = controller.get("owners"); - for(var i = 0; i < owners.length; i++) - { - if (owners[i].userName == value) - { - Ember.set(owners[i], "name", userEntitiesMaps[value]); - if (userEntitiesMaps[value]) - { - Ember.set(owners[i], "isGroup", false); - } - else - { - Ember.set(owners[i], "isGroup", true); - } - } - } - } - else - { - controller.set("showMsg", true); - controller.set("alertType", "alert-danger"); - controller.set("ownerMessage", "The user name '" + value + "' is invalid"); - } - }); - - $('.userEntity').autocomplete({ - select: function( event, ui ) - { - var userEntitiesMaps = controller.get("userEntitiesMaps"); - var value = ui.item.value; - if (value in userEntitiesMaps) - { - var owners = controller.get("owners"); - for(var i = 0; i < owners.length; i++) - { - if (owners[i].userName == value) - { - controller.set("showMsg", false); - Ember.set(owners[i], "name", userEntitiesMaps[value]); - if (userEntitiesMaps[value]) - { - Ember.set(owners[i], "isGroup", false); - } - else - { - Ember.set(owners[i], "isGroup", true); - } - } - } - } - }, - - source: function(request, response) { - var userEntitiesSource = controller.get("userEntitiesSource"); - var results = $.ui.autocomplete.filter(userEntitiesSource, request.term); - response(results.slice(0, 20)); - } - - }); -} - function convertPropertiesToArray(properties) { var propertyArray = []; @@ -173,7 +99,6 @@ function convertPropertiesToArray(properties) } var datasetController = null; -var detailController = null; App.DatasetsRoute = Ember.Route.extend({ setupController: function(controller) { datasetController = controller; @@ -540,62 +465,23 @@ App.DatasetRoute = Ember.Route.extend({ } }); - var ownershipUrl = 'api/v1/datasets/' + id + "/owners"; - $.get(ownershipUrl, function(data) { - if (data && data.status == "ok") - { - var owners = []; - if (data.owners && (data.owners.length > 0)) - { - owners = data.owners; - } - controller.set("owners", owners); - setTimeout(function(){ - $( "#sortedownertable" ).sortable({ - start: function(event, ui) { - var start_pos = ui.item.index(); - ui.item.data('start_pos', start_pos); - }, - update: function( event, ui ) { - var startPos = ui.item.data('start_pos'); - var endPos = ui.item.index(); - var originalOwners = controller.get("owners"); - if (!originalOwners || originalOwners.length == 0) - { - return; - } - var owners = originalOwners.slice(); - var updatedOwner = owners[startPos]; - owners.splice(startPos, 1); - owners.splice(endPos, 0, updatedOwner); - originalOwners.setObjects(owners); - setTimeout(function(){ - setOwnerNameAutocomplete(controller) - }, 500); - } - }); + Promise.resolve($.get(`api/v1/datasets/${id}/owners`)) + .then(({status, owners = []}) => (status === 'ok' && controller.set('owners', owners), void 0)) + .then($.get.bind($, 'api/v1/party/entities')) + .then(({status, userEntities = []}) => { + if (status === 'ok' && userEntities.length) { + /** + * @type {Object} userEntitiesMaps hash of userEntities: label -> displayName + */ + const userEntitiesMaps = userEntities.reduce((map, {label, displayName}) => + (map[label] = displayName, map), {}); - var allUserEntitiesUrl = 'api/v1/party/entities'; - $.get(allUserEntitiesUrl, function(data) { - if (data && data.status == "ok") - { - if (data.userEntities && (data.userEntities.length > 0)) - { - var userEntitiesMaps = {}; - for (i=0; i < data.userEntities.length; i++) - { - userEntitiesMaps[data.userEntities[i].label] = data.userEntities[i].displayName; - } - var userEntitiesSource = Object.keys(userEntitiesMaps); - controller.set("userEntitiesMaps", userEntitiesMaps); - controller.set("userEntitiesSource", userEntitiesSource); - setOwnerNameAutocomplete(controller); - } - } - }); - }, 500); + controller.setProperties({ + userEntitiesSource: Object.keys(userEntitiesMaps), + userEntitiesMaps + }); } - }); + }); }, model: function ({id}) {