From 9297fbc84418d2508f31d56d7c1374dff1a72942 Mon Sep 17 00:00:00 2001 From: Volodymyr Stelmakh <2980619+vstelmakh@users.noreply.github.com> Date: Tue, 30 Jul 2024 14:55:04 +0200 Subject: [PATCH] Add possibility to edit Deploy daemon configuration (#338) Resolves #332 ![image](https://github.com/user-attachments/assets/06a161f7-7dec-42fb-b2a9-17258a92ac77) --------- Co-authored-by: Andrey Borysenko --- appinfo/routes.php | 1 + lib/Controller/DaemonConfigController.php | 6 +- src/components/DaemonConfig/DaemonConfig.vue | 25 +++ .../DaemonConfig/DaemonConfigList.vue | 7 +- ...gModal.vue => ManageDaemonConfigModal.vue} | 151 ++++++++++++++---- 5 files changed, 150 insertions(+), 40 deletions(-) rename src/components/DaemonConfig/{RegisterDaemonConfigModal.vue => ManageDaemonConfigModal.vue} (79%) diff --git a/appinfo/routes.php b/appinfo/routes.php index 328b0425..18a92ee8 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -47,6 +47,7 @@ ['name' => 'DaemonConfig#unregisterDaemonConfig', 'url' => '/daemons/{name}', 'verb' => 'DELETE'], ['name' => 'DaemonConfig#verifyDaemonConnection', 'url' => '/daemons/{name}/check', 'verb' => 'POST'], ['name' => 'DaemonConfig#checkDaemonConnection', 'url' => '/daemons/verify_connection', 'verb' => 'POST'], + ['name' => 'DaemonConfig#updateDaemonConfig', 'url' => '/daemons/{name}', 'verb' => 'PUT'], // Test Deploy actions ['name' => 'DaemonConfig#startTestDeploy', 'url' => '/daemons/{name}/test_deploy', 'verb' => 'POST'], diff --git a/lib/Controller/DaemonConfigController.php b/lib/Controller/DaemonConfigController.php index 7b933ab5..36561bb1 100644 --- a/lib/Controller/DaemonConfigController.php +++ b/lib/Controller/DaemonConfigController.php @@ -58,11 +58,11 @@ public function registerDaemonConfig(array $daemonConfigParams, bool $defaultDae } #[NoCSRFRequired] - public function updateDaemonConfig(string $name, array $params): Response { + public function updateDaemonConfig(string $name, array $daemonConfigParams): Response { $daemonConfig = $this->daemonConfigService->getDaemonConfigByName($name); - $updatedDaemonConfig = new DaemonConfig($params); + $updatedDaemonConfig = new DaemonConfig($daemonConfigParams); $updatedDaemonConfig->setId($daemonConfig->getId()); - $updatedDaemonConfig = $this->daemonConfigService->updateDaemonConfig($daemonConfig); + $updatedDaemonConfig = $this->daemonConfigService->updateDaemonConfig($updatedDaemonConfig); return new JSONResponse([ 'success' => $updatedDaemonConfig !== null, 'daemonConfig' => $updatedDaemonConfig, diff --git a/src/components/DaemonConfig/DaemonConfig.vue b/src/components/DaemonConfig/DaemonConfig.vue index 6a5c71a0..9a153327 100644 --- a/src/components/DaemonConfig/DaemonConfig.vue +++ b/src/components/DaemonConfig/DaemonConfig.vue @@ -24,6 +24,12 @@ + + {{ t('app_api', 'Edit') }} + + {{ t('app_api', 'Delete') }} + @@ -63,14 +75,17 @@ import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js' import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js' import CheckBold from 'vue-material-design-icons/CheckBold.vue' import TestTube from 'vue-material-design-icons/TestTube.vue' +import Pencil from 'vue-material-design-icons/Pencil.vue' import DaemonConfigDetailsModal from './DaemonConfigDetailsModal.vue' import ConfirmDaemonDeleteModal from './ConfirmDaemonDeleteModal.vue' import DaemonTestDeploy from './DaemonTestDeploy.vue' +import ManageDaemonConfigModal from './ManageDaemonConfigModal.vue' export default { name: 'DaemonConfig', components: { + ManageDaemonConfigModal, NcListItem, NcActionButton, CheckBold, @@ -79,6 +94,7 @@ export default { DaemonTestDeploy, NcLoadingIcon, TestTube, + Pencil, }, props: { daemon: { @@ -95,6 +111,11 @@ export default { type: Function, required: true, }, + daemons: { + type: Array, + required: true, + default: () => [], + }, getAllDaemons: { type: Function, required: true, @@ -108,6 +129,7 @@ export default { showDeleteDialog: false, removeExAppsOnDaemonDelete: false, showTestDeployDialog: false, + showEditDialog: false, } }, computed: { @@ -158,6 +180,9 @@ export default { showTestDeployModal() { this.showTestDeployDialog = true }, + showEditModal() { + this.showEditDialog = true + }, }, } diff --git a/src/components/DaemonConfig/DaemonConfigList.vue b/src/components/DaemonConfig/DaemonConfigList.vue index 48665b9b..f5d97b23 100644 --- a/src/components/DaemonConfig/DaemonConfigList.vue +++ b/src/components/DaemonConfig/DaemonConfigList.vue @@ -8,6 +8,7 @@ :daemon="daemon" :is-default="defaultDaemon === daemon.name" :save-options="saveOptions" + :daemons="daemons" :get-all-daemons="getAllDaemons" /> - + @@ -42,7 +43,7 @@ import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js' import FormatListBullet from 'vue-material-design-icons/FormatListBulleted.vue' -import RegisterDaemonConfigModal from './RegisterDaemonConfigModal.vue' +import ManageDaemonConfigModal from './ManageDaemonConfigModal.vue' export default { name: 'DaemonConfigList', @@ -52,7 +53,7 @@ export default { NcLoadingIcon, Plus, DaemonConfig, - RegisterDaemonConfigModal, + ManageDaemonConfigModal, NcEmptyContent, }, props: { diff --git a/src/components/DaemonConfig/RegisterDaemonConfigModal.vue b/src/components/DaemonConfig/ManageDaemonConfigModal.vue similarity index 79% rename from src/components/DaemonConfig/RegisterDaemonConfigModal.vue rename to src/components/DaemonConfig/ManageDaemonConfigModal.vue index 6aeaf214..3928c1f0 100644 --- a/src/components/DaemonConfig/RegisterDaemonConfigModal.vue +++ b/src/components/DaemonConfig/ManageDaemonConfigModal.vue @@ -2,8 +2,8 @@
-

{{ t('app_api', 'Register Deploy Daemon') }}

-
+

{{ isEdit ? t('app_api', 'Edit Deploy Daemon') : t('app_api', 'Register Deploy Daemon') }}

+
{{ t('app_api', 'Name') }} @@ -57,8 +58,8 @@
{{ t('app_api', 'Set as default daemon') }} +
+ :helper-text="getNetworkHelperText || t('app_api', 'Docker network name')" + :input-class="getNetworkHelperText !== '' ? 'text-warning' : ''" />
-

- {{ t('app_api', 'All available GPU devices on daemon host will be requested to be enabled in ExApp containers by Docker.') }} +

+ {{ getComputeDeviceHelperText }}

-
+