"use client"; import { getRelativeTime } from "../lib/getRelativeTime"; import { LoadingIcon } from "./LoadingIcon"; import { callServerPromise } from "./callServerPromise"; import { FormControl, FormField, FormItem, FormLabel, FormMessage, Form, } from "./ui/form"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { addNewAPIKey, deleteAPIKey } from "@/server/curdApiKeys"; import { zodResolver } from "@hookform/resolvers/zod"; import type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, } from "@tanstack/react-table"; import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table"; import { ArrowUpDown, MoreHorizontal } from "lucide-react"; import * as React from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; export type APIKey = { id: string; name: string; endpoint: string; date: Date; }; export const columns: ColumnDef[] = [ { accessorKey: "id", id: "select", header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value)} aria-label="Select all" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Select row" /> ), enableSorting: false, enableHiding: false, }, { accessorKey: "name", header: ({ column }) => { return ( ); }, cell: ({ row }) => { return ( // row.getValue("name") // ); }, }, { accessorKey: "endpoint", header: () =>
Endpoint
, cell: ({ row }) => { return (
{row.original.endpoint}
); }, }, { accessorKey: "date", sortingFn: "datetime", enableSorting: true, header: ({ column }) => { return ( ); }, cell: ({ row }) => (
{getRelativeTime(row.original.date)}
), }, { id: "actions", enableHiding: false, cell: ({ row }) => { const workflow = row.original; return ( Actions { callServerPromise(deleteAPIKey(workflow.id)); }} > Delete API Key {/* View customer View payment details */} ); }, }, ]; export function APIKeyList({ data }: { data: APIKey[] }) { const [sorting, setSorting] = React.useState([]); const [columnFilters, setColumnFilters] = React.useState( [] ); const [columnVisibility, setColumnVisibility] = React.useState({}); const [rowSelection, setRowSelection] = React.useState({}); const table = useReactTable({ data, columns, onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel(), onColumnVisibilityChange: setColumnVisibility, onRowSelectionChange: setRowSelection, state: { sorting, columnFilters, columnVisibility, rowSelection, }, }); return (
table.getColumn("name")?.setFilterValue(event.target.value) } className="max-w-sm" />
{/* {table .getAllColumns() .filter((column) => column.getCanHide()) .map((column) => { return ( column.toggleVisibility(!!value) } > {column.id} ); })} */}
{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. )}
{table.getFilteredSelectedRowModel().rows.length} of{" "} {table.getFilteredRowModel().rows.length} row(s) selected.
); } const formSchema = z.object({ name: z.string().min(1), }); function AddMachinesDialog() { const [open, setOpen] = React.useState(false); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: "My API Key", }, }); const [apiKey, setAPIKey] = React.useState > | null>(); return ( { setOpen(open); if (!open) setAPIKey(null); }} >
{ const apiKey = await callServerPromise(addNewAPIKey(data.name)); if (apiKey) setAPIKey(apiKey); // setOpen(false); })} > Create API Key Create API Key for workflow upload
{/*
*/} ( Name )} /> {apiKey && ( API Key (Copy the API key now) {/* */} )}
{apiKey ? ( ) : ( )}
); }