From dfc4070dba362b7a7ea6a5b7547f8836a4fca43f Mon Sep 17 00:00:00 2001 From: mabashian Date: Wed, 16 Aug 2017 13:59:18 -0400 Subject: [PATCH] Fixed some delete workflow node bugs --- .../workflow-maker.controller.js | 85 +++++++++++++++---- .../templates/workflows/workflow.service.js | 2 - 2 files changed, 70 insertions(+), 17 deletions(-) diff --git a/awx/ui/client/src/templates/workflows/workflow-maker/workflow-maker.controller.js b/awx/ui/client/src/templates/workflows/workflow-maker/workflow-maker.controller.js index 428ada820a..f511c7a297 100644 --- a/awx/ui/client/src/templates/workflows/workflow-maker/workflow-maker.controller.js +++ b/awx/ui/client/src/templates/workflows/workflow-maker/workflow-maker.controller.js @@ -183,11 +183,13 @@ export default ['$scope', 'WorkflowService', 'GetBasePath', 'TemplatesService', }) .then(function(data) { - $scope.associateRequests.push({ - parentId: params.parentId, - nodeId: data.data.id, - edge: params.node.edgeType - }); + if(!params.node.isRoot) { + $scope.associateRequests.push({ + parentId: params.parentId, + nodeId: data.data.id, + edge: params.node.edgeType + }); + } params.node.isNew = false; continueRecursing(data.data.id); @@ -370,7 +372,7 @@ export default ['$scope', 'WorkflowService', 'GetBasePath', 'TemplatesService', edgeType = "always"; $scope.edgeFlags.showTypeOptions = false; } else { - if ((_.includes(siblingConnectionTypes, "success") || _.includes(siblingConnectionTypes, "failure")) && _.includes(siblingConnectionTypes, "always")) { + if ($scope.placeholderNode.edgeConflict) { // This is a conflicted scenario but we'll just let the user keep building - they will have to remediate before saving $scope.edgeFlags.typeRestriction = null; } else if (_.includes(siblingConnectionTypes, "success") || _.includes(siblingConnectionTypes, "failure")) { @@ -644,12 +646,12 @@ export default ['$scope', 'WorkflowService', 'GetBasePath', 'TemplatesService', // a type as this node will always be executed $scope.edgeFlags.showTypeOptions = false; } else { - if ((_.includes(siblingConnectionTypes, "success") || _.includes(siblingConnectionTypes, "failure")) && _.includes(siblingConnectionTypes, "always")) { + if (nodeToEdit.edgeConflict) { // This is a conflicted scenario but we'll just let the user keep building - they will have to remediate before saving $scope.edgeFlags.typeRestriction = null; - } else if (_.includes(siblingConnectionTypes, "success") || _.includes(siblingConnectionTypes, "failure") && (nodeToEdit.edgeType === "success" || nodeToEdit.edgeType === "failure")) { + } else if (_.includes(siblingConnectionTypes, "success") || _.includes(siblingConnectionTypes, "failure")) { $scope.edgeFlags.typeRestriction = "successFailure"; - } else if (_.includes(siblingConnectionTypes, "always") && nodeToEdit.edgeType === "always") { + } else if (_.includes(siblingConnectionTypes, "always")) { $scope.edgeFlags.typeRestriction = "always"; } else { $scope.edgeFlags.typeRestriction = null; @@ -759,12 +761,6 @@ export default ['$scope', 'WorkflowService', 'GetBasePath', 'TemplatesService', nodeToBeDeleted: $scope.nodeToBeDeleted }); - if($scope.workflowMakerFormConfig.nodeMode === "add") { - if($scope.placeholderNode.isRoot) { - $scope.edgeFlags.showTypeOptions = false; - } - } - if ($scope.nodeToBeDeleted.isNew !== true) { $scope.treeData.data.deletedNodes.push($scope.nodeToBeDeleted.nodeId); } @@ -780,6 +776,65 @@ export default ['$scope', 'WorkflowService', 'GetBasePath', 'TemplatesService', $scope.$broadcast("refreshWorkflowChart"); + if($scope.placeholderNode) { + let edgeType = "success"; + if($scope.placeholderNode.isRoot) { + $scope.edgeFlags.showTypeOptions = false; + edgeType = "always"; + } + else { + // we need to update the possible edges based on any new siblings + let siblingConnectionTypes = WorkflowService.getSiblingConnectionTypes({ + tree: $scope.treeData.data, + parentId: $scope.placeholderNode.parent.id, + childId: $scope.placeholderNode.id + }); + + if ($scope.placeholderNode.edgeConflict) { + // This is a conflicted scenario but we'll just let the user keep building - they will have to remediate before saving + $scope.edgeFlags.typeRestriction = null; + } else if (_.includes(siblingConnectionTypes, "success") || _.includes(siblingConnectionTypes, "failure")) { + $scope.edgeFlags.typeRestriction = "successFailure"; + } else if (_.includes(siblingConnectionTypes, "always")) { + $scope.edgeFlags.typeRestriction = "always"; + edgeType = "always"; + } else { + $scope.edgeFlags.typeRestriction = null; + } + + $scope.edgeFlags.showTypeOptions = true; + + } + $scope.$broadcast("setEdgeType", edgeType); + } + else if($scope.nodeBeingEdited) { + if($scope.nodeBeingEdited.isRoot) { + $scope.edgeFlags.showTypeOptions = false; + } + else { + let siblingConnectionTypes = WorkflowService.getSiblingConnectionTypes({ + tree: $scope.treeData.data, + parentId: $scope.nodeBeingEdited.parent.id, + childId: $scope.nodeBeingEdited.id + }); + + if ($scope.nodeBeingEdited.edgeConflict) { + // This is a conflicted scenario but we'll just let the user keep building - they will have to remediate before saving + $scope.edgeFlags.typeRestriction = null; + } else if (_.includes(siblingConnectionTypes, "success") || _.includes(siblingConnectionTypes, "failure")) { + $scope.edgeFlags.typeRestriction = "successFailure"; + } else if (_.includes(siblingConnectionTypes, "always") && $scope.nodeBeingEdited.edgeType === "always") { + $scope.edgeFlags.typeRestriction = "always"; + } else { + $scope.edgeFlags.typeRestriction = null; + } + + $scope.edgeFlags.showTypeOptions = true; + + } + $scope.$broadcast("setEdgeType", $scope.nodeBeingEdited.edgeType); + } + $scope.treeData.data.totalNodes--; } diff --git a/awx/ui/client/src/templates/workflows/workflow.service.js b/awx/ui/client/src/templates/workflows/workflow.service.js index 293672045e..5ac2998a84 100644 --- a/awx/ui/client/src/templates/workflows/workflow.service.js +++ b/awx/ui/client/src/templates/workflows/workflow.service.js @@ -45,9 +45,7 @@ export default ['$q', function($q){ child.isRoot = true; child.edgeType = "always"; } - child.parent = parentNode; - parentNode.children.push(child); }); }