diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 708dd4e..70a1a45 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -10,6 +10,8 @@ declare module 'vue' { About: typeof import('./src/components/settings/About.vue')['default'] Appearance: typeof import('./src/components/settings/Appearance.vue')['default'] ArrayInput: typeof import('./src/components/ArrayInput.vue')['default'] + ArrayInputGeneral: typeof import('./src/components/ArrayInputGeneral.vue')['default'] + ArrayInputXDockge: typeof import('./src/components/ArrayInputXDockge.vue')['default'] ArraySelect: typeof import('./src/components/ArraySelect.vue')['default'] BDropdown: typeof import('bootstrap-vue-next')['BDropdown'] BDropdownItem: typeof import('bootstrap-vue-next')['BDropdownItem'] diff --git a/frontend/src/components/ArrayInput.vue b/frontend/src/components/ArrayInput.vue index 2271083..09587c9 100644 --- a/frontend/src/components/ArrayInput.vue +++ b/frontend/src/components/ArrayInput.vue @@ -30,6 +30,10 @@ export default { displayName: { type: String, required: true, + }, + objectType: { + type: String, + default: "service", } }, data() { @@ -41,8 +45,7 @@ export default { array() { // Create the array if not exists, it should be safe. if (!this.service[this.name]) { - // eslint-disable-next-line vue/no-side-effects-in-computed-properties - this.service[this.name] = []; + return []; } return this.service[this.name]; }, @@ -56,8 +59,24 @@ export default { return this.service[this.name] !== undefined; }, + /** + * Not a good name, but it is used to get the object. + */ service() { - return this.$parent.$parent.service; + if (this.objectType === "service") { + // Used in Container.vue + return this.$parent.$parent.service; + } else if (this.objectType === "x-dockge") { + + if (!this.$parent.$parent.jsonConfig["x-dockge"]) { + return {}; + } + + // Used in Compose.vue + return this.$parent.$parent.jsonConfig["x-dockge"]; + } else { + return {}; + } }, valid() { @@ -81,6 +100,19 @@ export default { }, methods: { addField() { + + // Create the object if not exists. + if (this.objectType === "x-dockge") { + if (!this.$parent.$parent.jsonConfig["x-dockge"]) { + this.$parent.$parent.jsonConfig["x-dockge"] = {}; + } + } + + // Create the array if not exists. + if (!this.service[this.name]) { + this.service[this.name] = []; + } + this.array.push(""); }, remove(index) { diff --git a/frontend/src/components/ArraySelect.vue b/frontend/src/components/ArraySelect.vue index ebf505c..40152ba 100644 --- a/frontend/src/components/ArraySelect.vue +++ b/frontend/src/components/ArraySelect.vue @@ -49,8 +49,7 @@ export default { array() { // Create the array if not exists, it should be safe. if (!this.service[this.name]) { - // eslint-disable-next-line vue/no-side-effects-in-computed-properties - this.service[this.name] = []; + return []; } return this.service[this.name]; }, @@ -89,6 +88,10 @@ export default { }, methods: { addField() { + // Create the array if not exists. + if (!this.service[this.name]) { + this.service[this.name] = []; + } this.array.push(""); }, remove(index) { diff --git a/frontend/src/lang/en.json b/frontend/src/lang/en.json index e63df08..5190f69 100644 --- a/frontend/src/lang/en.json +++ b/frontend/src/lang/en.json @@ -91,5 +91,6 @@ "Allowed commands:": "Allowed commands:", "Internal Networks": "Internal Networks", "External Networks": "External Networks", - "No External Networks": "No External Networks" + "No External Networks": "No External Networks", + "url": "URL | URLs" } diff --git a/frontend/src/pages/Compose.vue b/frontend/src/pages/Compose.vue index fa8a727..c2fb67a 100644 --- a/frontend/src/pages/Compose.vue +++ b/frontend/src/pages/Compose.vue @@ -56,6 +56,13 @@ + +
+