From 54e158f75a9e9ffc02531a54332f85f090487cfc Mon Sep 17 00:00:00 2001 From: stroskler Date: Thu, 1 Feb 2024 18:54:52 +0000 Subject: [PATCH] DRAFT: feat(friendlyName): make friendlyname configurable allow updates and removal of `friendly name` --- backend/agent-manager.ts | 20 +++++++++++++ backend/models/agent.ts | 3 +- .../manage-agent-socket-handler.ts | 26 +++++++++++++++++ frontend/components.d.ts | 6 ++++ frontend/src/pages/DashboardHome.vue | 29 +++++++++++++++++-- 5 files changed, 81 insertions(+), 3 deletions(-) diff --git a/backend/agent-manager.ts b/backend/agent-manager.ts index 527d53d..3d57a53 100644 --- a/backend/agent-manager.ts +++ b/backend/agent-manager.ts @@ -77,6 +77,7 @@ export class AgentManager { * @param username * @param password * @param friendlyname + * @param updatedFriendlyName */ async add(url : string, username : string, password : string, friendlyname : string) : Promise { let bean = R.dispense("agent") as Agent; @@ -106,6 +107,24 @@ export class AgentManager { } } + /** + * + * @param friendlyname + * @param updatedFriendlyName + */ + + async update(friendlyname : string, updatedFriendlyName : string) { + let bean = await R.findOne("agent", " friendlyname = ? ", [ + friendlyname, + ]); + + if (bean) { + bean.friendlyname = updatedFriendlyName; + } else { + throw new Error("Friendly name could not be updated "); + } + } + connect(url : string, username : string, password : string) { let obj = new URL(url); let endpoint = obj.host; @@ -279,6 +298,7 @@ export class AgentManager { username: "", endpoint: "", friendlyname: "", + updatedFriendlyName: "", }; for (let endpoint in list) { diff --git a/backend/models/agent.ts b/backend/models/agent.ts index ca5450c..bcb17e3 100644 --- a/backend/models/agent.ts +++ b/backend/models/agent.ts @@ -23,7 +23,8 @@ export class Agent extends BeanModel { url: this.url, username: this.username, endpoint: this.endpoint, - friendlyname: this.friendlyname + friendlyname: this.friendlyname, + updatedFriendlyName: this.updatedFriendlyName }; } diff --git a/backend/socket-handlers/manage-agent-socket-handler.ts b/backend/socket-handlers/manage-agent-socket-handler.ts index bc6ed20..cac96e0 100644 --- a/backend/socket-handlers/manage-agent-socket-handler.ts +++ b/backend/socket-handlers/manage-agent-socket-handler.ts @@ -66,5 +66,31 @@ export class ManageAgentSocketHandler extends SocketHandler { callbackError(e, callback); } }); + + // updateAgent + socket.on("updateAgent", async (friendlyname : unknown, updatedFriendlyName : unknown, callback : unknown) => { + try { + log.debug("manage-agent-socket-handler", "updateAgent"); + checkLogin(socket); + + if (typeof(updatedFriendlyName) !== "string") { + throw new Error("FriendlyName must be a string"); + } + + let manager = socket.instanceManager; + await manager.update(friendlyname, updatedFriendlyName); + + server.disconnectAllSocketClients(undefined, socket.id); + manager.sendAgentList(); + + callbackResult({ + ok: true, + msg: "agentUpdatedSuccessfully", + msgi18n: true, + }, callback); + } catch (e) { + callbackError(e, callback); + } + }); } } diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 708dd4e..c97e380 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -11,8 +11,11 @@ declare module 'vue' { Appearance: typeof import('./src/components/settings/Appearance.vue')['default'] ArrayInput: typeof import('./src/components/ArrayInput.vue')['default'] ArraySelect: typeof import('./src/components/ArraySelect.vue')['default'] + BButton: typeof import('bootstrap-vue-next')['BButton'] BDropdown: typeof import('bootstrap-vue-next')['BDropdown'] BDropdownItem: typeof import('bootstrap-vue-next')['BDropdownItem'] + BFormGroup: typeof import('bootstrap-vue-next')['BFormGroup'] + BFormInput: typeof import('bootstrap-vue-next')['BFormInput'] BModal: typeof import('bootstrap-vue-next')['BModal'] Confirm: typeof import('./src/components/Confirm.vue')['default'] Container: typeof import('./src/components/Container.vue')['default'] @@ -29,4 +32,7 @@ declare module 'vue' { TwoFADialog: typeof import('./src/components/TwoFADialog.vue')['default'] Uptime: typeof import('./src/components/Uptime.vue')['default'] } + export interface ComponentCustomProperties { + vBModal: typeof import('bootstrap-vue-next')['vBModal'] + } } diff --git a/frontend/src/pages/DashboardHome.vue b/frontend/src/pages/DashboardHome.vue index 86c5833..e843fa1 100644 --- a/frontend/src/pages/DashboardHome.vue +++ b/frontend/src/pages/DashboardHome.vue @@ -55,10 +55,19 @@ {{ agent.friendlyname }} + + + + + + + + + - +

{{ agent.url }}

{{ $t("removeAgentMsg") }} @@ -129,12 +138,14 @@ export default { dockerRunCommand: "", showAgentForm: false, showRemoveAgentDialog: {}, + showEditAgentFriendlynameDialog: {}, connectingAgent: false, agent: { url: "http://", username: "", password: "", friendlyname: "", + updatedFriendlyName: "", } }; }, @@ -208,6 +219,20 @@ export default { }); }, + updateFriendlyname(friendlyname, updatedFriendlyName) { + //console.log(this.showEditAgentFriendlynameDialog.inputNewFriendlyName); + this.$root.getSocket().emit("updateAgent", friendlyname, updatedFriendlyName, (res) => { + this.$root.toastRes(res); + + if (res.ok) { + this.showAgentForm = false; + this.agent = { + updatedFriendlyName: "", + }; + } + }); + }, + getStatusNum(statusName) { let num = 0; @@ -295,7 +320,7 @@ export default { } }, - }, + } };