From 143561c4ab6a037cc97c2182b204751d654305b9 Mon Sep 17 00:00:00 2001 From: Usman Baig Date: Wed, 4 Feb 2026 19:30:51 +0100 Subject: [PATCH] feat: enhance Campaigns component with loading state, user guidance, and documentation link for tracking marketing campaigns --- components/dashboard/Campaigns.tsx | 89 +++++++++++++++++------------- 1 file changed, 52 insertions(+), 37 deletions(-) diff --git a/components/dashboard/Campaigns.tsx b/components/dashboard/Campaigns.tsx index 96e7465..b2d406c 100644 --- a/components/dashboard/Campaigns.tsx +++ b/components/dashboard/Campaigns.tsx @@ -1,9 +1,11 @@ 'use client' import { useState, useEffect } from 'react' +import Link from 'next/link' import { formatNumber } from '@/lib/utils/format' -import { Modal } from '@ciphera-net/ui' +import { Modal, ArrowRightIcon } from '@ciphera-net/ui' import { getCampaigns, CampaignStat } from '@/lib/api/stats' +import { FaBullhorn } from 'react-icons/fa' interface CampaignsProps { siteId: string @@ -75,45 +77,58 @@ export default function Campaigns({ siteId, dateRange }: CampaignsProps) { )} -
- {isLoading ? ( -
-

Loading...

+ {isLoading ? ( +
+

Loading...

+
+ ) : hasData ? ( +
+
+
Source
+
Medium
+
Campaign
+
Visitors
- ) : hasData ? ( - <> -
-
Source
-
Medium
-
Campaign
-
Visitors
-
- {displayedData.map((item, index) => ( -
-
- {item.source} -
-
- {item.medium || '-'} -
-
- {item.campaign || '-'} -
-
- {formatNumber(item.visitors)} -
+ {displayedData.map((item, index) => ( +
+
+ {item.source}
- ))} - {Array.from({ length: emptySlots }).map((_, i) => ( - + )}