From cea48a1545250429b78235b2ad00b8243923e2b2 Mon Sep 17 00:00:00 2001 From: Ellie Huxtable Date: Mon, 29 Apr 2024 14:59:59 +0100 Subject: feat(ui/dotfiles): add vars (#1989) --- ui/src/components/dotfiles/Vars.tsx | 194 ++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 ui/src/components/dotfiles/Vars.tsx (limited to 'ui/src/components') diff --git a/ui/src/components/dotfiles/Vars.tsx b/ui/src/components/dotfiles/Vars.tsx new file mode 100644 index 00000000..00317b23 --- /dev/null +++ b/ui/src/components/dotfiles/Vars.tsx @@ -0,0 +1,194 @@ +import { useEffect, useState } from "react"; + +import DataTable from "@/components/ui/data-table"; +import { Button } from "@/components/ui/button"; +import { MoreHorizontal } from "lucide-react"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; + +import { ColumnDef } from "@tanstack/react-table"; + +import { invoke } from "@tauri-apps/api/core"; +import Drawer from "@/components/Drawer"; + +import { Var } from "@/state/models"; +import { useStore } from "@/state/store"; + +function deleteVar(name: string, refreshVars: () => void) { + invoke("delete_var", { name: name }) + .then(() => { + refreshVars(); + }) + .catch(() => { + console.error("Failed to delete var"); + }); +} + +function AddVar({ onAdd: onAdd }: { onAdd?: () => void }) { + let [name, setName] = useState(""); + let [value, setValue] = useState(""); + let [exp, setExport] = useState(false); + + // simple form to add vars + return ( +
+

Add var

+

Add a new var to your shell

+ +
{ + e.preventDefault(); + + invoke("set_var", { name: name, value: value, export: exp }) + .then(() => { + console.log("Added var"); + + if (onAdd) onAdd(); + }) + .catch(() => { + console.error("Failed to add var"); + }); + }} + > + setName(e.target.value)} + placeholder="Var name" + /> + + setValue(e.target.value)} + placeholder="Var value" + /> + +
+ +
+ + +
+
+ ); +} + +export default function Vars() { + const vars = useStore((state) => state.vars); + const refreshVars = useStore((state) => state.refreshVars); + + let [varDrawerOpen, setVarDrawerOpen] = useState(false); + + const columns: ColumnDef[] = [ + { + accessorKey: "name", + header: "Name", + }, + { + accessorKey: "value", + header: "Value", + }, + { + id: "actions", + cell: ({ row }: any) => { + const shell_var = row.original; + + return ( + + + + + + Actions + deleteVar(shell_var.name, refreshVars)} + > + Delete + + + + ); + }, + }, + ]; + + useEffect(() => { + refreshVars(); + }, []); + + return ( +
+
+
+

+ Vars +

+

+ Configure environment variables here +

+
+
+ + Add + + } + > + { + refreshVars(); + setVarDrawerOpen(false); + }} + /> + +
+
+
+
+
+ +
+
+
+
+ ); +} -- cgit v1.3.1