This commit is contained in:
Tomáš Dvořák
2025-10-16 13:32:05 +02:00
commit 12cba639b9
663 changed files with 168914 additions and 0 deletions
+427
View File
@@ -0,0 +1,427 @@
# 🎯 Navigation Management System - Complete Guide
## What Is This?
You now have a **professional-grade navigation management system** that allows you to fully customize your website's navigation without touching any code. This is a game-changer for content management and future scalability.
## Why Is This Important?
### Before This System:
- ❌ Navigation was hardcoded in components
- ❌ Adding new menu items required code changes
- ❌ No dropdown menu support
- ❌ Social media links scattered across settings
- ❌ Difficult to reorder or hide items
- ❌ No way to manage navigation hierarchy
### After This System:
-**Fully dynamic navigation** - add/edit/delete via admin panel
-**Dropdown menus** - unlimited nested items
-**Drag-free reordering** - simple up/down buttons
-**Social media hub** - manage all platforms in one place
-**Future-ready** - scalable for complex navigation needs
-**No code required** - admins can manage everything
## What Can You Do?
### 1. Manage Navigation Items
- **Add** new menu items (internal pages, external links, or dropdowns)
- **Edit** existing items (change label, URL, visibility, order)
- **Delete** items you no longer need
- **Reorder** with up/down buttons (no drag-drop needed)
- **Hide/Show** without deleting data
- **Create dropdowns** with unlimited children
### 2. Manage Social Media
- **Add** social media profiles for 8+ platforms
- **Reorder** to prioritize important channels
- **Toggle visibility** to enable/disable platforms
- **Auto-icons** - platform icons render automatically
### 3. Navigation Types
#### Page Type
Links to your built-in pages:
- Home, About, Calendar, Matches, Players, etc.
- Auto-maps to correct URLs
- **Example**: "O klubu" → `/o-klubu`
#### Internal Type
Custom URLs within your site:
- `/custom-page`
- `/special/section`
- **Example**: "Historie" → `/historie`
#### External Type
Links to external websites:
- Opens in new tab (optional)
- Shows external link icon
- **Example**: "Vstupenky" → `https://tickets.com`
#### Dropdown Type
Parent items with children:
- Hover to reveal submenu
- Organize related content
- **Example**: "Média" with children "Videa", "Fotogalerie"
## How To Use It
### Quick Start (5 Minutes)
#### Step 1: Run Migration
```bash
make migrate-up
```
This creates the database tables and seeds default navigation.
#### Step 2: Restart Application
```bash
# Backend
go run main.go
# Frontend (separate terminal)
cd frontend && npm start
```
#### Step 3: Access Admin Panel
1. Login to your admin account
2. Navigate to `/admin/navigace`
3. You'll see two tabs: "Navigační menu" and "Sociální sítě"
#### Step 4: Start Customizing!
**Example 1: Add External Link**
```
1. Click "Přidat položku"
2. Label: "Fanshop"
3. Type: "Externí odkaz"
4. URL: "https://yourshop.com"
5. Target: "_blank" (new window)
6. Save
```
**Example 2: Create Dropdown**
```
1. Create parent:
- Label: "Média"
- Type: "dropdown"
2. Create children:
- Label: "Videa", Type: "page", Page: "videos"
- Label: "Fotogalerie", Type: "page", Page: "gallery"
3. Reorder as needed
```
**Example 3: Add Social Media**
```
1. Switch to "Sociální sítě" tab
2. Click "Přidat sociální síť"
3. Platform: "Facebook"
4. URL: "https://www.facebook.com/yourpage"
5. Save
```
## System Architecture
### Database Tables
**navigation_items**
```sql
- Stores all menu items
- Supports parent-child relationships
- Custom ordering with display_order
- Visibility toggles
- Multiple item types
```
**social_links**
```sql
- Stores social media profiles
- Platform-specific data
- Custom ordering
- Visibility controls
```
### Backend (Go)
**Models**: `/internal/models/navigation.go`
- NavigationItem struct
- SocialLink struct
- Helper methods (GetURL, GetIconName)
**Controllers**: `/internal/controllers/navigation_controller.go`
- Full CRUD operations
- Reordering logic
- Public and admin endpoints
**Routes**: `/internal/routes/routes.go`
- Public: `/api/v1/navigation`, `/api/v1/social-links`
- Admin: `/api/v1/admin/navigation/*`, `/api/v1/admin/social-links/*`
### Frontend (React + TypeScript)
**Service**: `/frontend/src/services/navigation.ts`
- API client functions
- TypeScript interfaces
- Error handling
**Admin Page**: `/frontend/src/pages/admin/NavigationAdminPage.tsx`
- Full CRUD UI
- Tab-based interface
- Modal forms
- Real-time updates
**Route**: `/frontend/src/App.tsx`
- Added `/admin/navigace` route
- Protected with admin authentication
## Features In Detail
### 1. Dynamic Navigation
The Navbar component automatically fetches and renders navigation from the API:
- Top-level items appear in horizontal menu
- Dropdown items show children on hover
- External links show icon indicator
- Active page is highlighted
- Mobile: All items in drawer menu
### 2. Social Media Integration
Social links automatically appear in the top bar:
- Platform icons render automatically
- Links open in new tabs
- Reorderable by priority
- Toggle visibility without deleting
### 3. Reordering System
Simple up/down buttons instead of drag-drop:
- Click ↑ to move item up
- Click ↓ to move item down
- Changes save immediately
- Visual feedback with toasts
- Transaction-safe (all-or-nothing updates)
### 4. Visibility Controls
Show/hide items without losing data:
- Hidden items appear grayed out in admin
- Not visible to public users
- Maintain order when hidden
- Easy to re-enable later
### 5. Dropdown Menus
Create hierarchical navigation:
- Set parent type to "dropdown"
- Add children with parent_id
- Hover to reveal on desktop
- Expandable sections on mobile
- Supports unlimited depth (though 1 level recommended)
## Default Navigation Items
The system seeds these 12 items on first migration:
1. Domů (Home) → `/`
2. O klubu (About) → `/o-klubu`
3. Kalendář (Calendar) → `/kalendar`
4. Zápasy (Matches) → `/zapasy`
5. Aktivity (Activities) → `/aktivity`
6. Hráči (Players) → `/hraci`
7. Tabulky (Tables) → `/tabulky`
8. Články (Blog) → `/blog`
9. Videa (Videos) → `/videa`
10. Fotogalerie (Gallery) → `/galerie`
11. Sponzoři (Sponsors) → `/sponzori`
12. Kontakt (Contact) → `/kontakt`
You can modify, reorder, hide, or delete any of these!
## API Reference
### Public Endpoints
```
GET /api/v1/navigation
- Returns all visible navigation items with children
GET /api/v1/social-links
- Returns all visible social media links
```
### Admin Endpoints (Authentication Required)
```
Navigation Items:
GET /api/v1/admin/navigation - Get all items (including hidden)
POST /api/v1/admin/navigation - Create new item
PUT /api/v1/admin/navigation/:id - Update item
DELETE /api/v1/admin/navigation/:id - Delete item
POST /api/v1/admin/navigation/reorder - Reorder multiple items
Social Links:
GET /api/v1/admin/social-links - Get all links (including hidden)
POST /api/v1/admin/social-links - Create new link
PUT /api/v1/admin/social-links/:id - Update link
DELETE /api/v1/admin/social-links/:id - Delete link
POST /api/v1/admin/social-links/reorder - Reorder multiple links
```
## Best Practices
### Navigation Organization
- **Keep it simple**: 8-12 top-level items max
- **Group related items**: Use dropdowns for content types
- **Logical order**: Most important items first
- **Consistent naming**: Clear, descriptive labels
### Dropdown Menus
- **One level deep**: Avoid nested dropdowns
- **5-8 children max**: Don't overwhelm users
- **Related content**: Group similar pages together
- **Clear labels**: Describe what's inside
### Social Media
- **Order by priority**: Most used first
- **3-5 platforms**: Don't clutter the UI
- **Official URLs**: Use verified profiles
- **Keep updated**: Remove inactive platforms
### Mobile Considerations
- **Touch-friendly**: All items work on touch screens
- **Short labels**: Max 15 characters for mobile
- **Test thoroughly**: Check mobile drawer menu
- **Performance**: Lazy load if many items
## Troubleshooting
### Problem: Navigation not showing
**Solution:**
1. Check visibility is ON
2. Clear browser cache (Ctrl+Shift+R)
3. Check console for API errors
4. Verify backend is running
### Problem: Can't access admin page
**Solution:**
1. Verify you're logged in as admin
2. Check URL: `/admin/navigace`
3. Clear cookies and login again
4. Check user role in database
### Problem: Reordering not working
**Solution:**
1. Check console for errors
2. Verify API endpoint is accessible
3. Try refreshing the page
4. Check network tab for failed requests
### Problem: Social icons not appearing
**Solution:**
1. Check URL format (must start with https://)
2. Verify platform name matches supported list
3. Toggle visibility ON
4. Clear browser cache
## Documentation Files
Three comprehensive guides available:
1. **NAVIGATION_SYSTEM.md**
- Complete technical documentation
- All features explained
- Code examples
- API reference
2. **NAVIGATION_IMPLEMENTATION_SUMMARY.md**
- Implementation details
- Files created/modified
- Testing checklist
- Status updates
3. **NAVIGATION_QUICK_START.md**
- 5-minute quick start
- Common scenarios
- Pro tips
- Troubleshooting
## Benefits Summary
### For Admins
- ✅ No code knowledge required
- ✅ Real-time changes
- ✅ Easy reordering
- ✅ Visibility controls
- ✅ Dropdown support
### For Users
- ✅ Better organized navigation
- ✅ Easier to find content
- ✅ Responsive on all devices
- ✅ Fast and smooth
- ✅ Accessible navigation
### For Developers
- ✅ Clean API architecture
- ✅ Type-safe implementation
- ✅ Easy to extend
- ✅ Well documented
- ✅ Production ready
## Success Metrics
After implementing this system, you'll see:
- **Better UX**: Organized, hierarchical navigation
- **Flexibility**: Change navigation anytime without code
- **Scalability**: Ready for future growth
- **Time savings**: No developer needed for nav changes
- **Professionalism**: Modern CMS-like experience
## Next Steps
1.**Run migration** - Create the database tables
2.**Access admin** - Login and visit `/admin/navigace`
3.**Customize** - Add, edit, reorder your navigation
4.**Add social media** - Connect all your profiles
5.**Test thoroughly** - Check desktop, mobile, all scenarios
6.**Train team** - Show admins how to manage navigation
7.**Monitor** - Watch for user feedback and usage
## Support & Questions
### Quick Links:
- **Quick Start**: See `NAVIGATION_QUICK_START.md`
- **Full Docs**: See `NAVIGATION_SYSTEM.md`
- **Implementation**: See `NAVIGATION_IMPLEMENTATION_SUMMARY.md`
- **Code**: Check comments in source files
### Common Questions:
**Q: Will this work with my existing navigation?**
A: Yes! The system is additive. Your current navigation still works.
**Q: Can I import/export navigation?**
A: Not yet, but you can backup via database export.
**Q: How many items can I add?**
A: Unlimited, but 8-12 top-level items recommended for UX.
**Q: Does it work on mobile?**
A: Yes! Fully responsive with mobile drawer menu.
**Q: Can I have multi-level dropdowns?**
A: One level recommended, but technically unlimited depth supported.
---
## 🎉 Congratulations!
You now have a **professional navigation management system** that:
- ✅ Scales with your needs
- ✅ Requires no coding
- ✅ Supports complex navigation
- ✅ Integrates social media
- ✅ Works on all devices
**Your navigation is now future-ready!** 🚀
---
**Last Updated**: October 10, 2025
**Version**: 1.0.0
**Status**: Production Ready ✅