diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/locales/en-US/editor.json b/packages/node_modules/@node-red/editor-api/lib/editor/locales/en-US/editor.json index 550b9c6f5..07aacaff7 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/locales/en-US/editor.json +++ b/packages/node_modules/@node-red/editor-api/lib/editor/locales/en-US/editor.json @@ -172,7 +172,10 @@ "modifiedFlowsDesc": "Only deploys flows that contain changed nodes", "modifiedNodes": "Modified Nodes", "modifiedNodesDesc": "Only deploys nodes that have changed", + "restartFlows": "Restart Flows", + "restartFlowsDesc": "Restarts the current deployed flows", "successfulDeploy": "Successfully deployed", + "successfulRestart": "Successfully restarted flows", "deployFailed": "Deploy failed: __message__", "unusedConfigNodes":"You have some unused configuration nodes.", "unusedConfigNodesLink":"Click here to see them", diff --git a/packages/node_modules/@node-red/editor-client/src/images/deploy-reload.png b/packages/node_modules/@node-red/editor-client/src/images/deploy-reload.png new file mode 100644 index 000000000..197fc610d Binary files /dev/null and b/packages/node_modules/@node-red/editor-client/src/images/deploy-reload.png differ diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js b/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js index a8c10930a..772acb567 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js @@ -67,7 +67,10 @@ RED.deploy = (function() { options: [ {id:"deploymenu-item-full",toggle:"deploy-type",icon:"red/images/deploy-full.png",label:RED._("deploy.full"),sublabel:RED._("deploy.fullDesc"),selected: true, onselect:function(s) { if(s){changeDeploymentType("full")}}}, {id:"deploymenu-item-flow",toggle:"deploy-type",icon:"red/images/deploy-flows.png",label:RED._("deploy.modifiedFlows"),sublabel:RED._("deploy.modifiedFlowsDesc"), onselect:function(s) {if(s){changeDeploymentType("flows")}}}, - {id:"deploymenu-item-node",toggle:"deploy-type",icon:"red/images/deploy-nodes.png",label:RED._("deploy.modifiedNodes"),sublabel:RED._("deploy.modifiedNodesDesc"),onselect:function(s) { if(s){changeDeploymentType("nodes")}}} + {id:"deploymenu-item-node",toggle:"deploy-type",icon:"red/images/deploy-nodes.png",label:RED._("deploy.modifiedNodes"),sublabel:RED._("deploy.modifiedNodesDesc"),onselect:function(s) { if(s){changeDeploymentType("nodes")}}}, + null, + {id:"deploymenu-item-reload", icon:"red/images/deploy-reload.png",label:RED._("deploy.restartFlows"),sublabel:RED._("deploy.restartFlowsDesc"),onselect:"core:restart-flows"}, + ] }); } else if (type == "simple") { @@ -96,6 +99,7 @@ RED.deploy = (function() { }); RED.actions.add("core:deploy-flows",save); + RED.actions.add("core:restart-flows",restart); RED.events.on('nodes:change',function(state) { @@ -257,6 +261,56 @@ RED.deploy = (function() { } return list; } + + function restart() { + var startTime = Date.now(); + $(".deploy-button-content").css('opacity',0); + $(".deploy-button-spinner").show(); + var deployWasEnabled = !$("#btn-deploy").hasClass("disabled"); + $("#btn-deploy").addClass("disabled"); + deployInflight = true; + $("#header-shade").show(); + $("#editor-shade").show(); + $("#palette-shade").show(); + $("#sidebar-shade").show(); + + $.ajax({ + url:"flows", + type: "POST", + headers: { + "Node-RED-Deployment-Type":"reload" + } + }).done(function(data,textStatus,xhr) { + if (deployWasEnabled) { + $("#btn-deploy").removeClass("disabled"); + } + RED.notify('

'+RED._("deploy.successfulRestart")+'

',"success"); + }).fail(function(xhr,textStatus,err) { + if (deployWasEnabled) { + $("#btn-deploy").removeClass("disabled"); + } + if (xhr.status === 401) { + RED.notify(RED._("deploy.deployFailed",{message:RED._("user.notAuthorized")}),"error"); + } else if (xhr.status === 409) { + resolveConflict(nns, true); + } else if (xhr.responseText) { + RED.notify(RED._("deploy.deployFailed",{message:xhr.responseText}),"error"); + } else { + RED.notify(RED._("deploy.deployFailed",{message:RED._("deploy.errors.noResponse")}),"error"); + } + }).always(function() { + deployInflight = false; + var delta = Math.max(0,300-(Date.now()-startTime)); + setTimeout(function() { + $(".deploy-button-content").css('opacity',1); + $(".deploy-button-spinner").hide(); + $("#header-shade").hide(); + $("#editor-shade").hide(); + $("#palette-shade").hide(); + $("#sidebar-shade").hide(); + },delta); + }); + } function save(skipValidation,force) { if (!$("#btn-deploy").hasClass("disabled")) { if (!RED.user.hasPermission("flows.write")) {