mirror of
				https://github.com/datahub-project/datahub.git
				synced 2025-10-31 10:49:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			128 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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.");
 | |
|       });
 | |
|     }
 | |
|   }
 | |
| });
 | 
