|
{transaction.amount}
{transaction.asset}
diff --git a/admin-dashboard/components/dashboard/StatusBadge.tsx b/admin-dashboard/components/dashboard/StatusBadge.tsx
index 464b76c8..5ec0d56d 100644
--- a/admin-dashboard/components/dashboard/StatusBadge.tsx
+++ b/admin-dashboard/components/dashboard/StatusBadge.tsx
@@ -1,17 +1,20 @@
"use client";
-import type { TransactionStatus } from "@/components/dashboard/types";
+import type { TransactionStatus, WebhookDeliveryStatus } from "@/components/dashboard/types";
import { Pulse } from "@/components/ui/motion";
type BadgeTone = "green" | "amber" | "slate" | "red";
-function getTone(status: TransactionStatus | "active" | "inactive"): BadgeTone {
+type AllowedStatus = TransactionStatus | WebhookDeliveryStatus | "active" | "inactive";
+
+function getTone(status: AllowedStatus): BadgeTone {
switch (status) {
case "success":
case "active":
return "green";
case "pending":
case "submitted":
+ case "retrying":
return "amber";
case "failed":
return "red";
@@ -20,16 +23,14 @@ function getTone(status: TransactionStatus | "active" | "inactive"): BadgeTone {
}
}
-function isPendingStatus(
- status: TransactionStatus | "active" | "inactive"
-): boolean {
- return status === "pending" || status === "submitted";
+function isPendingStatus(status: AllowedStatus): boolean {
+ return status === "pending" || status === "submitted" || status === "retrying";
}
export function StatusBadge({
status,
}: {
- status: TransactionStatus | "active" | "inactive";
+ status: AllowedStatus;
}) {
const toneClassName = {
green:
diff --git a/admin-dashboard/components/dashboard/WebhookDeliveryLog.tsx b/admin-dashboard/components/dashboard/WebhookDeliveryLog.tsx
index 61a697b7..bfec2801 100644
--- a/admin-dashboard/components/dashboard/WebhookDeliveryLog.tsx
+++ b/admin-dashboard/components/dashboard/WebhookDeliveryLog.tsx
@@ -60,41 +60,45 @@ interface WebhookDeliveryLogProps {
onQueryChange: (query: Partial) => void;
}
+function DrawerSection({ title, children }: { title: string; children: React.ReactNode }) {
+ return (
+
+
+ {title}
+
+ {children}
+
+ );
+}
+
+function JsonBlock({ value }: { value: Record | Record }) {
+ return (
+
+ {JSON.stringify(value, null, 2)}
+
+ );
+}
+
export function WebhookDeliveryLogTable({
data,
onPageChange,
onQueryChange,
}: WebhookDeliveryLogProps) {
- const [showPayload, setShowPayload] = useState(null);
+ const [expandedRow, setExpandedRow] = useState(null);
- const getStatusVariant = (status: WebhookDeliveryStatus) => {
- switch (status) {
- case "success":
- return "success";
- case "failed":
- return "error";
- case "pending":
- return "warning";
- case "retrying":
- return "info";
- default:
- return "default";
- }
- };
-
- const formatTimestamp = (timestamp: string) => {
- return new Date(timestamp).toLocaleString();
- };
+ const formatTimestamp = (timestamp: string) =>
+ new Date(timestamp).toLocaleString();
const filteredRows = useMemo(() => {
let rows = [...data.rows];
if (data.search) {
+ const q = data.search.toLowerCase();
rows = rows.filter(
(row) =>
- row.tenantName?.toLowerCase().includes(data.search.toLowerCase()) ||
- row.tenantId.toLowerCase().includes(data.search.toLowerCase()) ||
- row.webhookUrl.toLowerCase().includes(data.search.toLowerCase())
+ row.tenantName?.toLowerCase().includes(q) ||
+ row.tenantId.toLowerCase().includes(q) ||
+ row.webhookUrl.toLowerCase().includes(q),
);
}
@@ -138,7 +142,6 @@ export function WebhookDeliveryLogTable({
- {/* Search */}
- {/* Status Filter */}
@@ -165,7 +167,6 @@ export function WebhookDeliveryLogTable({
- {/* Event Type Filter */}
@@ -182,12 +183,13 @@ export function WebhookDeliveryLogTable({
- {/* Sort */}
|