mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-03 18:22:57 +00:00
5.9 KiB
5.9 KiB
Club Logos Modal Integration - Calendar & Homepage
Overview
Integrated clickable club logos in the MatchModal (calendar/matches view) that open a ClubModal with team statistics, similar to the existing tabulky (standings) functionality.
Changes Made
1. MatchModal Component (frontend/src/components/home/MatchModal.tsx)
- ✅ Added
onTeamClickoptional callback prop - ✅ Made team logos clickable with hover effects
- ✅ Added visual feedback (opacity change and scale on hover)
- ✅ Accessible: cursor pointer, role button, tab navigation support
New Interface:
interface MatchModalProps {
isOpen: boolean;
match: FacrMatchLike | null;
onClose: () => void;
onTeamClick?: (teamName: string, teamLogoUrl?: string) => void; // NEW
}
Visual Changes:
- Team logos now show pointer cursor on hover
- Scale up to 105% on hover
- Opacity reduces to 80% on hover
- Smooth transitions (0.2s)
2. HomePage Component (frontend/src/pages/HomePage.tsx)
- ✅ Added
handleTeamClickFromMatchfunction - ✅ Searches through standings data to find team statistics
- ✅ Falls back to minimal modal if team not found in standings
- ✅ Updated all MatchModal instances across different layout styles:
- Magazine layout
- Edge layout
- PRO layout
- Unified layout (default)
Logic Flow:
- User clicks team logo in MatchModal
- System normalizes team name for matching
- Searches through all standings/competitions
- If found: Shows full ClubModal with stats (wins, draws, losses, points, etc.)
- If not found: Shows minimal ClubModal with just name and logo
Team Name Normalization:
- Removes diacritics (á → a, č → c, etc.)
- Converts to lowercase
- Trims whitespace
- Supports partial matching (handles prefixes like TJ, SK, MFK)
3. CalendarPage Component (frontend/src/pages/CalendarPage.tsx)
- ✅ Added ClubModal import
- ✅ Added state for ClubModal management
- ✅ Added standings data loading from FACR cache
- ✅ Implemented
handleTeamClickfunction - ✅ Made team logos clickable in the match detail modal
- ✅ Added ClubModal component at the end of the page
New Features:
- Loads standings from
/cache/prefetch/facr_tables.json - Processes team data (goals for/against, wins/draws/losses)
- Clickable team logos in calendar match modals
- Hover tooltips: "Klikněte pro zobrazení statistik: [Team Name]"
4. ClubModal Component (No Changes Required)
- Already exists with proper interface
- Displays team statistics beautifully
- Works for both football and futsal
User Experience
Before
- Team logos in match modals were static images
- No way to see team statistics from match view
- Had to navigate to standings page separately
After
- Click home team logo → Opens ClubModal with team stats
- Click away team logo → Opens ClubModal with team stats
- Visual feedback on hover (scale + opacity)
- Seamless integration with existing standings data
- Works on both homepage and calendar page
Technical Details
Data Flow
MatchModal (team logo click)
↓
handleTeamClick(teamName, logoUrl)
↓
Search standings array
↓
Transform to ClubModal format
↓
Open ClubModal with team data
Standings Data Structure
{
name: string, // Competition name
table: [{
team_name: string,
team_id: string,
position: number,
played: number,
wins: number,
draws: number,
losses: number,
goals_for: number,
goals_against: number,
points: number,
logo_url?: string
}]
}
Team Matching Algorithm
- Exact match: normalized names are identical
- Contains match: one name contains the other
- Fallback: Show minimal modal if no match found
Files Modified
-
frontend/src/components/home/MatchModal.tsx- Added onTeamClick prop
- Made logos clickable
-
frontend/src/pages/HomePage.tsx- Added handleTeamClickFromMatch function
- Updated all 4 MatchModal instances
- Added team search logic
-
frontend/src/pages/CalendarPage.tsx- Added ClubModal import
- Added standings state and loading
- Added handleTeamClick function
- Made modal logos clickable
- Added ClubModal component
Testing Recommendations
1. Homepage - All Layouts
- Test Magazine style
- Test Edge style
- Test PRO style
- Test Unified style (default)
2. Match Modal Interactions
- Click home team logo
- Click away team logo
- Verify ClubModal opens
- Check hover effects work
3. Calendar Page
- Open calendar view
- Click match to open detail modal
- Click team logos in modal
- Verify statistics display correctly
4. Team Matching
- Test with teams in standings → Full stats shown
- Test with teams NOT in standings → Minimal modal shown
- Test with Czech diacritics (Kravaře, Třinec, etc.)
- Test with club prefixes (TJ, SK, MFK, Sokol)
5. Edge Cases
- Teams with long names
- Teams with special characters
- Teams without logos
- Empty standings data
Browser Compatibility
- ✅ Modern browsers (Chrome, Firefox, Safari, Edge)
- ✅ Hover effects use standard CSS
- ✅ Transitions supported in all modern browsers
- ✅ Modal system uses Chakra UI (fully compatible)
Performance Considerations
- Standings data loaded once on page mount
- Team search is O(n*m) but data is small (typically < 100 teams)
- No performance impact expected
- Modal rendering is lazy (only when opened)
Future Enhancements
Potential improvements:
- Add team historical performance graph
- Show head-to-head statistics between teams
- Add recent form indicator (last 5 matches)
- Link to team detail page if available
- Cache team lookups for better performance
Date: 2025-10-11
Status: ✅ Complete
Files Modified: 3
New Components: 0 (reused existing ClubModal)
Breaking Changes: None