// [TSM.ID].[11031972] -- All Rights Reserved. Proprietary & Confidential. import { useState, useMemo } from 'react'; import { useModuleRegistry } from '../context/ModuleRegistryContext'; import { useCommercial } from '../context/CommercialContext'; export default function TenantModuleMatrix({ allowedModules = [] }) { const { registry, allModules } = useModuleRegistry(); const { tiers, modulePrices } = useCommercial(); const [searchQuery, setSearchQuery] = useState(''); const [viewMode, setViewMode] = useState('grid'); // grid | list // Supreme mode: all modules granted const isSupreme = allowedModules === 'supreme'; const effectiveAllowed = isSupreme ? allModules.map(m => m.id) : allowedModules; // Build module status map const moduleStatusMap = useMemo(() => { const map = {}; allModules.forEach(mod => { const isGranted = effectiveAllowed.includes(mod.id); map[mod.id] = { ...mod, granted: isGranted, price: modulePrices?.[mod.id] || null }; }); return map; }, [allModules, allowedModules, modulePrices]); const grantedCount = effectiveAllowed.length; const totalCount = allModules.length; const lockedCount = totalCount - grantedCount; // Find matching tier const matchedTier = useMemo(() => { return tiers.find(t => t.modules.length === effectiveAllowed.length && t.modules.every(m => effectiveAllowed.includes(m)) ); }, [tiers, allowedModules]); // Filter modules const filteredModules = useMemo(() => { if (!searchQuery.trim()) return allModules; const q = searchQuery.toLowerCase(); return allModules.filter(m => m.id.toLowerCase().includes(q) || m.name.toLowerCase().includes(q) ); }, [allModules, searchQuery]); // Group by registry category const groupedModules = useMemo(() => { const groups = {}; for (const [groupKey, groupData] of Object.entries(registry)) { const mods = groupData.modules.filter(m => filteredModules.some(fm => fm.id === m.id) ); if (mods.length > 0) { groups[groupKey] = { ...groupData, modules: mods }; } } return groups; }, [registry, filteredModules]); return (
{isSupreme && SUPREME ADMIN — ALL ACCESS}{!isSupreme && <>Tier: {matchedTier ? matchedTier.name : 'CUSTOM A LA CARTE'}>}
| {mod.id} | {mod.name} | {isGranted ? '✓ GRANTED' : '✗ LOCKED'} |