Files
MyClub/DOCS/ANALYTICS_MAP_ENHANCEMENTS.md
Tomáš Dvořák 12cba639b9 upload
2025-10-16 13:32:05 +02:00

118 lines
4.2 KiB
Markdown

# Analytics Map Enhancements
## Issues Fixed
### 1. **Top Cut Off Issue**
- **Problem**: The map was cutting off the top portion of countries
- **Solution**:
- Adjusted `projectionConfig.scale` from 145 to 150
- Added `center: [0, 20]` to shift the view slightly down
- Increased default height from 320px to 400px for better visibility
- Added proper responsive sizing with `width: 800` and `style={{ width: '100%', height: 'auto' }}`
### 2. **Countries Not Clickable**
- **Problem**: Countries appeared interactive but didn't have click functionality
- **Solution**:
- Added `onCountryClick` prop to component interface
- Implemented click handler in Geography component
- Added proper cursor styling: `cursor: 'pointer'` for countries with data
- Countries without data show default cursor
### 3. **Country Border Visibility**
- **Problem**: Country borders were barely visible with thin white strokes
- **Solution**:
- Changed from white outline to visible gray borders: `#CBD5E0` (light mode) / `#4A5568` (dark mode)
- Increased stroke width from 0.5 to 0.7 for better visibility
- Added hover state with thicker borders (1.5) and club secondary color
- Borders now clearly define country boundaries
### 4. **Club Colors Integration**
- **Problem**: Map used generic blue colors instead of club branding
- **Solution**:
- Integrated `useClubTheme()` hook from ClubThemeContext
- Map gradient now uses club primary and accent colors
- Hover borders use club secondary color
- Color interpolation maintains accessibility while using brand colors
- Intelligently selects colors based on brightness to ensure visibility
## New Features
### Interactive Countries
- Countries with visitor data now have:
- Pointer cursor on hover
- Visible border highlight in club secondary color
- Brightened fill color on hover (+30 RGB values)
- Click functionality (optional callback)
### Enhanced Visual Feedback
- **Hover State**: Countries brighten and show thicker borders
- **Color Borders**: All countries have visible gray borders
- **Responsive Design**: Map scales properly to container width
- **Club Branding**: Uses club's primary, secondary, and accent colors
## Component Props
```typescript
type VisitorCountriesMapProps = {
title?: string; // Map title (default: "Mapa návštěvníků podle země")
metrics: CountryDatum[]; // Country visitor data
isLoading?: boolean; // Loading state
height?: number; // Map height in pixels (default: 400)
onCountryClick?: ( // Optional click handler
countryCode: string,
countryName: string,
value: number
) => void;
};
```
## Usage Example
```tsx
import VisitorCountriesMap from '../../components/admin/VisitorCountriesMap';
<VisitorCountriesMap
metrics={countryMapData}
isLoading={loading}
onCountryClick={(code, name, visits) => {
console.log(`${name} (${code}): ${visits} visits`);
// Handle country click - e.g., filter data by country
}}
/>
```
## Technical Details
### Color System
- **Default Fill**: Light gray for countries without data
- **Start Fill**: Club primary color (or secondary if primary is too light)
- **End Fill**: Club accent color (or secondary in dark mode)
- **Borders**: Gray in default state, club secondary color on hover
### Responsiveness
- Map uses fixed internal width (800px) with percentage-based container width
- Maintains aspect ratio with `height: 'auto'`
- Overflow hidden prevents any layout issues
### Accessibility
- Proper cursor feedback for interactive elements
- High contrast borders for better visibility
- Color system respects dark/light mode
- Hover states provide clear visual feedback
## Files Modified
- `frontend/src/components/admin/VisitorCountriesMap.tsx` - Main map component enhancements
## Testing Checklist
- [ ] Map displays without top being cut off
- [ ] Countries have visible borders
- [ ] Hover changes border color and thickness
- [ ] Click functionality works on countries with data
- [ ] Club colors are applied to the gradient
- [ ] Map is responsive to container width
- [ ] Tooltip shows on hover
- [ ] Legend displays correct color gradient
- [ ] Works in both light and dark mode