Files
backroad/app/portainer/components/stack-duplication-form/stack-duplication-form-controller.js
Chaim Lev-Ari 9b4870d57e feat(stack-details): Add the ability to duplicate a stack (#2278)
* feat(stack-details): add duplicate-stack button

* feat(stack-details): add stack-duplication-form component

* feat(stack-details): add duplicate stack method on controller

* feat(stack-details): add duplicate stack method

* feat(stack-details): remove old duplication in progress flag

* feat(stack-details): combine migration and duplication forms

* feat(stack-details): pass new stack name to server

* feat(stack-details): add option to rename migrated stack

* feat(stack-details): disable both migrate/duplicate buttons

* feat(stack-details): disable migration button on same endpoint

* feat(stack-details): change duplicate icon

* style(stack-details): remove whitespaces and fix pattern

* feat(stack-details): add name to migration payload in swagger.yml

* style(stack-details): add semicolon

* bug(stack-details): toggle endpoints before and after duplication
2018-10-01 14:36:49 +13:00

77 lines
2.1 KiB
JavaScript

angular.module('portainer.app').controller('StackDuplicationFormController', [
'Notifications',
function StackDuplicationFormController(Notifications) {
var ctrl = this;
ctrl.state = {
duplicationInProgress: false,
migrationInProgress: false
};
ctrl.formValues = {
endpoint: null,
newName: ''
};
ctrl.isFormValidForDuplication = isFormValidForDuplication;
ctrl.isFormValidForMigration = isFormValidForMigration;
ctrl.duplicateStack = duplicateStack;
ctrl.migrateStack = migrateStack;
ctrl.isMigrationButtonDisabled = isMigrationButtonDisabled;
function isFormValidForMigration() {
return ctrl.formValues.endpoint && ctrl.formValues.endpoint.Id;
}
function isFormValidForDuplication() {
return isFormValidForMigration() && ctrl.formValues.newName;
}
function duplicateStack() {
if (!ctrl.formValues.newName) {
Notifications.error(
'Failure',
null,
'Stack name is required for duplication'
);
return;
}
ctrl.state.duplicationInProgress = true;
ctrl.onDuplicate({
endpointId: ctrl.formValues.endpoint.Id,
name: ctrl.formValues.newName ? ctrl.formValues.newName : undefined
})
.finally(function() {
ctrl.state.duplicationInProgress = false;
});
}
function migrateStack() {
ctrl.state.migrationInProgress = true;
ctrl.onMigrate({
endpointId: ctrl.formValues.endpoint.Id,
name: ctrl.formValues.newName ? ctrl.formValues.newName : undefined
})
.finally(function() {
ctrl.state.migrationInProgress = false;
});
}
function isMigrationButtonDisabled() {
return (
!ctrl.isFormValidForMigration() ||
ctrl.state.duplicationInProgress ||
ctrl.state.migrationInProgress ||
isTargetEndpointAndCurrentEquals()
);
}
function isTargetEndpointAndCurrentEquals() {
return (
ctrl.formValues.endpoint &&
ctrl.formValues.endpoint.Id === ctrl.currentEndpointId
);
}
}
]);