- {data?.map((bucket) => (
+ {items?.map((bucket) => (
))}
diff --git a/src/pages/keys/page.tsx b/src/pages/keys/page.tsx
index da5fa79..e8ce2e2 100644
--- a/src/pages/keys/page.tsx
+++ b/src/pages/keys/page.tsx
@@ -1,14 +1,18 @@
import Button from "@/components/ui/button";
import Page from "@/context/page-context";
-import { Trash } from "lucide-react";
+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 { handleError } from "@/lib/utils";
+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: () => {
@@ -18,18 +22,45 @@ const KeysPage = () => {
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 (
@@ -39,17 +70,51 @@ const KeysPage = () => {
#
- Key ID
Name
+ Key ID
+ Secret Key
- {data?.map((key, idx) => (
+ {items?.map((key, idx) => (
{idx + 1}
- {key.id}
{key.name}
+
+
+ {key.id}
+
+
+ {!secretKeys[key.id] ? (
+
+ ) : (
+
+
+ {secretKeys[key.id]}
+
+
+ )}
+