From 2adb0047dda970df58ccddbcc00193441680c7e8 Mon Sep 17 00:00:00 2001 From: Fringg Date: Fri, 20 Mar 2026 01:17:01 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20add=20partner=20=E2=86=92=20campaign=20?= =?UTF-8?q?edges=20with=20distinct=20color=20to=20referral=20network?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/en.json | 1 + src/locales/fa.json | 1 + src/locales/ru.json | 1 + src/locales/zh.json | 1 + src/pages/ReferralNetwork/components/NetworkGraph.tsx | 9 +++++++-- src/pages/ReferralNetwork/components/NetworkLegend.tsx | 7 +++++++ src/types/referralNetwork.ts | 2 +- 7 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 33690fa..aa08f88 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1253,6 +1253,7 @@ "partner": "Partner", "topReferrer": "Top referrer (10+)", "campaignUser": "From campaign", + "partnerCampaignEdge": "Partner → Campaign", "campaignNode": "Ad campaign" }, "user": { diff --git a/src/locales/fa.json b/src/locales/fa.json index 377b65b..6adaf93 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -1087,6 +1087,7 @@ "partner": "شریک", "topReferrer": "ارجاع‌دهنده برتر (+۱۰)", "campaignUser": "از کمپین", + "partnerCampaignEdge": "شریک → کمپین", "campaignNode": "کمپین تبلیغاتی" }, "user": { diff --git a/src/locales/ru.json b/src/locales/ru.json index e43d71e..f43c612 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -1274,6 +1274,7 @@ "partner": "Партнёр", "topReferrer": "Топ-реферер (10+)", "campaignUser": "Из кампании", + "partnerCampaignEdge": "Партнёр → РК", "campaignNode": "Рекламная кампания" }, "user": { diff --git a/src/locales/zh.json b/src/locales/zh.json index 60545e9..fa558a8 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -1087,6 +1087,7 @@ "partner": "合作伙伴", "topReferrer": "顶级推荐人 (10+)", "campaignUser": "来自活动", + "partnerCampaignEdge": "合作伙伴 → 活动", "campaignNode": "广告活动" }, "user": { diff --git a/src/pages/ReferralNetwork/components/NetworkGraph.tsx b/src/pages/ReferralNetwork/components/NetworkGraph.tsx index be89d1a..10cd9d8 100644 --- a/src/pages/ReferralNetwork/components/NetworkGraph.tsx +++ b/src/pages/ReferralNetwork/components/NetworkGraph.tsx @@ -53,8 +53,13 @@ function buildFullGraph(graphData: NetworkGraphData): Graph { const edgeKey = `${edge.source}->${edge.target}`; if (!graph.hasEdge(edgeKey)) { graph.addEdgeWithKey(edgeKey, edge.source, edge.target, { - color: edge.type === 'campaign' ? 'rgba(77, 217, 192, 0.06)' : 'rgba(255,255,255,0.03)', - size: 0.3, + color: + edge.type === 'partner_campaign' + ? 'rgba(255, 138, 101, 0.5)' + : edge.type === 'campaign' + ? 'rgba(77, 217, 192, 0.06)' + : 'rgba(255,255,255,0.03)', + size: edge.type === 'partner_campaign' ? 1.5 : 0.3, edgeType: edge.type, }); } diff --git a/src/pages/ReferralNetwork/components/NetworkLegend.tsx b/src/pages/ReferralNetwork/components/NetworkLegend.tsx index 05944c9..4bd766a 100644 --- a/src/pages/ReferralNetwork/components/NetworkLegend.tsx +++ b/src/pages/ReferralNetwork/components/NetworkLegend.tsx @@ -38,6 +38,13 @@ export function NetworkLegend({ className }: NetworkLegendProps) { {t(item.labelKey)} ))} + {/* Partner → Campaign edge */} +
+
+ + {t('admin.referralNetwork.legend.partnerCampaignEdge')} + +
{/* Campaign node with gradient to represent varying colors */}
diff --git a/src/types/referralNetwork.ts b/src/types/referralNetwork.ts index a66f3b7..92c8ab0 100644 --- a/src/types/referralNetwork.ts +++ b/src/types/referralNetwork.ts @@ -37,7 +37,7 @@ export interface NetworkCampaignNode { export interface NetworkEdge { source: string; target: string; - type: 'referral' | 'campaign'; + type: 'referral' | 'campaign' | 'partner_campaign'; } export interface NetworkGraphData {