diff --git a/app/docker/views/services/edit/serviceController.js b/app/docker/views/services/edit/serviceController.js
index 571101cba..8a3305e7e 100644
--- a/app/docker/views/services/edit/serviceController.js
+++ b/app/docker/views/services/edit/serviceController.js
@@ -19,8 +19,8 @@ require('./includes/updateconfig.html');
import _ from 'lodash-es';
+import * as envVarsUtils from '@/react/components/form-components/EnvironmentVariablesFieldset/utils';
import { PorImageRegistryModel } from 'Docker/models/porImageRegistry';
-import * as envVarsUtils from '@/portainer/helpers/env-vars';
import { ResourceControlType } from '@/react/portainer/access-control/types';
import { confirmServiceForceUpdate } from '@/react/docker/services/common/update-service-modal';
import { confirm, confirmDelete } from '@@/modals/confirm';
@@ -125,8 +125,10 @@ angular.module('portainer.docker').controller('ServiceController', [
};
$scope.addEnvironmentVariable = function addEnvironmentVariable(service) {
- service.EnvironmentVariables.push({ name: '', value: '' });
- updateServiceArray(service, 'EnvironmentVariables', service.EnvironmentVariables);
+ $scope.$evalAsync(() => {
+ service.EnvironmentVariables = service.EnvironmentVariables.concat({ name: '', value: '' });
+ updateServiceArray(service, 'EnvironmentVariables', service.EnvironmentVariables);
+ });
};
$scope.onChangeEnvVars = onChangeEnvVars;
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-panel.controller.js b/app/portainer/components/environment-variables-panel/environment-variables-panel.controller.js
deleted file mode 100644
index c2b09060e..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-panel.controller.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import { parseDotEnvFile, convertToArrayOfStrings } from '@/portainer/helpers/env-vars';
-
-export default class EnvironmentVariablesPanelController {
- /* @ngInject */
- constructor() {
- this.mode = 'simple';
- this.editorText = '';
-
- this.switchEnvMode = this.switchEnvMode.bind(this);
- this.editorUpdate = this.editorUpdate.bind(this);
- this.handleSimpleChange = this.handleSimpleChange.bind(this);
- }
-
- switchEnvMode() {
- if (this.mode === 'simple') {
- const editorText = convertToArrayOfStrings(this.ngModel).join('\n');
-
- this.editorText = editorText;
-
- this.mode = 'advanced';
- } else {
- this.mode = 'simple';
- }
- }
-
- handleSimpleChange(value) {
- this.onChange(value);
- }
-
- editorUpdate(value) {
- this.editorText = value;
- this.onChange(parseDotEnvFile(this.editorText));
- }
-}
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-panel.css b/app/portainer/components/environment-variables-panel/environment-variables-panel.css
deleted file mode 100644
index 84b30444e..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-panel.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.environment-variables-panel {
- margin-top: 15px;
-}
-
-.environment-variables-panel--explanation {
- margin-bottom: 5px;
-}
-
-.environment-variables-panel--advanced > * + * {
- margin-top: 5px;
-}
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-panel.html b/app/portainer/components/environment-variables-panel/environment-variables-panel.html
deleted file mode 100644
index 6e9720b09..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-panel.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.controller.js b/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.controller.js
deleted file mode 100644
index 4b4b20b5c..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.controller.js
+++ /dev/null
@@ -1,25 +0,0 @@
-class EnvironmentVariablesSimpleModeItemController {
- onChangeName(name) {
- const fieldIsInvalid = typeof name === 'undefined';
- if (fieldIsInvalid) {
- return;
- }
-
- this.onChange(this.index, { ...this.variable, name });
- }
-
- onChangeValue(value) {
- const fieldIsInvalid = typeof value === 'undefined';
- if (fieldIsInvalid) {
- return;
- }
-
- this.onChange(this.index, { ...this.variable, value });
- }
-
- $onInit() {
- this.formName = `variableForm${this.index}`;
- }
-}
-
-export default EnvironmentVariablesSimpleModeItemController;
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.html b/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.html
deleted file mode 100644
index 0d37767df..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/index.js b/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/index.js
deleted file mode 100644
index b95b3b7db..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import angular from 'angular';
-import controller from './environment-variables-simple-mode-item.controller.js';
-
-export const environmentVariablesSimpleModeItem = {
- templateUrl: './environment-variables-simple-mode-item.html',
- controller,
-
- bindings: {
- variable: '<',
- index: '<',
-
- onChange: '<',
- onRemove: '<',
- },
-};
-
-angular.module('portainer.app').component('environmentVariablesSimpleModeItem', environmentVariablesSimpleModeItem);
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.controller.js b/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.controller.js
deleted file mode 100644
index 813911832..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.controller.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import { parseDotEnvFile } from '@/portainer/helpers/env-vars';
-
-export default class EnvironmentVariablesSimpleModeController {
- /* @ngInject */
- constructor($async) {
- this.$async = $async;
-
- this.onChangeVariable = this.onChangeVariable.bind(this);
- this.remove = this.remove.bind(this);
- }
-
- add() {
- this.onChange([...this.ngModel, { name: '', value: '' }]);
- }
-
- remove(index) {
- this.onChange(this.ngModel.filter((_, i) => i !== index));
- }
-
- addFromFile(file) {
- return this.$async(async () => {
- if (!file) {
- return;
- }
- const text = await this.getTextFromFile(file);
- const parsed = parseDotEnvFile(text);
- this.onChange(this.ngModel.concat(parsed));
- });
- }
-
- getTextFromFile(file) {
- return new Promise((resolve, reject) => {
- const temporaryFileReader = new FileReader();
- temporaryFileReader.readAsText(file);
- temporaryFileReader.onload = (event) => resolve(event.target.result);
- temporaryFileReader.onerror = (error) => reject(error);
- });
- }
-
- onChangeVariable(index, variable) {
- this.onChange(this.ngModel.map((v, i) => (i !== index ? v : variable)));
- }
-}
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.css b/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.css
deleted file mode 100644
index 1cb932846..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.css
+++ /dev/null
@@ -1,33 +0,0 @@
-.advanced-actions > * + * {
- margin-top: 5px;
-}
-
-.environment-variables-simple-mode--actions {
- display: flex;
- align-items: center;
- margin-left: 10px;
- margin-top: 10px;
-}
-
-.env-items-list {
- margin: 10px 0;
-}
-
-.env-items-list > * + * {
- margin-top: 2px;
-}
-
-.env-items-list .env-item {
- display: flex;
-}
-
-.env-item .env-item-key {
-}
-
-.env-item .env-item-value {
- display: flex;
-}
-
-.env-item .env-item-value .input-group {
- flex: 1;
-}
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.html b/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.html
deleted file mode 100644
index 6f667294f..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
- Switch to advanced mode to copy & paste multiple variables
-
-
-
-
-
-
Add an environment variable
-
- Load variables from .env file
-
-
-
- File too large! Try uploading a file smaller than 1MB
-
-
-
-
- Environment changes will not take effect until redeployment occurs manually or via webhook.
-
-
diff --git a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/index.js b/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/index.js
deleted file mode 100644
index f21bfd967..000000000
--- a/app/portainer/components/environment-variables-panel/environment-variables-simple-mode/index.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import angular from 'angular';
-
-import './environment-variables-simple-mode.css';
-
-import controller from './environment-variables-simple-mode.controller';
-
-angular.module('portainer.app').component('environmentVariablesSimpleMode', {
- templateUrl: './environment-variables-simple-mode.html',
- controller,
- bindings: {
- ngModel: '<',
- onSwitchModeClick: '<',
- onChange: '<',
- showHelpMessage: '<',
- },
-});
diff --git a/app/portainer/components/environment-variables-panel/index.js b/app/portainer/components/environment-variables-panel/index.js
deleted file mode 100644
index 64240ada4..000000000
--- a/app/portainer/components/environment-variables-panel/index.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import angular from 'angular';
-
-import './environment-variables-panel.css';
-
-import controller from './environment-variables-panel.controller.js';
-
-angular.module('portainer.app').component('environmentVariablesPanel', {
- templateUrl: './environment-variables-panel.html',
- controller,
- bindings: {
- ngModel: '<',
- explanation: '@',
- onChange: '<',
- showHelpMessage: '<',
- },
-});
diff --git a/app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.html b/app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.html
index 41f019dff..cafd75c9b 100644
--- a/app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.html
+++ b/app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.html
@@ -62,8 +62,8 @@