@stochain/referral-system
v1.0.0
Published
Referral system with tree structure and virtualized lists
Maintainers
Readme
@stochain/referral-system
React Native referral system with tree structure and virtualized lists.
Installation
npm install @stochain/referral-system react-native-vector-iconsFeatures
- 🌲 Tree-structured referral hierarchy
- 📊 11-level ranking system (Bronze to Legend)
- 🎨 Dynamic level colors and progress bars
- 📱 Optimized for React Native
- ⚡ Efficient tree traversal
- 🔍 Search functionality
- 📈 Progress tracking
- 💎 Member statistics
Usage
Basic Tree View
import { ReferralTree } from '@stochain/referral-system';
function ReferralScreen() {
const members = [
{
mb_id: 'user1',
mb_name: 'John Doe',
level: 3,
totalMemberCount: 150,
directMemberCount: 15,
children: [
{
mb_id: 'user2',
mb_name: 'Jane Smith',
level: 2,
totalMemberCount: 35,
directMemberCount: 8,
children: []
}
]
}
];
return (
<ReferralTree
members={members}
currentUserId="user1"
onMemberPress={(member) => console.log('Pressed:', member)}
/>
);
}Individual Member Item
import { ReferralMemberItem } from '@stochain/referral-system';
<ReferralMemberItem
item={{
mb_id: 'user1',
mb_name: 'John Doe',
level: 5,
totalMemberCount: 1200,
directMemberCount: 50
}}
isCurrentUser={true}
onPress={(member) => console.log('Pressed:', member)}
/>Level Utilities
import {
getLevelColor,
getLevelName,
calculateLevel,
getMemberCountRequirement
} from '@stochain/referral-system';
// Get color for level
const color = getLevelColor(5); // '#E57373'
// Get level name
const name = getLevelName(5); // 'Diamond II'
// Calculate level from member count
const level = calculateLevel(1500); // 5
// Get requirement for level
const requirement = getMemberCountRequirement(6); // 3000Search Members
import { searchMembers } from '@stochain/referral-system';
const filteredMembers = searchMembers(members, 'john');Tree Operations
import { flattenTree, calculateTotalDownline } from '@stochain/referral-system';
// Flatten tree structure
const flatMembers = flattenTree(members, 0, expandedIds);
// Calculate total downline
const totalDownline = calculateTotalDownline(member);Level System
| Level | Name | Min Members | Color | |-------|------|-------------|-------| | 0 | Bronze | 0 | Grey | | 1 | Silver | 10 | Brown | | 2 | Gold | 30 | Light Grey | | 3 | Platinum | 100 | Orange | | 4 | Diamond I | 300 | Red Orange | | 5 | Diamond II | 1,000 | Red | | 6 | Diamond III | 3,000 | Pink | | 7 | Master I | 5,000 | Purple | | 8 | Master II | 10,000 | Deep Purple | | 9 | Grand Master | 50,000 | Indigo | | 10 | Legend | 100,000 | Blue |
Components
ReferralTree
Displays hierarchical tree of referral members.
Props:
members(ReferralMember[]): Array of referral memberssearchText(string, optional): Search queryonMemberPress(function, optional): Callback when member pressedcurrentUserId(string, optional): ID of current usercontainerStyle(ViewStyle, optional): Custom container style
ReferralMemberItem
Individual member card with stats.
Props:
item(ReferralMember): Member datadepth(number, optional): Tree depth levelisExpanded(boolean, optional): Whether node is expandedhasChildren(boolean, optional): Whether member has childrenonToggle(function, optional): Toggle expand/collapseonPress(function, optional): Press callbackisCurrentUser(boolean, optional): Highlight current usercontainerStyle(ViewStyle, optional): Custom container styletextStyle(TextStyle, optional): Custom text style
Types
interface ReferralMember {
mb_id: string;
mb_name?: string;
mb_email?: string;
level?: number;
totalMemberCount?: number;
directMemberCount?: number;
children?: ReferralMember[];
created_at?: string;
}
interface LevelConfig {
level: number;
color: string;
minMembers: number;
name: string;
}API Reference
Utility Functions
getLevelColor(level): Get color for levelgetLevelName(level): Get name for levelgetMemberCountRequirement(level): Get member requirementcalculateLevel(memberCount): Calculate level from countcalculateTotalDownline(member): Calculate total downlineflattenTree(members, depth, expandedIds): Flatten tree structuresearchMembers(members, searchText): Filter members by searchformatNumber(num): Format number with commascalculateProgress(currentCount, currentLevel): Calculate progress %
License
MIT
