From bbefd7cb42e11d292e493df5b4c1657e5e6f5011 Mon Sep 17 00:00:00 2001 From: Bram Suurd Date: Fri, 9 Aug 2024 02:32:06 +0200 Subject: [PATCH] Update the database by creating separate tables for alerts and default login details. Add a tab for default login details, and implement badges for updatable scripts and scripts requiring privileged access. --- bun.lockb | Bin 202533 -> 213885 bytes package.json | 1 + src/app/api/categories/route.ts | 2 +- src/app/scripts/_components/ScriptItem.tsx | 150 +++++++++++++++------ src/components/ui/badge.tsx | 1 + src/components/ui/tooltip.tsx | 30 +++++ src/lib/types.ts | 20 +-- 7 files changed, 156 insertions(+), 48 deletions(-) create mode 100644 src/components/ui/tooltip.tsx diff --git a/bun.lockb b/bun.lockb index 03598c650a04c6fcf53b3bb0861f967142d27b7f..fb7b3438be80df2a032126ea21d5959187eb8886 100755 GIT binary patch delta 48548 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 Q7BN1i9OgXNM!%l%4{IkStN;K2 delta 42155 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 Y?9n8r0ZnRW&|pm3CQzw`e^7n;AI;Q7M*si- diff --git a/package.json b/package.json index 371e39b..efecf8b 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.1.0", + "@radix-ui/react-tooltip": "^1.1.2", "@vercel/analytics": "^1.2.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", diff --git a/src/app/api/categories/route.ts b/src/app/api/categories/route.ts index b8491d4..8890271 100644 --- a/src/app/api/categories/route.ts +++ b/src/app/api/categories/route.ts @@ -5,7 +5,7 @@ import { Category } from "@/lib/types"; export async function GET(req: NextRequest) { try { const response = await pb.collection("categories").getFullList({ - expand: "items.alpine_script", + expand: "items.alerts,items.alpine_script,items.default_login", sort: "order", }); diff --git a/src/app/scripts/_components/ScriptItem.tsx b/src/app/scripts/_components/ScriptItem.tsx index 1149c25..4fde214 100644 --- a/src/app/scripts/_components/ScriptItem.tsx +++ b/src/app/scripts/_components/ScriptItem.tsx @@ -18,9 +18,17 @@ import { Category, Script } from "@/lib/types"; import { useSearchParams } from "next/navigation"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { MostViewedScripts, LatestScripts } from "./ScriptInfoBlocks"; +import { Badge } from "@/components/ui/badge"; import { toast } from "sonner"; import CodeCopyButton from "@/components/ui/code-copy-button"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; + function ScriptItem({ items, @@ -129,6 +137,7 @@ function ScriptItem({ }; const hasAlpineScript = item?.expand?.alpine_script !== undefined; + const hasDefaultLogin = item?.expand?.default_login !== undefined; return ( <> @@ -277,40 +286,66 @@ function ScriptItem({
-
-

- Description -

-

- {descriptionCodeBlock(item.description)} -

-
- {item.alert1 && ( -
-

- - {descriptionCodeBlock(item.alert1)} +

+
+

+ Description +

+

+ {descriptionCodeBlock(item.description)}

- {item.alert2 && ( -

- - {descriptionCodeBlock(item.alert2)} -

- )} - {item.alert3 && ( +
+
+ {item.expand?.alerts?.length > 0 && + item.expand.alerts.map((alert: any, index: number) => ( +

- {descriptionCodeBlock(item.alert3)} + {descriptionCodeBlock(alert.content)}

- )} -
- )} +
+ ))}
-

- How to {item.item_type ? "install" : "use"} -

+
+

+ How to {item.item_type ? "install" : "use"} +

+
+ {item.privileged && ( + + + + + Privileged + + + +

+ This script will be run in a privileged LXC +

+
+
+
+ )} + {item.isUpdateable && ( + + + + Updateable + + +

+ To Update {item.title}, run the command below + (or type update) in the LXC Console. +

+
+
+
+ )} +
+
{hasAlpineScript ? ( @@ -332,12 +367,6 @@ function ScriptItem({ {item.item_type}, run the command below in the Proxmox VE Shell.

- {item.isUpdateable && ( -

- To Update {item.title}, run the command - below (or type update) in the LXC Console. -

- )} )} {installCommand} @@ -374,12 +403,6 @@ function ScriptItem({ {item.item_type}, run the command below in the Proxmox VE Shell.

- {item.isUpdateable && ( -

- To Update {item.title}, run the command below - (or type update) in the LXC Console. -

- )} )} {installCommand && ( @@ -390,6 +413,55 @@ function ScriptItem({
+
+ {hasDefaultLogin && ( +
+
+

+ Default Login Credentials +

+
+ +
+

+ You can use the following credentials to login to the{" "} + {""} + {item.title} {item.item_type}. +

+
+ Username:{" "} + +
+
+ Password:{" "} + +
+
+
+ )} +
diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx index 4f86d21..8cdf821 100644 --- a/src/components/ui/badge.tsx +++ b/src/components/ui/badge.tsx @@ -15,6 +15,7 @@ const badgeVariants = cva( destructive: "border-transparent text-destructive-foreground border-destructive-foreground", outline: "text-foreground", + success: "text-green-500 border-green-500" }, }, defaultVariants: { diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx new file mode 100644 index 0000000..30fc44d --- /dev/null +++ b/src/components/ui/tooltip.tsx @@ -0,0 +1,30 @@ +"use client" + +import * as React from "react" +import * as TooltipPrimitive from "@radix-ui/react-tooltip" + +import { cn } from "@/lib/utils" + +const TooltipProvider = TooltipPrimitive.Provider + +const Tooltip = TooltipPrimitive.Root + +const TooltipTrigger = TooltipPrimitive.Trigger + +const TooltipContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + +)) +TooltipContent.displayName = TooltipPrimitive.Content.displayName + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } diff --git a/src/lib/types.ts b/src/lib/types.ts index 3983f91..78c8dcb 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -18,6 +18,8 @@ export type Script = { id: string; expand: { alpine_script: alpine_script; + alerts: alerts[]; + default_login: default_login; } isUpdateable: boolean; item_type: string; @@ -30,6 +32,7 @@ export type Script = { isMostViewed: boolean; mostViewedPosition: number; interface: string; + privileged: boolean; }; type alpine_script = { @@ -39,6 +42,15 @@ type alpine_script = { default_ram: string; }; +type alerts = { + content: string; +} + +type default_login = { + username: string; + password: string; +} + export interface Category { catagoryName: string; collectionId: string; @@ -49,11 +61,3 @@ export interface Category { items: Script[]; }; } - -export type Scripts = { - page: number; - perPage: number; - totalItems: number; - totalPages: number; - items: Category[]; -};