datahub/wherehows-web/app/components/dataset-author.js
2017-07-10 09:54:14 -07:00

128 lines
3.9 KiB
JavaScript

import Ember from 'ember';
export default Ember.Component.extend({
$ownerTable: null,
didInsertElement() {
this._super(...arguments);
// Cache reference to element on component
this.set('$ownerTable', $('[data-attribute=owner-table]'));
// Apply jQuery sortable plugin to element
this.get('$ownerTable')
.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);
}
}
});
},
willDestroyElement() {
this._super(...arguments);
// Removes the sortable functionality from the cached DOM element reference
this.get('$ownerTable').sortable('destroy');
},
actions: {
addOwner: function (data) {
var owners = data;
var controller = this.get("parentController");
var currentUser = this.get("currentUser");
var addedOwner = {
"userName": "Owner", "email": null, "name": "", "isGroup": false,
"namespace": "urn:li:griduser", "type": "Producer", "subType": null, "sortId": 0
};
var userEntitiesSource = controller.get("userEntitiesSource");
var userEntitiesMaps = controller.get("userEntitiesMaps");
var exist = false;
if (owners && owners.length > 0) {
owners.forEach(function (owner) {
if (owner.userName == addedOwner.userName) {
exist = true;
}
});
}
if (!exist) {
owners.unshiftObject(addedOwner);
setTimeout(function () {
setOwnerNameAutocomplete(controller)
}, 500);
}
else {
console.log("The owner is already exist");
}
},
removeOwner: function (owners, owner) {
if (owners && owner) {
owners.removeObject(owner);
}
},
confirmOwner: function (owner, confirm) {
var obj = $('#loggedInUser');
if (obj) {
var loggedInUser = obj.attr("title");
if (loggedInUser && owner) {
if (confirm) {
Ember.set(owner, "confirmedBy", loggedInUser);
}
else {
Ember.set(owner, "confirmedBy", null);
}
}
}
},
updateOwners: function (owners) {
let controller = this.get("parentController");
var showMsg = controller.get("showMsg");
if (showMsg) {
return;
}
var model = controller.get("model");
if (!model || !model.id) {
return;
}
var url = "/api/v1/datasets/" + model.id + "/owners";
var token = ($("#csrfToken").val() || '').replace('/', '');
$.ajax({
url: url,
method: 'POST',
header: {
'Csrf-Token': token
},
data: {
csrfToken: token,
owners: JSON.stringify(owners)
}
}).done(function (data, txt, xhr) {
if (data.status == "success") {
this.set('showMsg', true);
this.set('alertType', "alert-success");
this.set('ownerMessage', "Ownership successfully updated.");
}
else {
this.set('showMsg', true);
this.set('alertType', "alert-danger");
this.set('ownerMessage', "Ownership update failed.");
}
}.bind(this)).fail(function (xhr, txt, error) {
this.set('showMsg', true);
this.set('alertType', "alert-danger");
this.set('ownerMessage', "Ownership update failed.");
});
}
}
});