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),