diff --git a/server/db/schema.ts b/server/db/schema.ts
index 6b7dcfda..24c705a9 100644
--- a/server/db/schema.ts
+++ b/server/db/schema.ts
@@ -118,9 +118,11 @@ export const newts = sqliteTable("newt", {
export const clients = sqliteTable("clients", {
clientId: integer("id").primaryKey({ autoIncrement: true }),
- siteId: integer("siteId").references(() => sites.siteId, {
- onDelete: "cascade"
- }),
+ siteId: integer("siteId")
+ .references(() => sites.siteId, {
+ onDelete: "cascade"
+ })
+ .notNull(),
orgId: text("orgId")
.references(() => orgs.orgId, {
onDelete: "cascade"
diff --git a/server/routers/client/listClients.ts b/server/routers/client/listClients.ts
index 9273d54a..1bef1488 100644
--- a/server/routers/client/listClients.ts
+++ b/server/routers/client/listClients.ts
@@ -42,6 +42,7 @@ function queryClients(orgId: string, accessibleClientIds: number[]) {
clientId: clients.clientId,
orgId: clients.orgId,
siteId: clients.siteId,
+ siteNiceId: sites.niceId,
name: clients.name,
pubKey: clients.pubKey,
subnet: clients.subnet,
@@ -49,10 +50,12 @@ function queryClients(orgId: string, accessibleClientIds: number[]) {
megabytesOut: clients.megabytesOut,
orgName: orgs.name,
type: clients.type,
- online: clients.online
+ online: clients.online,
+ siteName: sites.name
})
.from(clients)
.leftJoin(orgs, eq(clients.orgId, orgs.orgId))
+ .innerJoin(sites, eq(clients.siteId, sites.siteId))
.where(
and(
inArray(clients.clientId, accessibleClientIds),
diff --git a/src/app/[orgId]/settings/clients/ClientsTable.tsx b/src/app/[orgId]/settings/clients/ClientsTable.tsx
index bba06c00..c7af53e3 100644
--- a/src/app/[orgId]/settings/clients/ClientsTable.tsx
+++ b/src/app/[orgId]/settings/clients/ClientsTable.tsx
@@ -12,6 +12,7 @@ import { Button } from "@app/components/ui/button";
import {
ArrowRight,
ArrowUpDown,
+ ArrowUpRight,
Check,
MoreHorizontal,
X
@@ -28,6 +29,8 @@ import CreateClientFormModal from "./CreateClientsModal";
export type ClientRow = {
id: number;
+ siteId: string;
+ siteName: string;
name: string;
mbIn: string;
mbOut: string;
@@ -125,6 +128,33 @@ export default function ClientsTable({ clients, orgId }: ClientTableProps) {
);
}
},
+ {
+ accessorKey: "siteName",
+ header: ({ column }) => {
+ return (
+
+ );
+ },
+ cell: ({ row }) => {
+ const r = row.original;
+ return (
+
+
+
+ );
+ }
+ },
{
accessorKey: "online",
header: ({ column }) => {
@@ -135,7 +165,7 @@ export default function ClientsTable({ clients, orgId }: ClientTableProps) {
column.toggleSorting(column.getIsSorted() === "asc")
}
>
- Online
+ Connectivity
);
@@ -146,14 +176,14 @@ export default function ClientsTable({ clients, orgId }: ClientTableProps) {
return (
- Online
+ Connected
);
} else {
return (
- Offline
+ Disconnected
);
}
diff --git a/src/app/[orgId]/settings/clients/CreateClientsForm.tsx b/src/app/[orgId]/settings/clients/CreateClientsForm.tsx
index 3220f74d..09bdb7f9 100644
--- a/src/app/[orgId]/settings/clients/CreateClientsForm.tsx
+++ b/src/app/[orgId]/settings/clients/CreateClientsForm.tsx
@@ -189,8 +189,12 @@ export default function CreateClientForm({
if (res && res.status === 201) {
const data = res.data.data;
+ const site = sites.find((site) => site.siteId === data.siteId);
+
onCreate?.({
name: data.name,
+ siteId: site!.niceId,
+ siteName: site!.name,
id: data.clientId,
mbIn: "0 MB",
mbOut: "0 MB",
diff --git a/src/app/[orgId]/settings/clients/page.tsx b/src/app/[orgId]/settings/clients/page.tsx
index 145d99a7..2a422fc9 100644
--- a/src/app/[orgId]/settings/clients/page.tsx
+++ b/src/app/[orgId]/settings/clients/page.tsx
@@ -36,6 +36,8 @@ export default async function ClientsPage(props: ClientsPageProps) {
const clientRows: ClientRow[] = clients.map((client) => {
return {
name: client.name,
+ siteName: client.siteName,
+ siteId: client.siteNiceId,
id: client.clientId,
mbIn: formatSize(client.megabytesIn || 0),
mbOut: formatSize(client.megabytesOut || 0),