import Button from "@/components/ui/button"; import Page from "@/context/page-context"; import { Copy, Eye, Trash } from "lucide-react"; import { Card, Input, Table } from "react-daisyui"; import { useKeys, useRemoveKey } from "./hooks"; import CreateKeyDialog from "./components/create-key-dialog"; import { toast } from "sonner"; import { copyToClipboard, handleError } from "@/lib/utils"; import { useCallback, useMemo, useState } from "react"; import api from "@/lib/api"; const KeysPage = () => { const { data, refetch } = useKeys(); const [search, setSearch] = useState(""); const [secretKeys, setSecretKeys] = useState>({}); const removeKey = useRemoveKey({ onSuccess: () => { refetch(); toast.success("Key removed!"); }, onError: handleError, }); const fetchSecretKey = useCallback(async (id: string) => { try { const result = await api.get("/v1/key", { params: { id, showSecretKey: "true" }, }); if (!result?.secretAccessKey) { throw new Error("Failed to fetch secret key"); } setSecretKeys((prev) => ({ ...prev, [id]: result.secretAccessKey })); } catch (err) { handleError(err); } }, []); const onRemove = (id: string) => { if (window.confirm("Are you sure you want to remove this key?")) { removeKey.mutate(id); } }; const items = useMemo(() => { if (!search?.length) { return data; } const q = search.toLowerCase(); return data?.filter((item) => item.id.includes(q) || item.name.includes(q)); }, [data, search]); return (
setSearch(e.target.value)} />
# Name Key ID Secret Key {items?.map((key, idx) => ( {idx + 1} {key.name}

{key.id}

{!secretKeys[key.id] ? ( ) : (

{secretKeys[key.id]}

)}
); }; export default KeysPage;