DropZone.js 1.74 KB
/**
 * @class SimpleTasks.ux.DropZone
 * @extends Ext.tree.ViewDropZone
 * @private
 */
Ext.define('SimpleTasks.ux.DropZone', {
    extend: 'Ext.tree.ViewDropZone',

    handleNodeDrop : function(data, overRecord, position) {
        var droppedRecord = data.records[0];

        if(droppedRecord instanceof SimpleTasks.model.Task) {
            this.cancelExpand();
            this.fireViewEvent('taskdrop', droppedRecord, overRecord);
        } else if(droppedRecord instanceof SimpleTasks.model.List) {
            this.callParent(arguments);
            this.fireViewEvent('listdrop', droppedRecord, overRecord, position);
        }
    },

    onNodeOver: function(node, dragZone, e, data) {
        var me = this,
            view = me.view,
            overRecord = view.getRecord(node),
            position = me.getPosition(e, node),
            targetNode = view.getRecord(node);

        // if we're dragging to reorder rows within the List Tree, then call superclass onNodeOver.
        // This allows the superclass to show the visual position indicator.
        // Otherwise if we're dragging a Task from the Task Grid, do not show the indicator, since we want
        // to give the appearance of the dragged record being dropped ON a node, not in between nodes.
        if(data.records[0] instanceof SimpleTasks.model.List) {
            return me.callParent(arguments);
        }

        // auto node expand check
        this.cancelExpand();
        if (position == 'append' && !this.expandProcId && !Ext.Array.contains(data.records, targetNode) && !targetNode.isLeaf() && !targetNode.isExpanded()) {
            this.queueExpand(targetNode);
        }
 
        me.overRecord = overRecord;
        me.valid = true;
        return me.dropAllowed;
    }

});