# Navigation Management System ## Overview Comprehensive navigation management system with admin controls, dropdown menus, social media integration, and full customization capabilities. ## Features ### 1. **Dynamic Navigation Management** - Create, edit, delete, and reorder navigation items - Support for multiple navigation types: - **Page**: Links to predefined system pages (Home, About, Calendar, etc.) - **Internal**: Custom internal URLs - **External**: Links to external websites - **Dropdown**: Parent items with child menu items (nested navigation) - Visibility controls (show/hide items) - Custom ordering with up/down buttons - Target controls (_self or _blank for external links) ### 2. **Social Media Integration** - Dedicated social media links management - Supported platforms: - Facebook - Instagram - YouTube - Twitter - TikTok - LinkedIn - Discord - Twitch - Automatic icon rendering - Display in top bar of navigation - Reorderable and toggleable visibility ### 3. **Admin Interface** - Located at `/admin/navigace` - Tab-based interface: - Navigation Items tab - Social Links tab - Features: - Add new items with modal form - Edit existing items - Delete items with confirmation - Reorder with visual up/down buttons - Real-time preview of visibility status ## Database Schema ### `navigation_items` Table ```sql - id (SERIAL PRIMARY KEY) - label (VARCHAR) - Display name - url (TEXT) - Custom URL (optional) - icon (VARCHAR) - Icon name (optional) - type (VARCHAR) - internal/external/dropdown/page - page_type (VARCHAR) - Reference to system page - page_id (INTEGER) - Optional content ID reference - visible (BOOLEAN) - Show/hide control - display_order (INTEGER) - Sort order - parent_id (INTEGER) - For dropdown children - target (VARCHAR) - _self/_blank - css_class (VARCHAR) - Custom styling - requires_auth (BOOLEAN) - Authentication required - requires_admin (BOOLEAN) - Admin access required ``` ### `social_links` Table ```sql - id (SERIAL PRIMARY KEY) - platform (VARCHAR) - facebook/instagram/youtube/etc. - url (TEXT) - Social media profile URL - display_order (INTEGER) - Sort order - visible (BOOLEAN) - Show/hide control - icon (VARCHAR) - Custom icon override ``` ## API Endpoints ### Public Endpoints - `GET /api/v1/navigation` - Get all visible navigation items - `GET /api/v1/social-links` - Get all visible social links ### Admin Endpoints (require authentication + admin role) #### Navigation Management - `GET /api/v1/admin/navigation` - Get all navigation items (including hidden) - `POST /api/v1/admin/navigation` - Create new navigation item - `PUT /api/v1/admin/navigation/:id` - Update navigation item - `DELETE /api/v1/admin/navigation/:id` - Delete navigation item - `POST /api/v1/admin/navigation/reorder` - Reorder multiple items #### Social Links Management - `GET /api/v1/admin/social-links` - Get all social links (including hidden) - `POST /api/v1/admin/social-links` - Create new social link - `PUT /api/v1/admin/social-links/:id` - Update social link - `DELETE /api/v1/admin/social-links/:id` - Delete social link - `POST /api/v1/admin/social-links/reorder` - Reorder multiple links ## File Structure ### Backend ``` database/migrations/ - 20251010154600_create_navigation_system.up.sql - 20251010154600_create_navigation_system.down.sql internal/models/ - navigation.go (NavigationItem, SocialLink models) internal/controllers/ - navigation_controller.go (All CRUD operations) internal/routes/ - routes.go (Added navigation routes) ``` ### Frontend ``` frontend/src/ services/ - navigation.ts (API client functions) pages/admin/ - NavigationAdminPage.tsx (Admin UI) components/ - Navbar.tsx (Updated to support dynamic navigation) ``` ## Usage ### Running Migrations ```bash # Apply migration make migrate-up # Or manually with goose goose -dir database/migrations postgres "your-connection-string" up ``` ### Accessing Admin Panel 1. Navigate to `/admin/navigace` 2. Use the tabbed interface to manage: - **Navigation Items**: Main menu structure - **Social Links**: Social media icons ### Adding Navigation Items #### Page Type (System Pages) 1. Click "Přidat položku" 2. Enter label (e.g., "Home", "About") 3. Select Type: "Stránka (vyberte existující)" 4. Choose from predefined pages 5. Set visibility and save #### External Link 1. Click "Přidat položku" 2. Enter label 3. Select Type: "Externí odkaz" 4. Enter full URL (e.g., `https://example.com`) 5. Choose target (_self or _blank) 6. Save #### Dropdown Menu 1. Create parent item with Type: "Dropdown" 2. Create child items with parent_id reference 3. Children will appear as dropdown on hover ### Adding Social Links 1. Switch to "Sociální sítě" tab 2. Click "Přidat sociální síť" 3. Select platform from dropdown 4. Enter profile URL 5. Set visibility and save ## Frontend Integration ### Using Navigation API ```typescript import { getNavigationItems, getSocialLinks } from '../services/navigation'; // Fetch navigation const navItems = await getNavigationItems(); // Fetch social links const socialLinks = await getSocialLinks(); ``` ### Navbar Component The existing `Navbar.tsx` component already supports: - Dropdown menus (hover to expand) - External link indicators - Social media icons in top bar - Responsive mobile menu - Active route highlighting ## Predefined Page Types - `home` → `/` - `about` → `/o-klubu` - `calendar` → `/kalendar` - `matches` → `/zapasy` - `activities` → `/aktivity` - `players` → `/hraci` - `tables` → `/tabulky` - `blog` → `/blog` - `videos` → `/videa` - `gallery` → `/galerie` - `sponsors` → `/sponzori` - `contact` → `/kontakt` - `search` → `/hledat` ## Default Navigation Items The migration automatically creates default navigation items on first run: - Domů (Home) - O klubu (About) - Kalendář (Calendar) - Zápasy (Matches) - Aktivity (Activities) - Hráči (Players) - Tabulky (Tables) - Články (Blog) - Videa (Videos) - Fotogalerie (Gallery) - Sponzoři (Sponsors) - Kontakt (Contact) ## Best Practices ### Ordering - Use display_order for consistent sorting - Lower numbers appear first - Use up/down buttons in admin for easy reordering ### Dropdown Menus - Keep dropdown depth to 1 level (parent → children only) - Limit children to 5-8 items for best UX - Use clear, descriptive labels ### Social Links - Order by priority/most used first - Keep visible count to 3-5 for clean UI - Use official platform URLs ### External Links - Always use https:// for security - Set target="_blank" for external sites - Consider adding icon or indicator ## Styling & Customization ### CSS Classes Add custom `css_class` to navigation items for special styling: ```css .nav-highlighted { background: var(--club-primary); color: white; } ``` ### Icons Supported React Icons (FaIconName format): - Navigation: FaHome, FaCalendar, FaUsers, etc. - Social: FaFacebook, FaInstagram, FaYoutube, etc. ## Troubleshooting ### Navigation Not Updating 1. Check browser console for API errors 2. Verify admin authentication 3. Clear browser cache 4. Check network tab for failed requests ### Social Icons Not Showing 1. Verify platform name matches supported list 2. Check URL format (must start with https://) 3. Ensure visibility is set to true 4. Check icon import in Navbar component ### Dropdown Not Working 1. Ensure parent item type is "dropdown" 2. Verify children have correct parent_id 3. Check both parent and children are visible 4. Test hover delay timing ## Future Enhancements - [ ] Drag-and-drop reordering (requires react-beautiful-dnd package) - [ ] Multi-level nested dropdowns - [ ] Icon picker UI - [ ] Bulk operations (delete, hide/show) - [ ] Navigation templates/presets - [ ] A/B testing for navigation layouts - [ ] Analytics integration (track clicks) - [ ] Role-based navigation (different menus for different user types) - [ ] Mega menus with rich content - [ ] Breadcrumb generation from navigation structure ## Support For issues or questions, refer to the main project documentation or contact the development team.