From 6cd4319fcf540ef70f74cc2f10d0d4297ee7b788 Mon Sep 17 00:00:00 2001 From: Ellie Huxtable Date: Thu, 11 Apr 2024 16:59:01 +0100 Subject: feat(gui): add base structure (#1935) * initial * ui things * cargo * update, add history refresh button * history page a bit better, add initial dotfiles page * re-org layout * bye squigglies * add dotfiles ui, show aliases * add default shell detection * put stats in a little drawer, alias import changes * use new table for aliases, add alias deleting * support adding aliases * close drawer when added, no alias autocomplete * clippy, format * attempt to ensure gdk is installed ok * sudo * no linux things on mac ffs * I forgot we build for windows too... end of day * remove tauri backend from workspace --- ui/src/components/dotfiles/Aliases.tsx | 191 +++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 ui/src/components/dotfiles/Aliases.tsx (limited to 'ui/src/components/dotfiles/Aliases.tsx') diff --git a/ui/src/components/dotfiles/Aliases.tsx b/ui/src/components/dotfiles/Aliases.tsx new file mode 100644 index 00000000..4854e6b5 --- /dev/null +++ b/ui/src/components/dotfiles/Aliases.tsx @@ -0,0 +1,191 @@ +import React, { 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, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; + +import { invoke } from "@tauri-apps/api/core"; +import Drawer from "@/components/Drawer"; + +function loadAliases( + setAliases: React.Dispatch>, +) { + invoke("aliases").then((aliases: any) => { + setAliases(aliases); + }); +} + +type Alias = { + name: string; + value: string; +}; + +function deleteAlias( + name: string, + setAliases: React.Dispatch>, +) { + invoke("delete_alias", { name: name }) + .then(() => { + console.log("Deleted alias"); + loadAliases(setAliases); + }) + .catch(() => { + console.error("Failed to delete alias"); + }); +} + +function AddAlias({ onAdd: onAdd }: { onAdd?: () => void }) { + let [name, setName] = useState(""); + let [value, setValue] = useState(""); + + // simple form to add aliases + return ( +
+

+ Add alias +

+

Add a new alias to your shell

+ +
{ + e.preventDefault(); + + invoke("set_alias", { name: name, value: value }) + .then(() => { + console.log("Added alias"); + + if (onAdd) onAdd(); + }) + .catch(() => { + console.error("Failed to add alias"); + }); + }} + > + setName(e.target.value)} + placeholder="Alias name" + /> + + setValue(e.target.value)} + placeholder="Alias value" + /> + + +
+
+ ); +} + +export default function Aliases() { + let [aliases, setAliases] = useState([]); + let [aliasDrawerOpen, setAliasDrawerOpen] = useState(false); + + const columns: ColumnDef[] = [ + { + accessorKey: "name", + header: "Name", + }, + { + accessorKey: "value", + header: "Value", + }, + { + id: "actions", + cell: ({ row }: any) => { + const alias = row.original; + + return ( + + + + + + Actions + deleteAlias(alias.name, setAliases)} + > + Delete + + + + ); + }, + }, + ]; + + useEffect(() => { + loadAliases(setAliases); + }, []); + + return ( +
+
+
+

+ Aliases +

+

+ Aliases allow you to condense long commands into short, + easy-to-remember commands. +

+
+
+ + Add + + } + > + { + loadAliases(setAliases); + setAliasDrawerOpen(false); + }} + /> + +
+
+
+
+
+ +
+
+
+
+ ); +} -- cgit v1.3.1