From 9afc10edf112d6fff9cc1b8ebae7a990b7653820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20W=C3=B3jcik?= Date: Wed, 23 Jul 2025 14:24:26 +0200 Subject: [PATCH 1/3] order instances, tunnels & locations by name --- src-tauri/src/database/models/instance.rs | 4 ++-- src-tauri/src/database/models/location.rs | 4 ++-- src-tauri/src/database/models/tunnel.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src-tauri/src/database/models/instance.rs b/src-tauri/src/database/models/instance.rs index 338b6e83..a9aac5b6 100644 --- a/src-tauri/src/database/models/instance.rs +++ b/src-tauri/src/database/models/instance.rs @@ -74,7 +74,7 @@ impl Instance { let instances = query_as!( Self, "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", \ - disable_all_traffic, enterprise_enabled, openid_display_name FROM instance;" + disable_all_traffic, enterprise_enabled, openid_display_name FROM instance ORDER BY name ASC;" ) .fetch_all(executor) .await?; @@ -123,7 +123,7 @@ impl Instance { Self, "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token, \ disable_all_traffic, enterprise_enabled, openid_display_name FROM instance - WHERE token IS NOT NULL;" + WHERE token IS NOT NULL ORDER BY name ASC;" ) .fetch_all(executor) .await?; diff --git a/src-tauri/src/database/models/location.rs b/src-tauri/src/database/models/location.rs index 7bf493c5..2767597c 100644 --- a/src-tauri/src/database/models/location.rs +++ b/src-tauri/src/database/models/location.rs @@ -66,7 +66,7 @@ impl Location { Self, "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id,\ route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\" \ - FROM location;" + FROM location ORDER BY name ASC;" ) .fetch_all(executor) .await @@ -129,7 +129,7 @@ impl Location { Self, "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, \ network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\" \ - FROM location WHERE instance_id = $1", + FROM location WHERE instance_id = $1 ORDER BY name ASC", instance_id ) .fetch_all(executor) diff --git a/src-tauri/src/database/models/tunnel.rs b/src-tauri/src/database/models/tunnel.rs index 71f3a6f3..974861c7 100644 --- a/src-tauri/src/database/models/tunnel.rs +++ b/src-tauri/src/database/models/tunnel.rs @@ -120,7 +120,7 @@ impl Tunnel { "SELECT id \"id: _\", name, pubkey, prvkey, address, server_pubkey, preshared_key, \ allowed_ips, endpoint, dns, persistent_keep_alive, route_all_traffic, pre_up, \ post_up, pre_down, post_down \ - FROM tunnel;" + FROM tunnel ORDER BY name ASC;" ) .fetch_all(executor) .await?; From 8898f744cc6320ea707bc64beca9a6c987fc6991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20W=C3=B3jcik?= Date: Thu, 24 Jul 2025 12:55:25 +0200 Subject: [PATCH 2/3] handle multiple addresses in location card --- .../LocationCardTitle/LocationCardTitle.tsx | 39 ++++++++++++++++++- .../components/LocationCardTitle/style.scss | 31 +++++++++++++++ src/shared/defguard-ui | 2 +- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/LocationCardTitle.tsx b/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/LocationCardTitle.tsx index e2ca231b..8a297f46 100644 --- a/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/LocationCardTitle.tsx +++ b/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/LocationCardTitle.tsx @@ -1,9 +1,13 @@ import './style.scss'; import classNames from 'classnames'; +import { useMemo } from 'react'; import { Badge } from '../../../../../../../../shared/defguard-ui/components/Layout/Badge/Badge'; import { BadgeStyleVariant } from '../../../../../../../../shared/defguard-ui/components/Layout/Badge/types'; +import { FloatingMenu } from '../../../../../../../../shared/defguard-ui/components/Layout/FloatingMenu/FloatingMenu'; +import { FloatingMenuProvider } from '../../../../../../../../shared/defguard-ui/components/Layout/FloatingMenu/FloatingMenuProvider'; +import { FloatingMenuTrigger } from '../../../../../../../../shared/defguard-ui/components/Layout/FloatingMenu/FloatingMenuTrigger'; import SvgIconConnection from '../../../../../../../../shared/defguard-ui/components/svg/IconConnection'; import { CommonWireguardFields } from '../../../../../../types'; @@ -19,7 +23,40 @@ export const LocationCardTitle = ({ location }: Props) => {
{location?.name} - + +
); }; + +type AddressBadgeProps = { + // comma-separated list of addresses + addresses: string; +}; + +const AddressBadge = ({ addresses: address }: AddressBadgeProps) => { + // split into separate addreses to show in tooltip + const addresses = useMemo(() => address.split(','), [address]); + + return ( + + +
+ +
+
+ +
    + {addresses.map((d) => ( +
  • {d}
  • + ))} +
+
+
+ ); +}; diff --git a/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/style.scss b/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/style.scss index abdd34ef..7b5c7cde 100644 --- a/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/style.scss +++ b/src/pages/client/pages/ClientInstancePage/components/LocationsList/components/LocationCardTitle/style.scss @@ -30,4 +30,35 @@ } } } + + & > .addresses-badge-container { + position: relative; + cursor: help; + + & > .client-addresses { + max-width: 90px; + + & > span { + overflow: hidden; + text-overflow: ellipsis; + } + } + } +} + +.list-addresses-floating { + list-style: none; + display: flex; + flex-flow: column; + row-gap: var(--spacing-xs); + max-height: 250px; + max-width: 100dvh; + overflow: auto; + padding: var(--spacing-xs); + margin: 0; + + li { + @include typography(app-modal-1); + color: var(--text-body-secondary); + } } diff --git a/src/shared/defguard-ui b/src/shared/defguard-ui index d5216800..28ab5356 160000 --- a/src/shared/defguard-ui +++ b/src/shared/defguard-ui @@ -1 +1 @@ -Subproject commit d52168005b2ad6e3616e60c6a78df9c01746e702 +Subproject commit 28ab5356d7862abf50d4691d3b1128c57af83526 From d24a6287854bddcdc95a54a0bb21dd13a72ce6e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20W=C3=B3jcik?= Date: Thu, 24 Jul 2025 13:32:49 +0200 Subject: [PATCH 3/3] update query data --- ...b227b555274ec98411966a0a410314d5c109df6477ce799b40d1.json} | 4 ++-- ...1e5b531a6ac5a1cbf120828a0b9c19301c92a3f71531c08c698d.json} | 4 ++-- ...8f3fbafae6ed62e13076669cf582baa5933f25ebdb0acd93f1b7.json} | 4 ++-- ...db7fd65e82a60e786942680cd7c66c42a315de0e62e47c4f2df4.json} | 4 ++-- ...ed1e88815560c3f16259e63975a3ec89a3c9b95d833774e9dfef.json} | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) rename src-tauri/.sqlx/{query-64728ae44c896e304fef18fbe05194d89e17d2cde021fa36606deb6f7419000c.json => query-65b503d8af2eb227b555274ec98411966a0a410314d5c109df6477ce799b40d1.json} (91%) rename src-tauri/.sqlx/{query-2d4e1873d7a9233ab5cad9021b230a898623b953ad721dcb42023729aed0e4a3.json => query-7bbc28ee5a141e5b531a6ac5a1cbf120828a0b9c19301c92a3f71531c08c698d.json} (91%) rename src-tauri/.sqlx/{query-f76a3953576d685d4057541b04aabfafdb61c86b0e9486ff0561a7bd80fd6ba8.json => query-9c866377cd618f3fbafae6ed62e13076669cf582baa5933f25ebdb0acd93f1b7.json} (94%) rename src-tauri/.sqlx/{query-2d9b8eebfbc2651ae0038f73d5867706509a45ca570ebe750c6e26ec3fc78dd8.json => query-f4b187b6f90edb7fd65e82a60e786942680cd7c66c42a315de0e62e47c4f2df4.json} (89%) rename src-tauri/.sqlx/{query-abe46ed19a1d7611a37a8ed587f3c2f9e14a56f9f14cfa20fb289f457075de22.json => query-f660459ee3beed1e88815560c3f16259e63975a3ec89a3c9b95d833774e9dfef.json} (93%) diff --git a/src-tauri/.sqlx/query-64728ae44c896e304fef18fbe05194d89e17d2cde021fa36606deb6f7419000c.json b/src-tauri/.sqlx/query-65b503d8af2eb227b555274ec98411966a0a410314d5c109df6477ce799b40d1.json similarity index 91% rename from src-tauri/.sqlx/query-64728ae44c896e304fef18fbe05194d89e17d2cde021fa36606deb6f7419000c.json rename to src-tauri/.sqlx/query-65b503d8af2eb227b555274ec98411966a0a410314d5c109df6477ce799b40d1.json index 1db71c84..57f2b8f7 100644 --- a/src-tauri/.sqlx/query-64728ae44c896e304fef18fbe05194d89e17d2cde021fa36606deb6f7419000c.json +++ b/src-tauri/.sqlx/query-65b503d8af2eb227b555274ec98411966a0a410314d5c109df6477ce799b40d1.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", disable_all_traffic, enterprise_enabled, openid_display_name FROM instance;", + "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", disable_all_traffic, enterprise_enabled, openid_display_name FROM instance ORDER BY name ASC;", "describe": { "columns": [ { @@ -70,5 +70,5 @@ true ] }, - "hash": "64728ae44c896e304fef18fbe05194d89e17d2cde021fa36606deb6f7419000c" + "hash": "65b503d8af2eb227b555274ec98411966a0a410314d5c109df6477ce799b40d1" } diff --git a/src-tauri/.sqlx/query-2d4e1873d7a9233ab5cad9021b230a898623b953ad721dcb42023729aed0e4a3.json b/src-tauri/.sqlx/query-7bbc28ee5a141e5b531a6ac5a1cbf120828a0b9c19301c92a3f71531c08c698d.json similarity index 91% rename from src-tauri/.sqlx/query-2d4e1873d7a9233ab5cad9021b230a898623b953ad721dcb42023729aed0e4a3.json rename to src-tauri/.sqlx/query-7bbc28ee5a141e5b531a6ac5a1cbf120828a0b9c19301c92a3f71531c08c698d.json index 0cf3e9bd..f5faadd8 100644 --- a/src-tauri/.sqlx/query-2d4e1873d7a9233ab5cad9021b230a898623b953ad721dcb42023729aed0e4a3.json +++ b/src-tauri/.sqlx/query-7bbc28ee5a141e5b531a6ac5a1cbf120828a0b9c19301c92a3f71531c08c698d.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\" FROM location WHERE instance_id = $1", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\" FROM location WHERE instance_id = $1 ORDER BY name ASC", "describe": { "columns": [ { @@ -82,5 +82,5 @@ false ] }, - "hash": "2d4e1873d7a9233ab5cad9021b230a898623b953ad721dcb42023729aed0e4a3" + "hash": "7bbc28ee5a141e5b531a6ac5a1cbf120828a0b9c19301c92a3f71531c08c698d" } diff --git a/src-tauri/.sqlx/query-f76a3953576d685d4057541b04aabfafdb61c86b0e9486ff0561a7bd80fd6ba8.json b/src-tauri/.sqlx/query-9c866377cd618f3fbafae6ed62e13076669cf582baa5933f25ebdb0acd93f1b7.json similarity index 94% rename from src-tauri/.sqlx/query-f76a3953576d685d4057541b04aabfafdb61c86b0e9486ff0561a7bd80fd6ba8.json rename to src-tauri/.sqlx/query-9c866377cd618f3fbafae6ed62e13076669cf582baa5933f25ebdb0acd93f1b7.json index 5f109398..5d2930f7 100644 --- a/src-tauri/.sqlx/query-f76a3953576d685d4057541b04aabfafdb61c86b0e9486ff0561a7bd80fd6ba8.json +++ b/src-tauri/.sqlx/query-9c866377cd618f3fbafae6ed62e13076669cf582baa5933f25ebdb0acd93f1b7.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", name, pubkey, prvkey, address, server_pubkey, preshared_key, allowed_ips, endpoint, dns, persistent_keep_alive, route_all_traffic, pre_up, post_up, pre_down, post_down FROM tunnel;", + "query": "SELECT id \"id: _\", name, pubkey, prvkey, address, server_pubkey, preshared_key, allowed_ips, endpoint, dns, persistent_keep_alive, route_all_traffic, pre_up, post_up, pre_down, post_down FROM tunnel ORDER BY name ASC;", "describe": { "columns": [ { @@ -106,5 +106,5 @@ true ] }, - "hash": "f76a3953576d685d4057541b04aabfafdb61c86b0e9486ff0561a7bd80fd6ba8" + "hash": "9c866377cd618f3fbafae6ed62e13076669cf582baa5933f25ebdb0acd93f1b7" } diff --git a/src-tauri/.sqlx/query-2d9b8eebfbc2651ae0038f73d5867706509a45ca570ebe750c6e26ec3fc78dd8.json b/src-tauri/.sqlx/query-f4b187b6f90edb7fd65e82a60e786942680cd7c66c42a315de0e62e47c4f2df4.json similarity index 89% rename from src-tauri/.sqlx/query-2d9b8eebfbc2651ae0038f73d5867706509a45ca570ebe750c6e26ec3fc78dd8.json rename to src-tauri/.sqlx/query-f4b187b6f90edb7fd65e82a60e786942680cd7c66c42a315de0e62e47c4f2df4.json index 14e1a981..881650b4 100644 --- a/src-tauri/.sqlx/query-2d9b8eebfbc2651ae0038f73d5867706509a45ca570ebe750c6e26ec3fc78dd8.json +++ b/src-tauri/.sqlx/query-f4b187b6f90edb7fd65e82a60e786942680cd7c66c42a315de0e62e47c4f2df4.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token, disable_all_traffic, enterprise_enabled, openid_display_name FROM instance\n WHERE token IS NOT NULL;", + "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token, disable_all_traffic, enterprise_enabled, openid_display_name FROM instance\n WHERE token IS NOT NULL ORDER BY name ASC;", "describe": { "columns": [ { @@ -70,5 +70,5 @@ true ] }, - "hash": "2d9b8eebfbc2651ae0038f73d5867706509a45ca570ebe750c6e26ec3fc78dd8" + "hash": "f4b187b6f90edb7fd65e82a60e786942680cd7c66c42a315de0e62e47c4f2df4" } diff --git a/src-tauri/.sqlx/query-abe46ed19a1d7611a37a8ed587f3c2f9e14a56f9f14cfa20fb289f457075de22.json b/src-tauri/.sqlx/query-f660459ee3beed1e88815560c3f16259e63975a3ec89a3c9b95d833774e9dfef.json similarity index 93% rename from src-tauri/.sqlx/query-abe46ed19a1d7611a37a8ed587f3c2f9e14a56f9f14cfa20fb289f457075de22.json rename to src-tauri/.sqlx/query-f660459ee3beed1e88815560c3f16259e63975a3ec89a3c9b95d833774e9dfef.json index 533b50ba..e895e552 100644 --- a/src-tauri/.sqlx/query-abe46ed19a1d7611a37a8ed587f3c2f9e14a56f9f14cfa20fb289f457075de22.json +++ b/src-tauri/.sqlx/query-f660459ee3beed1e88815560c3f16259e63975a3ec89a3c9b95d833774e9dfef.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id,route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\" FROM location;", + "query": "SELECT id, instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id,route_all_traffic, keepalive_interval, location_mfa_mode \"location_mfa_mode: LocationMfaMode\" FROM location ORDER BY name ASC;", "describe": { "columns": [ { @@ -82,5 +82,5 @@ false ] }, - "hash": "abe46ed19a1d7611a37a8ed587f3c2f9e14a56f9f14cfa20fb289f457075de22" + "hash": "f660459ee3beed1e88815560c3f16259e63975a3ec89a3c9b95d833774e9dfef" }