| import { Separator } from "@/components/ui/separator"; |
| import { Table, TableBody, TableCell, TableRow } from "@/components/ui/table"; |
| import Link from "next/link"; |
| import { PlusIcon, Pencil1Icon } from "@radix-ui/react-icons"; |
|
|
| interface Row { |
| link: string; |
| text: string; |
| addLink: string; |
| changeLink: string; |
| } |
|
|
| interface SectionProps { |
| title: string; |
| description: string; |
| rows: Row[]; |
| } |
|
|
| const Section: React.FC<SectionProps> = ({ title, description, rows }) => ( |
| <div className="md:p-4 flex flex-col"> |
| <div className="space-y-4"> |
| <h3 className="text-xl font-semibold tracking-tight">{title}</h3> |
| </div> |
| <h3 className="text-sm text-muted-foreground">{description}</h3> |
| <Separator className="mt-2" /> |
| <Table> |
| <TableBody> |
| {rows.map((row, index) => ( |
| <TableRow key={index} className="flex"> |
| <TableCell className="flex-grow font-sm underline underline-offset-2 pl-0"> |
| <Link href={row.link}>{row.text}</Link> |
| </TableCell> |
| {row.addLink && ( |
| <TableCell> |
| <Link |
| className="flex flex-row items-center justify-start" |
| href={row.addLink} |
| > |
| <PlusIcon className="text-green-400 mr-1" /> |
| Add |
| </Link> |
| </TableCell> |
| )} |
| {row.changeLink && ( |
| <TableCell> |
| <Link |
| className="flex flex-row items-center justify-start" |
| href={row.changeLink} |
| > |
| <Pencil1Icon className="text-yellow-500 mr-1" /> |
| Change |
| </Link> |
| </TableCell> |
| )} |
| </TableRow> |
| ))} |
| </TableBody> |
| </Table> |
| </div> |
| ); |
|
|
| export default function Page() { |
| const sections = [ |
| { |
| title: "Data", |
| description: "List, add, and change data sources.", |
| rows: [ |
| { |
| link: "/admin/data", |
| text: "Data sources", |
| addLink: "/admin/data/add", |
| changeLink: "/admin/data", |
| }, |
| ], |
| }, |
| { |
| title: "Vector store and embeddings", |
| description: |
| "List, add, and change vector store collections and embeddings.", |
| rows: [ |
| { |
| link: "/admin/collections", |
| text: "Collections", |
| addLink: "/admin/data/add", |
| changeLink: "/admin/collections", |
| }, |
| ], |
| }, |
| { |
| title: "Chat history", |
| description: "Manage chat history.", |
| rows: [ |
| |
| |
| |
| |
| |
| |
| { |
| link: "/admin/chat-history", |
| text: "Chat history", |
| changeLink: "/admin/chat-history", |
| }, |
| ], |
| }, |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| ]; |
|
|
| return ( |
| <div className="mt-20 flex justify-center items-stretch"> |
| <div className="max-w-screen-lg w-full bg-background"> |
| <div className="md:p-4 flex flex-col"> |
| <h1 className="text-4xl font-semibold tracking-tight"> |
| Manage your RAG Apps |
| </h1> |
| </div> |
| {sections.map((section, index) => ( |
| <Section key={index} {...section} /> |
| ))} |
| </div> |
| </div> |
| ); |
| } |
|
|