feat: add referral network graph visualization page

Interactive Sigma.js + graphology graph with ForceAtlas2 web worker
layout, campaign/user node coloring, filters via nodeReducer pattern,
search highlighting, user/campaign detail side panels, and 4-locale
translations. Dependencies: sigma v3, graphology, graphology-layout-forceatlas2.
This commit is contained in:
Fringg
2026-03-19 07:56:01 +03:00
parent 84f0e4e9b4
commit 235eaec85f
23 changed files with 2126 additions and 8 deletions

View File

@@ -0,0 +1,31 @@
import apiClient from './client';
import type {
NetworkGraphData,
NetworkUserDetail,
NetworkCampaignDetail,
NetworkSearchResult,
} from '@/types/referralNetwork';
export const referralNetworkApi = {
getNetworkGraph: async (): Promise<NetworkGraphData> => {
const response = await apiClient.get('/cabinet/admin/referral-network/');
return response.data;
},
getUserDetail: async (userId: number): Promise<NetworkUserDetail> => {
const response = await apiClient.get(`/cabinet/admin/referral-network/user/${userId}`);
return response.data;
},
getCampaignDetail: async (campaignId: number): Promise<NetworkCampaignDetail> => {
const response = await apiClient.get(`/cabinet/admin/referral-network/campaign/${campaignId}`);
return response.data;
},
search: async (query: string): Promise<NetworkSearchResult> => {
const response = await apiClient.get('/cabinet/admin/referral-network/search', {
params: { q: query },
});
return response.data;
},
};