diff --git a/src/hooks/useMainStore.ts b/src/hooks/useMainStore.ts index 8122967..3e340e4 100644 --- a/src/hooks/useMainStore.ts +++ b/src/hooks/useMainStore.ts @@ -1,4 +1,4 @@ -import { MainStore, User } from '@/types' +import { MainStore, ModelUser as User } from '@/types' import { create } from 'zustand' import { persist, createJSONStorage } from 'zustand/middleware' diff --git a/src/main.tsx b/src/main.tsx index e4f287b..9aaaaca 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -12,6 +12,7 @@ import ErrorPage from "./error-page"; import ProtectedRoute from './routes/protect'; import LoginPage from './routes/login'; import ServerPage from './routes/server'; +import ServicePage from './routes/service'; import { AuthProvider } from './hooks/useAuth'; const router = createBrowserRouter([ @@ -28,6 +29,10 @@ const router = createBrowserRouter([ path: "/dashboard", element: , }, + { + path: "/dashboard/service", + element: , + }, ] }, ]); diff --git a/src/routes/server.tsx b/src/routes/server.tsx index 9b98e4b..f08c3a5 100644 --- a/src/routes/server.tsx +++ b/src/routes/server.tsx @@ -1,7 +1,7 @@ import { swrFetcher } from "@/api/api" import { Checkbox } from "@/components/ui/checkbox" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" -import { Server } from "@/types" +import { ModelServer as Server } from "@/types" import { ColumnDef, flexRender, getCoreRowModel, useReactTable } from "@tanstack/react-table" import useSWR from "swr" @@ -42,7 +42,7 @@ export default function ServerPage() { { header: "Host", accessorKey: "host.ip", - accessorFn: (row) => row.host.ip, + accessorFn: (row) => row.host?.ip, }, { id: "actions", diff --git a/src/routes/service.tsx b/src/routes/service.tsx new file mode 100644 index 0000000..c78c8fc --- /dev/null +++ b/src/routes/service.tsx @@ -0,0 +1,121 @@ +import { swrFetcher } from "@/api/api" +import { Checkbox } from "@/components/ui/checkbox" +import { Button } from "@/components/ui/button" +import { Plus } from "lucide-react" +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" +import { ModelService as Service } from "@/types" +import { ColumnDef, flexRender, getCoreRowModel, useReactTable } from "@tanstack/react-table" +import useSWR from "swr" + +export default function ServicePage() { + const columns: ColumnDef[] = [ + { + id: "select", + header: ({ table }) => ( + table.toggleAllPageRowsSelected(!!value)} + aria-label="Select all" + /> + ), + cell: ({ row }) => ( + row.toggleSelected(!!value)} + aria-label="Select row" + /> + ), + enableSorting: false, + enableHiding: false, + }, + { + header: "ID", + accessorKey: "id", + accessorFn: (row) => row.id, + }, + { + header: "Name", + accessorKey: "name", + accessorFn: (row) => row.name, + }, + { + header: "Type", + accessorKey: "service.type", + accessorFn: (row) => row.type, + }, + { + id: "actions", + header: "Actions", + cell: ({ row }) => { + const s = row.original + return ( + <>{s.id} + ) + }, + }, + ] + + const { data, error, isLoading } = useSWR('/api/v1/service', swrFetcher) + + const table = useReactTable({ + data: data ?? [], + columns, + getCoreRowModel: getCoreRowModel(), + }) + + return
+
+

+ Service +

+ +
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ) + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+} \ No newline at end of file