Skip to content

Latest commit

 

History

History
118 lines (95 loc) · 3.23 KB

File metadata and controls

118 lines (95 loc) · 3.23 KB

Organization Member and Stats Display Fix

✅ Problem Solved

Fixed the issue where organization members and stats were showing 0 even when members existed, affecting both member and non-member views.

🔍 Root Causes

  1. Missing Stats Calculation: OrgKPIGrid component wasn't receiving calculated stats
  2. Security Restriction: API returned empty members array for non-members
  3. No Public Member Count: Non-members couldn't see even basic member count

🔧 Changes Made

Backend (OrganisationHandler.js)

Updated getOrganisationById function:

  • Added memberCount field to non-member response
  • Counts active members for public display
  • Keeps member details private (security maintained)
// For non-members
return res.status(200).json({
    organisation: organisation[0],
    members: [],
    memberCount: memberCount.length,  // NEW: Public member count
    isMember: false
});

Frontend (OrganisationPage.jsx)

Updated OrgKPIGrid component call:

  • Calculates stats from members array
  • Uses memberCount for non-members
  • Aggregates forest stats, area, and carbon credits
  • Displays tokens raised from addedFunds
<OrgKPIGrid 
    organisation={selectedOrganisation.organisation}
    stats={{
        totalMembers: selectedOrganisation.isMember 
            ? (selectedOrganisation.members?.length || 0)
            : (selectedOrganisation.memberCount || 0),
        totalForests: selectedOrganisation.members?.reduce(...),
        totalArea: selectedOrganisation.members?.reduce(...),
        totalCarbon: selectedOrganisation.members?.reduce(...),
        tokensRaised: parseFloat(BigInt(addedFunds) / BigInt(10**18))
    }}
/>

📊 Data Flow

For Members:

API Response:
{
    organisation: {...},
    members: [{...}, {...}],  // Full member details with stats
    isMember: true
}
    ↓
Frontend calculates:
- totalMembers: members.length
- totalForests: sum of forestsRegistered
- totalArea: sum of verifiedArea
- totalCarbon: sum of totalCarbonCredits

For Non-Members:

API Response:
{
    organisation: {...},
    members: [],              // Empty for privacy
    memberCount: 2,           // Public count
    isMember: false
}
    ↓
Frontend displays:
- totalMembers: memberCount
- Other stats: 0 (no access to member details)

✨ Benefits

  1. Members See Full Stats: Complete aggregated data from all members
  2. Non-Members See Count: Can see how many members without details
  3. Privacy Maintained: Member details remain private
  4. Tokens Raised: Displays invested funds from addedFunds

🎯 Results

Before:

  • ❌ Member count: 0 (even with 2 members)
  • ❌ Stats not loading
  • ❌ Non-members see nothing

After:

  • ✅ Member count: Correct (e.g., 2)
  • ✅ Stats calculated and displayed
  • ✅ Non-members see member count
  • ✅ Members see full aggregated stats

📝 Files Modified

  • server/handlers/OrganisationHandler.js - Added memberCount to API response
  • client/src/pages/OrganisationPage.jsx - Calculate and pass stats to OrgKPIGrid

🔐 Security

  • ✅ Member details remain private for non-members
  • ✅ Only member count is public
  • ✅ Stats aggregation only for members
  • ✅ No sensitive data exposed