mirror of
https://github.com/datahub-project/datahub.git
synced 2025-12-14 11:36:59 +00:00
Refactors DatasetAuthorComponent: Removes arbitraty setTimeout for DOM updating, converts to inline component, removes id reference to component element
This commit is contained in:
parent
3d9e054b67
commit
ae7a4a5f30
@ -389,7 +389,7 @@
|
|||||||
<th class="col-xs-1"></th>
|
<th class="col-xs-1"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id = "sortedownertable">
|
<tbody data-attribute="owner-table">
|
||||||
{{#each owners as |owner|}}
|
{{#each owners as |owner|}}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{input class="userEntity" value=owner.userName}}</td>
|
<td>{{input class="userEntity" value=owner.userName}}</td>
|
||||||
@ -662,8 +662,7 @@
|
|||||||
{{/dataset-schema}}
|
{{/dataset-schema}}
|
||||||
</div>
|
</div>
|
||||||
<div id="ownertab" class="tab-pane">
|
<div id="ownertab" class="tab-pane">
|
||||||
{{#dataset-author owners=owners ownerTypes=ownerTypes showMsg=showMsg alertType=alertType ownerMessage=ownerMessage parentController=this}}
|
{{dataset-author owners=owners ownerTypes=ownerTypes showMsg=showMsg alertType=alertType ownerMessage=ownerMessage parentController=this}}
|
||||||
{{/dataset-author}}
|
|
||||||
</div>
|
</div>
|
||||||
{{#unless isSFDC}}
|
{{#unless isSFDC}}
|
||||||
<div id="sampletab" class="tab-pane">
|
<div id="sampletab" class="tab-pane">
|
||||||
@ -752,8 +751,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="ownership" class="panel-collapse collapse" role="tabpanel" aria-labelledby="ownershipHeading">
|
<div id="ownership" class="panel-collapse collapse" role="tabpanel" aria-labelledby="ownershipHeading">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
{{#dataset-author owners=owners ownerTypes=ownerTypes showMsg=showMsg alertType=alertType ownerMessage=ownerMessage parentController=this}}
|
{{dataset-author owners=owners ownerTypes=ownerTypes showMsg=showMsg alertType=alertType ownerMessage=ownerMessage parentController=this}}
|
||||||
{{/dataset-author}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -167,6 +167,30 @@ App.DatasetImpactComponent = Ember.Component.extend({
|
|||||||
});
|
});
|
||||||
|
|
||||||
App.DatasetAuthorComponent = 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: {
|
actions: {
|
||||||
addOwner: function(data) {
|
addOwner: function(data) {
|
||||||
var owners = data;
|
var owners = data;
|
||||||
|
|||||||
@ -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)
|
function convertPropertiesToArray(properties)
|
||||||
{
|
{
|
||||||
var propertyArray = [];
|
var propertyArray = [];
|
||||||
@ -173,7 +99,6 @@ function convertPropertiesToArray(properties)
|
|||||||
}
|
}
|
||||||
|
|
||||||
var datasetController = null;
|
var datasetController = null;
|
||||||
var detailController = null;
|
|
||||||
App.DatasetsRoute = Ember.Route.extend({
|
App.DatasetsRoute = Ember.Route.extend({
|
||||||
setupController: function(controller) {
|
setupController: function(controller) {
|
||||||
datasetController = controller;
|
datasetController = controller;
|
||||||
@ -540,62 +465,23 @@ App.DatasetRoute = Ember.Route.extend({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var ownershipUrl = 'api/v1/datasets/' + id + "/owners";
|
Promise.resolve($.get(`api/v1/datasets/${id}/owners`))
|
||||||
$.get(ownershipUrl, function(data) {
|
.then(({status, owners = []}) => (status === 'ok' && controller.set('owners', owners), void 0))
|
||||||
if (data && data.status == "ok")
|
.then($.get.bind($, 'api/v1/party/entities'))
|
||||||
{
|
.then(({status, userEntities = []}) => {
|
||||||
var owners = [];
|
if (status === 'ok' && userEntities.length) {
|
||||||
if (data.owners && (data.owners.length > 0))
|
/**
|
||||||
{
|
* @type {Object} userEntitiesMaps hash of userEntities: label -> displayName
|
||||||
owners = data.owners;
|
*/
|
||||||
}
|
const userEntitiesMaps = userEntities.reduce((map, {label, displayName}) =>
|
||||||
controller.set("owners", owners);
|
(map[label] = displayName, map), {});
|
||||||
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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var allUserEntitiesUrl = 'api/v1/party/entities';
|
controller.setProperties({
|
||||||
$.get(allUserEntitiesUrl, function(data) {
|
userEntitiesSource: Object.keys(userEntitiesMaps),
|
||||||
if (data && data.status == "ok")
|
userEntitiesMaps
|
||||||
{
|
});
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
model: function ({id}) {
|
model: function ({id}) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user