all files / diagram/entity-relationship/ er-field-reorder-util.js

100% Statements 99/99
85.25% Branches 52/61
100% Functions 12/12
100% Lines 96/96
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137     56× 56×   55× 170× 170×   11×           11×   39× 39× 39× 39× 77× 77×     77×   75×     39×   11× 11×                                                  
define(["require", "exports", "../primitives/size", "../utility/base-util", "../enum/enum"], function (require, exports, size_1, base_util_1, enum_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    function getErFieldChildIndex(fieldIndex) {
        return fieldIndex + 1;
    }
    function getErFieldNodes(entityNode, diagram) {
        var fields = [];
        if (!entityNode.children) {
            return fields;
        }
        return entityNode.children
            .map(function (childId) { return diagram.nameTable["" + childId]; })
            .filter(function (child) { return child && child.isErField === true; });
    }
    exports.getErFieldNodes = getErFieldNodes;
    function calculateFieldDropIndex(entityNode, sourceField, targetField, cursorY, diagram) {
        var fields = getErFieldNodes(entityNode, diagram);
        var sourceIndex = fields.findIndex(function (f) { return f.id === sourceField.id; });
        var targetIndex = fields.findIndex(function (f) { return f.id === targetField.id; });
        if (targetIndex === -1) {
            return sourceIndex;
        }
        var targetBounds = targetField.wrapper.bounds;
        var fieldCenter = targetBounds.y + (targetBounds.height / 2);
        var dropIndex;
        if (cursorY >= fieldCenter) {
            dropIndex = targetIndex + 1;
        }
        else {
            dropIndex = targetIndex;
        }
        return dropIndex;
    }
    exports.calculateFieldDropIndex = calculateFieldDropIndex;
    function getErFieldIndexByNodeId(nodeId, entityNode, diagram) {
        var fields = getErFieldNodes(entityNode, diagram);
        var index = fields.findIndex(function (f) { return f.id === nodeId; });
        return index;
    }
    exports.getErFieldIndexByNodeId = getErFieldIndexByNodeId;
    function updateErFieldColors(entityNode, diagram) {
        var fields = getErFieldNodes(entityNode, diagram);
        var shape = entityNode.shape;
        var alternateRowColors = shape.fieldDefaults.alternateRowColors;
        for (var i = 0; i < fields.length; i++) {
            var fieldNode = fields[parseInt(i.toString(), 10)];
            var fieldShape = (shape.fields && shape.fields[parseInt(i.toString(), 10)])
                ? shape.fields[parseInt(i.toString(), 10)]
                : null;
            if (fieldShape && fieldShape.style && fieldShape.style.fill !== 'none') {
                fieldNode.style.fill = fieldShape.style.fill;
            }
            else if (alternateRowColors && alternateRowColors.length >= 2) {
                var patternColor = alternateRowColors[i % 2];
                fieldNode.style.fill = patternColor;
            }
        }
        return;
    }
    exports.updateErFieldColors = updateErFieldColors;
    function reorderErField(entityNode, sourceFieldIndex, targetFieldIndex, diagram) {
        var shape = entityNode.shape;
        if (sourceFieldIndex < 0 || sourceFieldIndex >= shape.fields.length) {
            return null;
        }
        if (targetFieldIndex < 0 || targetFieldIndex > shape.fields.length) {
            return null;
        }
        if (sourceFieldIndex === targetFieldIndex) {
            return null;
        }
        var isUndoRedo = false;
        if (diagram.diagramActions & enum_1.DiagramAction.UndoRedo) {
            isUndoRedo = true;
        }
        var eventManager = diagram && diagram.erDiagramsModule ? diagram.erDiagramsModule.eventManager : null;
        var oldValue = { fields: shape.fields ? shape.fields.slice() : [] };
        var adjustedInsertIndex = (sourceFieldIndex < targetFieldIndex) && !isUndoRedo ? targetFieldIndex - 1 : targetFieldIndex;
        var newFields = shape.fields ? shape.fields.slice() : [];
        var previewMovedField = newFields.splice(sourceFieldIndex, 1)[0];
        newFields.splice(adjustedInsertIndex, 0, previewMovedField);
        Eif (eventManager) {
            var startAllowed = eventManager.fireEREntityChanged(diagram, entityNode, oldValue, { fields: newFields }, 'Start');
            if (!startAllowed) {
                return null;
            }
            var progressAllowed = eventManager.fireEREntityChanged(diagram, entityNode, oldValue, { fields: newFields }, 'Progress');
            if (!progressAllowed) {
                return null;
            }
        }
        var movedField = shape.fields.splice(sourceFieldIndex, 1)[0];
        shape.fields.splice(adjustedInsertIndex, 0, movedField);
        var undoElement = {
            source: base_util_1.cloneObject(entityNode), sourceIndex: sourceFieldIndex,
            targetIndex: adjustedInsertIndex
        };
        var sourceChildIndex = getErFieldChildIndex(sourceFieldIndex);
        var targetChildIndex = getErFieldChildIndex(adjustedInsertIndex);
        var movedChildId = entityNode.children.splice(sourceChildIndex, 1)[0];
        entityNode.children.splice(targetChildIndex, 0, movedChildId);
        Eif (sourceChildIndex < entityNode.wrapper.children.length && targetChildIndex <= entityNode.wrapper.children.length) {
            var movedWrapperChild = entityNode.wrapper.children.splice(sourceChildIndex, 1)[0];
            entityNode.wrapper.children.splice(targetChildIndex, 0, movedWrapperChild);
        }
        entityNode.wrapper.measure(new size_1.Size(entityNode.width, entityNode.height));
        entityNode.wrapper.arrange(entityNode.wrapper.desiredSize);
        Eif (entityNode.wrapper.desiredSize) {
            entityNode.width = entityNode.wrapper.desiredSize.width;
            entityNode.height = entityNode.wrapper.desiredSize.height;
        }
        updateErFieldColors(entityNode, diagram);
        diagram.updateDiagramObject(entityNode);
        diagram.updateDiagramElementQuad();
        Eif (eventManager) {
            eventManager.fireEREntityChanged(diagram, entityNode, oldValue, { fields: shape.fields.slice() }, 'Completed');
        }
        var movedFieldNode = diagram.nameTable["" + movedChildId];
        Eif (movedFieldNode) {
            diagram.commandHandler.select(movedFieldNode);
        }
        var redoElement = {
            source: base_util_1.cloneObject(entityNode), sourceIndex: adjustedInsertIndex,
            targetIndex: sourceFieldIndex
        };
        var entry = {
            type: 'ErFieldPositionChanged',
            undoObject: undoElement,
            redoObject: redoElement,
            category: 'Internal'
        };
        return entry;
    }
    exports.reorderErField = reorderErField;
});