diff --git a/server/routers/resource/getUserResources.ts b/server/routers/resource/getUserResources.ts
index 4c7d3e9ad..114432a73 100644
--- a/server/routers/resource/getUserResources.ts
+++ b/server/routers/resource/getUserResources.ts
@@ -438,6 +438,7 @@ export async function getUserResources(
return {
siteResourceId: siteResource.siteResourceId,
name: siteResource.name,
+ niceId: siteResource.niceId,
destination: siteResource.destination,
mode: siteResource.mode,
ssl: siteResource.ssl,
@@ -492,6 +493,7 @@ export type GetUserResourcesResponse = {
siteResources: Array<{
siteResourceId: number;
name: string;
+ niceId: string;
destination: string;
mode: string;
tcpPortRangeString: string | null;
diff --git a/src/components/MemberResourcesPortal.tsx b/src/components/MemberResourcesPortal.tsx
index fded7df52..21b7a4cd7 100644
--- a/src/components/MemberResourcesPortal.tsx
+++ b/src/components/MemberResourcesPortal.tsx
@@ -41,6 +41,7 @@ import {
TooltipTrigger
} from "@/components/ui/tooltip";
import CopyToClipboard from "@app/components/CopyToClipboard";
+import { Badge } from "@/components/ui/badge";
// Update Resource type to include site information
type Resource = {
@@ -49,7 +50,7 @@ type Resource = {
domain: string;
enabled: boolean;
protected: boolean;
- // mode: string; // "http", "tcp", "udp", "rdp", "vnc", "ssh"
+ mode: string; // "http", "tcp", "udp", "rdp", "vnc", "ssh"
// Auth method fields
sso?: boolean;
password?: boolean;
@@ -62,6 +63,7 @@ type Resource = {
type SiteResource = {
siteResourceId: number;
name: string;
+ niceId: string;
destination: string;
mode: string;
ssl: boolean;
@@ -754,7 +756,13 @@ export default function MemberResourcesPortal({
-
+
+
+ {resource.mode.toUpperCase()}
+
@@ -860,7 +868,13 @@ export default function MemberResourcesPortal({
-
+
+
+ {siteResource.mode.toUpperCase()}
+
@@ -876,24 +890,24 @@ export default function MemberResourcesPortal({
:
- {
- siteResource.mode
- }
-
-
-
-
- {t(
- "memberPortalDestination"
- )}
- :
-
-
- {
- siteResource.destination
- }
+ {siteResource.mode.toUpperCase()}
+ {siteResource.destination && (
+
+
+ {t(
+ "memberPortalDestination"
+ )}
+ :
+
+
+ {
+ siteResource.destination
+ }
+
+
+ )}
{siteResource.alias && (
@@ -942,45 +956,35 @@ export default function MemberResourcesPortal({
isLink={true}
/>
) : siteResource.alias ? (
- <>
- {/* Alias as primary */}
-
-
- {
- siteResource.alias
- }
-
-
+
+ ) : siteResource.destination ? (
/* Destination as primary when no alias */
@@ -1011,6 +1015,37 @@ export default function MemberResourcesPortal({
+ ) : (
+ /* niceId fallback when no alias and no destination */
+
+
+ {
+ siteResource.niceId
+ }
+
+
{
+ navigator.clipboard.writeText(
+ siteResource.niceId
+ );
+ toast({
+ title: t(
+ "memberPortalCopiedToClipboard"
+ ),
+ description:
+ t(
+ "memberPortalCopiedDestinationDescription"
+ ),
+ duration: 2000
+ });
+ }}
+ >
+
+
+
)}