Create validation on node drop
If a backend service return an rejected promise, node should not be moved.
Example of usage from an agular directive:
oc.$chart .on('validate.nodedropped.orgchart', event => { let defer = $q.defer(); CustomerHierarchyService .moveSection(event.draggedNode[0].id, event.dropZone[0].id) .then(() => { Message.showSuccess("Section was successfully moved!"); defer.resolve(); }) .catch((error) => { Message.showError(error.data.responseStatus.message); defer.reject(); });
return defer.promise;
})
.on('click','.node', function () {
var $this = $(this);
$('#selected-node').val($this.find('.title').text()).data('node', $this);
})
.on('dblclick','.node', function () {
editNode($(this));
})
.on('click', '.orgchart', event => {
if (!$(event.target).closest('.node').length) {
$('#selected-node').val('');
}
});
It would be nice to get some feedback on this PR. I saw it was not merged into the latest release.
Hi @maslunde , sorry for late replay. I guess I got your points. I still have the following concerns:
- We already have dropCriteria option. Please try out this demo and drag/drop one node with "manager" word.
- Is it a good practice to check whether a node is droppable depending on deferred object?
Hi @dabeng, thank you for your answer. Let me be more precise in our need. The dropCriteria option is a good thing when you know the valid dropZones nodes when you start dragging the node. In our case we don't know. It`s based on a lot of rules in another system, so the client must rely on the response it get. That happens asynchronous. Of course this could be implied to add, remove, edit as well. For now drop criteria is enough.