+ {/* Tab bar */}
+
+ {LANGUAGES.map((lang) => (
+
+ ))}
+
+
+ {/* Code block */}
+
+ {/* Copy button */}
+
+
+
+
+
+
+
+
+ {snippet}
+
+
+
+
+
+
+ {/* Helper text */}
+
+ {t("snippetsHelper")}
+
+
+ );
+}
diff --git a/frontend/src/components/RecentPayments.tsx b/frontend/src/components/RecentPayments.tsx
index 6c9b812..43b4a34 100644
--- a/frontend/src/components/RecentPayments.tsx
+++ b/frontend/src/components/RecentPayments.tsx
@@ -5,6 +5,7 @@ import { usePathname, useRouter, useSearchParams } from "next/navigation";
import { useLocale, useTranslations } from "next-intl";
import Skeleton from "react-loading-skeleton";
import "react-loading-skeleton/dist/skeleton.css";
+import toast from "react-hot-toast";
import PaymentDetailModal from "@/components/PaymentDetailModal";
import ExportCsvButton from "@/components/ExportCsvButton";
import { localeToLanguageTag } from "@/i18n/config";
@@ -383,6 +384,21 @@ export default function RecentPayments({
setSelectedPayment(null);
};
+ const handleCopyId = async (id: string, event: React.MouseEvent) => {
+ event.stopPropagation();
+ try {
+ await navigator.clipboard.writeText(id);
+ } catch {
+ const el = document.createElement("textarea");
+ el.value = id;
+ document.body.appendChild(el);
+ el.select();
+ document.execCommand("copy");
+ document.body.removeChild(el);
+ }
+ toast.success("Intent ID copied to clipboard");
+ };
+
if (showSkeleton || loading) {
return (
@@ -1003,7 +1019,27 @@ export default function RecentPayments({
- {payment.amount} {payment.asset}
+
+ {payment.amount} {payment.asset}
+
+
|
|