diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js b/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js
index fc3e84165..52df40cd6 100644
--- a/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js
+++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js
@@ -2,26 +2,10 @@ angular
.module('portainer.docker')
.controller('NodeAvailabilitySelectController', [
function NodeAvailabilitySelectController() {
- this.state = {
- hasChanges: false
- };
this.onChange = onChange;
- this.save = save;
- this.cancelChanges = cancelChanges;
function onChange() {
- this.state.hasChanges = this.originalValue !== this.availability;
- }
-
- function save() {
this.onSave({ availability: this.availability });
}
-
- function cancelChanges() {
- this.state.hasChanges = false;
- this.availability = this.originalValue;
- }
-
-
}
]);
diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html
index e41bc4e9f..94e086127 100644
--- a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html
+++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.html
@@ -5,17 +5,4 @@
-
\ No newline at end of file
diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js b/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js
index ec00f1fa2..44be93d7d 100644
--- a/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js
+++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js
@@ -3,14 +3,11 @@ angular.module('portainer.docker').controller('NodeLabelsTableController', [
var ctrl = this;
ctrl.removeLabel = removeLabel;
ctrl.updateLabel = updateLabel;
- ctrl.save = save;
- ctrl.hasChanges = false;
- ctrl.cancelChanges = cancelChanges;
function removeLabel(index) {
var label = ctrl.labels.splice(index, 1);
if (label !== null) {
- ctrl.hasChanges = true;
+ ctrl.onChangedLabels({ labels: ctrl.labels });
}
}
@@ -19,13 +16,11 @@ angular.module('portainer.docker').controller('NodeLabelsTableController', [
label.value !== label.originalValue ||
label.key !== label.originalKey
) {
- ctrl.hasChanges = true;
+ ctrl.onChangedLabels({ labels: ctrl.labels });
}
}
- function save() {
- ctrl.onChangedLabels({ labels: ctrl.labels });
- }
+
function cancelChanges() {
ctrl.labels = ctrl.labels
diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html
index aceaff848..86eee9356 100644
--- a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html
+++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.html
@@ -31,23 +31,5 @@
-
- |
-
-
- |
-
\ No newline at end of file
diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js
index 58677c583..65e376d99 100644
--- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js
+++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js
@@ -1,27 +1,33 @@
angular
.module('portainer.docker')
.controller('SwarmNodeDetailsPanelController', [
- function SwarmNodeDetailsPanelController() {
- this.state = {
- managerAddress: ''
+ 'NodeService', 'LabelHelper', 'Notifications', '$state',
+ function SwarmNodeDetailsPanelController(NodeService, LabelHelper, Notifications, $state) {
+ var ctrl = this;
+ ctrl.state = {
+ managerAddress: '',
+ hasChanges: false
};
- this.$onChanges = $onChanges;
- this.addLabel = addLabel;
- this.updateNodeLabels = updateNodeLabels;
- this.updateNodeAvailability = updateNodeAvailability;
+ ctrl.$onChanges = $onChanges;
+ ctrl.addLabel = addLabel;
+ ctrl.updateNodeLabels = updateNodeLabels;
+ ctrl.updateNodeAvailability = updateNodeAvailability;
+ ctrl.saveChanges = saveChanges;
+ ctrl.cancelChanges = cancelChanges;
+
var managerRole = 'manager';
function $onChanges() {
- if (!this.details) {
+ if (!ctrl.details) {
return;
}
- if (this.details.role === managerRole) {
- this.state.managerAddress = '(' + this.details.managerAddress + ')';
+ if (ctrl.details.role === managerRole) {
+ ctrl.state.managerAddress = '(' + ctrl.details.managerAddress + ')';
}
}
function addLabel() {
- this.details.nodeLabels.push({
+ ctrl.details.nodeLabels.push({
key: '',
value: '',
originalValue: '',
@@ -30,11 +36,61 @@ angular
}
function updateNodeLabels(labels) {
- this.onChangedLabels({ labels: labels });
+ ctrl.details.nodeLabels = labels;
+ ctrl.state.hasChanges = true;
}
function updateNodeAvailability(availability) {
- this.onChangedAvailability({ availability: availability });
+ ctrl.details.availability = availability;
+ ctrl.state.hasChanges = true;
+ }
+
+ function saveChanges() {
+ var originalNode = ctrl.originalNode;
+ var config = {
+ Name: originalNode.Name,
+ Availability: ctrl.details.availability,
+ Role: originalNode.Role,
+ Labels: LabelHelper.fromKeyValueToLabelHash(ctrl.details.nodeLabels),
+ Id: originalNode.Id,
+ Version: originalNode.Version
+ };
+
+ NodeService.updateNode(config)
+ .then(onUpdateSuccess)
+ .catch(notifyOnError);
+
+ function onUpdateSuccess() {
+ Notifications.success('Node successfully updated', 'Node updated');
+ $state.go(
+ 'docker.nodes.node',
+ { id: originalNode.Id },
+ { reload: true }
+ );
+ }
+
+ function notifyOnError(error) {
+ Notifications.error('Failure', error, 'Failed to update node');
+ }
+ }
+
+ function cancelChanges() {
+ cancelLabelChanges();
+ ctrl.details.availability = ctrl.originalNode.Availability;
+ ctrl.state.hasChanges = false;
+ }
+
+ function cancelLabelChanges() {
+ ctrl.details.nodeLabels = ctrl.details.nodeLabels
+ .filter(function(label) {
+ return label.originalValue || label.originalKey;
+ })
+ .map(function(label) {
+ return Object.assign(label, {
+ value: label.originalValue,
+ key: label.originalKey
+ });
+ });
}
}
]);
diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html
index 35f73e2a1..61370725a 100644
--- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html
+++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html
@@ -16,15 +16,15 @@
| Availability |
-
+
+
|
| Status |
- {{ $ctrl.details.status }} |
+ {{
+ $ctrl.details.status }} |
| Engine Labels |
@@ -39,14 +39,36 @@
Node Labels
-
- |
+
+
+ |
+
|
+
+ |
+
+ |
+
+
diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js
index 275b44240..7eea3e708 100644
--- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js
+++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js
@@ -4,7 +4,6 @@ angular.module('portainer.docker').component('swarmNodeDetailsPanel', {
controller: 'SwarmNodeDetailsPanelController',
bindings: {
details: '<',
- onChangedLabels: '&',
- onChangedAvailability: '&'
+ originalNode: '<'
}
});
diff --git a/app/docker/views/nodes/node-details/node-details-view-controller.js b/app/docker/views/nodes/node-details/node-details-view-controller.js
index 8810ce8a7..ef914768f 100644
--- a/app/docker/views/nodes/node-details/node-details-view-controller.js
+++ b/app/docker/views/nodes/node-details/node-details-view-controller.js
@@ -1,12 +1,9 @@
angular.module('portainer.docker').controller('NodeDetailsViewController', [
- '$stateParams', 'NodeService', 'LabelHelper', 'Notifications', '$state', 'StateManager', 'AgentService',
- function NodeDetailsViewController($stateParams, NodeService, LabelHelper, Notifications, $state, StateManager, AgentService) {
+ '$stateParams', 'NodeService', 'StateManager', 'AgentService',
+ function NodeDetailsViewController($stateParams, NodeService, StateManager, AgentService) {
var ctrl = this;
- var originalNode;
ctrl.$onInit = initView;
- ctrl.updateLabels = updateLabels;
- ctrl.updateAvailability = updateAvailability;
ctrl.state = {
isAgent: false
@@ -18,7 +15,7 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [
var nodeId = $stateParams.id;
NodeService.node(nodeId).then(function(node) {
- originalNode = node;
+ ctrl.originalNode = node;
ctrl.hostDetails = buildHostDetails(node);
ctrl.engineDetails = buildEngineDetails(node);
ctrl.nodeDetails = buildNodeDetails(node);
@@ -76,39 +73,9 @@ angular.module('portainer.docker').controller('NodeDetailsViewController', [
};
}
- function updateLabels(labels) {
- originalNode.Labels = labels;
- updateNode(originalNode);
- }
+
- function updateAvailability(availability) {
- originalNode.Availability = availability;
- updateNode(originalNode);
- }
-
- function updateNode(node) {
- var config = {
- Name: node.Name,
- Availability: node.Availability,
- Role: node.Role,
- Labels: LabelHelper.fromKeyValueToLabelHash(node.Labels),
- Id: node.Id,
- Version: node.Version
- };
-
- NodeService.updateNode(config)
- .then(onUpdateSuccess)
- .catch(notifyOnError);
-
- function onUpdateSuccess() {
- Notifications.success('Node successfully updated', 'Node updated');
- $state.go('docker.nodes.node', { id: node.Id }, { reload: true });
- }
-
- function notifyOnError(error) {
- Notifications.error('Failure', error, 'Failed to update node');
- }
- }
+
function transformPlugins(pluginsList, type) {
return pluginsList
diff --git a/app/docker/views/nodes/node-details/node-details-view.html b/app/docker/views/nodes/node-details/node-details-view.html
index 92815fe3e..85c02f538 100644
--- a/app/docker/views/nodes/node-details/node-details-view.html
+++ b/app/docker/views/nodes/node-details/node-details-view.html
@@ -5,7 +5,6 @@
>
\ No newline at end of file