From 091dc068397ef84cd2d7801b71b2058015c68360 Mon Sep 17 00:00:00 2001 From: NihadBadalov <32594553+NihadBadalov@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:25:07 +0100 Subject: [PATCH 01/10] Feat: Support URL parameters to change Dashboard filters --- src/components/MonitorList.vue | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/components/MonitorList.vue b/src/components/MonitorList.vue index b9d42048b..5dc4af31b 100644 --- a/src/components/MonitorList.vue +++ b/src/components/MonitorList.vue @@ -206,6 +206,29 @@ export default { }, mounted() { window.addEventListener("scroll", this.onScroll); + + const url = new URL(location.href); + const params = url.searchParams; + const filterParam = params.get("filter"); + const statusParams = params.getAll("status"); + + if (filterParam !== "true") { + return; + } + + const states = { + up: 1, + down: 0, + pending: 2, + maintenance: 3, + }; + + this.updateFilter({ + ...this.filterState, + status: statusParams.map( + status => states[status] + ), + }); }, beforeUnmount() { window.removeEventListener("scroll", this.onScroll); From f38da99c11f86f046e05d5c0a4358c5c62e43d0f Mon Sep 17 00:00:00 2001 From: NihadBadalov <32594553+NihadBadalov@users.noreply.github.com> Date: Thu, 15 Feb 2024 21:18:49 +0100 Subject: [PATCH 02/10] Feat: Add URL filtering to the remaining filters - Add URL filtering to the remaining filters - Remove the required `filter=true` parameter - Use vue-router instead of `URL` --- src/components/MonitorList.vue | 49 +++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/src/components/MonitorList.vue b/src/components/MonitorList.vue index 5dc4af31b..bdb2b7056 100644 --- a/src/components/MonitorList.vue +++ b/src/components/MonitorList.vue @@ -204,30 +204,53 @@ export default { } }, }, - mounted() { + async mounted() { window.addEventListener("scroll", this.onScroll); - const url = new URL(location.href); - const params = url.searchParams; - const filterParam = params.get("filter"); - const statusParams = params.getAll("status"); + const statusParams = this.$router.currentRoute.value.query["status"]; + const activeParams = this.$router.currentRoute.value.query["active"]; + const tagParams = this.$router.currentRoute.value.query["tags"]; - if (filterParam !== "true") { - return; - } - - const states = { + const statusStates = { up: 1, down: 0, pending: 2, maintenance: 3, }; + const activeStates = { + running: true, + paused: false, + }; + + const tags = await (() => { + return new Promise((resolve) => { + this.$root.getSocket().emit("getTags", (res) => { + if (res.ok) { + resolve(res.tags); + } + }); + }); + })(); + + const fetchedTagIDs = tagParams + .split(",") + .map(identifier => { + const tagID = parseInt(identifier, 10); + return tags + .find(t => t.name === identifier || t.id === tagID) + ?.id ?? 0; + }); + this.updateFilter({ ...this.filterState, - status: statusParams.map( - status => states[status] - ), + status: statusParams ? statusParams.split(",").map( + status => statusStates[status.trim()] + ) : this.filterState["status"], + active: activeParams ? activeParams.split(",").map( + active => activeStates[active.trim()] + ) : this.filterState["active"], + tags: tagParams ? fetchedTagIDs : this.filterState["tags"], }); }, beforeUnmount() { From d3a5b224cc63fa18108976cd46488ca8b27dc7a9 Mon Sep 17 00:00:00 2001 From: NihadBadalov <32594553+NihadBadalov@users.noreply.github.com> Date: Sat, 17 Feb 2024 18:28:33 +0100 Subject: [PATCH 03/10] Feat: Don't allow commas in tag names --- src/components/TagEditDialog.vue | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/components/TagEditDialog.vue b/src/components/TagEditDialog.vue index b77967c77..e82338cdd 100644 --- a/src/components/TagEditDialog.vue +++ b/src/components/TagEditDialog.vue @@ -17,11 +17,15 @@ v-model="tag.name" type="text" class="form-control" - :class="{'is-invalid': nameInvalid}" + :class="{'is-invalid': nameInvalid || nameContainsComma}" required >