| .. | ||
| devUserTypes.test.ts | ||
| devUserTypes.ts | ||
| index.ts | ||
| navigation.config.ts | ||
| README.md | ||
Platform Admin Configuration
This directory contains configuration files for the Platform Admin frontend application.
Navigation Configuration
File: navigation.config.ts
Architecture Principles
The navigation configuration follows SOLID principles and DRY practices:
-
Single Responsibility Principle (SRP)
- Navigation structure is separated from presentation logic
- Each section is self-contained with its own routes
-
Open/Closed Principle (OCP)
- Easy to extend by adding new sections/items
- No need to modify App.tsx when adding routes
- Changes are localized to
navigation.config.ts
-
DRY (Don't Repeat Yourself)
- Navigation items defined once, consumed in multiple places
- Type-safe interfaces prevent duplication of structure
- Helper functions for common navigation queries
Type Safety
interface NavItem {
to: string; // Route path
label: string; // Display label
description?: string; // Optional tooltip/accessibility text
icon?: string; // Future: icon identifier
}
interface NavSection {
title: string; // Section heading
items: NavItem[]; // Routes in this section
meta?: { // Future: collapsibility, permissions
description?: string;
collapsible?: boolean;
defaultCollapsed?: boolean;
};
}
Usage
In App.tsx:
import { NAVIGATION_SECTIONS } from './config/navigation.config';
// Render sidebar navigation
NAVIGATION_SECTIONS.map((section) => (
<NavSection key={section.title}>
<NavSectionTitle>{section.title}</NavSectionTitle>
<NavList>
{section.items.map((item) => (
<StyledNavLink to={item.to} title={item.description}>
{item.label}
</StyledNavLink>
))}
</NavList>
</NavSection>
))
Helper Functions:
import {
getAllNavItems,
findNavItemByPath,
findSectionByPath
} from './config/navigation.config';
// Get all routes for validation
const allRoutes = getAllNavItems();
// Find item metadata
const item = findNavItemByPath('/analytics/revenue');
console.log(item?.description); // "Detailed revenue analytics and trends"
// Find parent section
const section = findSectionByPath('/analytics/revenue');
console.log(section?.title); // "Analytics"
Adding New Routes
To add a new navigation item:
- Open
navigation.config.ts - Find the appropriate section
- Add a new
NavItemobject:
{
title: 'Analytics',
items: [
// ... existing items
{
to: '/analytics/new-feature',
label: 'New Feature',
description: 'Description for tooltips',
},
],
}
- Add the corresponding route in
App.tsx:
<Route path="/analytics/new-feature" element={<NewFeaturePage />} />
Navigation Hierarchy
Current structure (in order):
- Home - Platform overview dashboard
- Dashboards - Category-specific dashboards
- Analytics - Detailed analytics tools
- Attributes - Content attribute management
- Conversations - Scammer detection & training
- Devices - Device authorization
- Email - Email system management
- Infrastructure - Service monitoring
- ML Services - Machine learning features
- Shop - Product management
- SSO - User & session management
- Subscriptions - Subscription management
Future Enhancements
The navigation config is designed to support:
- Icons:
iconfield ready for future icon integration - Permissions: Add
requiredRoleorrequiredPermissionfields - Collapsible sections:
meta.collapsibleandmeta.defaultCollapsed - Badges: Add
badgefield for counts (e.g., "3 new") - External links: Add
external: booleanflag - Search: Helper functions support full-text search
Benefits
Before (hardcoded in App.tsx):
- ❌ Navigation mixed with component logic
- ❌ Hard to find/modify routes
- ❌ No type safety for structure
- ❌ No reusability
After (config-based):
- ✅ Single source of truth
- ✅ Type-safe navigation structure
- ✅ Easy to extend and maintain
- ✅ Reusable helper functions
- ✅ Separation of concerns
- ✅ Supports future features (icons, permissions, etc.)
Other Configuration Files
devUserTypes.ts- Development user type switching (dev mode only)index.ts- Barrel exports for clean imports
Best Practices
- Always use the config - Never hardcode navigation in components
- Add descriptions - Helps with accessibility and tooltips
- Keep sections logical - Group related features together
- Use helper functions - Leverage
findNavItemByPath, etc. - Update routes together - Add to config AND App.tsx routes
Last Updated: 2026-01-10