mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
- Remove nested git repository from bugulma/frontend/.git - Add all frontend files to main repository tracking - Convert from separate frontend/backend repos to unified monorepo - Preserve all frontend code and development history as tracked files - Eliminate nested repository complexity for simpler development workflow This creates a proper monorepo structure with frontend and backend coexisting in the same repository for easier development and deployment.
197 lines
6.3 KiB
Markdown
197 lines
6.3 KiB
Markdown
# Leaflet Migration Complete ✅
|
|
|
|
## Summary
|
|
|
|
Successfully migrated from `@vnedyalk0v/react19-simple-maps` to **Leaflet** with `react-leaflet`. All legacy code has been removed.
|
|
|
|
## ✅ Completed Tasks
|
|
|
|
### 1. Installed Dependencies
|
|
|
|
- ✅ `leaflet` - Core mapping library
|
|
- ✅ `react-leaflet` - React bindings for Leaflet
|
|
- ✅ `react-leaflet-markercluster` - Marker clustering plugin
|
|
- ✅ `@types/leaflet` - TypeScript definitions
|
|
- ✅ `@types/leaflet.markercluster` - TypeScript definitions for clustering
|
|
|
|
### 2. Created New Components
|
|
|
|
- ✅ **`LeafletMap.tsx`** - Main map component using Leaflet
|
|
- ✅ **`OrganizationMarkers.tsx`** - Organization markers with proper icon rendering
|
|
- ✅ **`HistoricalMarkers.tsx`** - Historical landmark markers
|
|
- ✅ **`SymbiosisLines.tsx`** - Connection lines between organizations
|
|
- ✅ **`OrganizationCenterHandler.tsx`** - Auto-centers map on selected org
|
|
- ✅ **`MapControls.tsx`** - Updated to use Leaflet map instance
|
|
|
|
### 3. Updated Components
|
|
|
|
- ✅ **`MapPicker.tsx`** - Migrated to Leaflet with click and drag support
|
|
- ✅ **`MapView.tsx`** - Updated to use `LeafletMap`
|
|
- ✅ **`useMapInteraction.ts`** - Fixed to work with Site coordinates
|
|
- ✅ **`MapContexts.tsx`** - Updated zoom defaults and coordinate format
|
|
|
|
### 4. Created New Hooks
|
|
|
|
- ✅ **`useOrganizationSites.ts`** - Fetches sites for organizations in parallel
|
|
|
|
### 5. Fixed Critical Bugs
|
|
|
|
- ✅ **Location Data Access** - Now uses Sites instead of non-existent `Organization.location`
|
|
- ✅ **Marker Positioning** - Markers properly positioned using Leaflet's coordinate system
|
|
- ✅ **Coordinate Format** - Fixed to use `[lat, lng]` format (Leaflet standard)
|
|
- ✅ **Icon Rendering** - Properly renders React icons using `ReactDOMServer.renderToString()`
|
|
|
|
### 6. Removed Legacy Code
|
|
|
|
- ❌ Deleted `InteractiveMap.tsx` (old component)
|
|
- ❌ Deleted `MapMarker.tsx` (old SVG-based marker)
|
|
- ❌ Deleted `AiConnectionLines.tsx` (old connection lines)
|
|
- ❌ Deleted `HistoricalMarker.tsx` (old historical marker)
|
|
- ❌ Deleted `MapDebugger.tsx` (debug tool for old library)
|
|
- ❌ Deleted `components/debug/README.md` (debug documentation)
|
|
- ❌ Deleted `scripts/test-map-config.ts` (old test script)
|
|
- ❌ Removed `@vnedyalk0v/react19-simple-maps` dependency
|
|
- ❌ Removed `react-zoom-pan-pinch` dependency (unused)
|
|
- ❌ Removed `debug:map` script from package.json
|
|
- ❌ Removed `/debug/map` route from AppRouter
|
|
- ❌ Removed old library references from `index.html`
|
|
- ❌ Removed `/debug/map` from e2e tests
|
|
|
|
## Key Improvements
|
|
|
|
### 🚀 Performance
|
|
|
|
- **Marker Clustering** - Automatically clusters nearby markers using `react-leaflet-markercluster`
|
|
- **Viewport Culling** - Leaflet handles this automatically
|
|
- **Efficient Rendering** - Better performance with many markers
|
|
- **Parallel Site Fetching** - Uses `useQueries` to fetch all sites in parallel
|
|
|
|
### 🐛 Bug Fixes
|
|
|
|
- **Location Data** - Fixed critical bug where `org.location` didn't exist
|
|
- **Marker Positioning** - Markers now properly positioned using Site coordinates
|
|
- **Coordinate System** - Consistent `[lat, lng]` format throughout
|
|
- **Icon Rendering** - Properly renders React icons using server-side rendering
|
|
|
|
### 🎨 Features
|
|
|
|
- **Better Popups** - Native Leaflet popups with better styling
|
|
- **Smooth Animations** - Leaflet's built-in animations
|
|
- **Touch Support** - Better mobile/tablet support
|
|
- **Accessibility** - Better keyboard navigation
|
|
- **Draggable Markers** - In MapPicker for location selection
|
|
|
|
## Technical Details
|
|
|
|
### Icon Rendering
|
|
|
|
Icons are properly rendered using `ReactDOMServer.renderToString()` to convert React icon components to HTML strings that Leaflet's `DivIcon` can use:
|
|
|
|
```typescript
|
|
const iconElement = React.cloneElement(sector.icon, {
|
|
width: size * 0.6,
|
|
height: size * 0.6,
|
|
className: 'text-primary-foreground',
|
|
style: {
|
|
width: `${size * 0.6}px`,
|
|
height: `${size * 0.6}px`,
|
|
color: 'hsl(var(--primary-foreground))',
|
|
fill: 'currentColor',
|
|
},
|
|
});
|
|
const iconHtml = renderToString(iconElement);
|
|
```
|
|
|
|
### Site-Based Location Access
|
|
|
|
Organizations don't have direct location data. Instead, we:
|
|
|
|
1. Fetch Sites for each organization using `useOrganizationSites`
|
|
2. Create a map: `Organization ID → Site`
|
|
3. Use Site coordinates (`Latitude`, `Longitude`) for markers
|
|
|
|
### Coordinate Format
|
|
|
|
- **Leaflet Standard:** `[latitude, longitude]` (not `[lng, lat]`)
|
|
- All coordinates now use this format consistently
|
|
|
|
## Files Changed
|
|
|
|
### New Files
|
|
|
|
- `components/map/LeafletMap.tsx`
|
|
- `components/map/OrganizationMarkers.tsx`
|
|
- `components/map/HistoricalMarkers.tsx`
|
|
- `components/map/SymbiosisLines.tsx`
|
|
- `components/map/OrganizationCenterHandler.tsx`
|
|
- `hooks/map/useOrganizationSites.ts`
|
|
|
|
### Modified Files
|
|
|
|
- `pages/MapView.tsx`
|
|
- `components/ui/MapPicker.tsx`
|
|
- `components/map/MapControls.tsx`
|
|
- `hooks/map/useMapInteraction.ts`
|
|
- `contexts/MapContexts.tsx`
|
|
- `src/AppRouter.tsx`
|
|
- `package.json`
|
|
- `index.html`
|
|
- `e2e/check-links.spec.ts`
|
|
|
|
### Deleted Files
|
|
|
|
- `components/map/InteractiveMap.tsx`
|
|
- `components/map/MapMarker.tsx`
|
|
- `components/map/AiConnectionLines.tsx`
|
|
- `components/map/HistoricalMarker.tsx`
|
|
- `components/debug/MapDebugger.tsx`
|
|
- `components/debug/README.md`
|
|
- `scripts/test-map-config.ts`
|
|
|
|
## Dependencies
|
|
|
|
### Added
|
|
|
|
```json
|
|
{
|
|
"leaflet": "^1.9.4",
|
|
"react-leaflet": "^5.0.0",
|
|
"react-leaflet-markercluster": "^5.0.0-rc.0",
|
|
"@types/leaflet": "^1.9.21",
|
|
"@types/leaflet.markercluster": "^1.5.6"
|
|
}
|
|
```
|
|
|
|
### Removed
|
|
|
|
```json
|
|
{
|
|
"@vnedyalk0v/react19-simple-maps": "^1.2.0",
|
|
"react-zoom-pan-pinch": "^3.7.0"
|
|
}
|
|
```
|
|
|
|
## Migration Benefits
|
|
|
|
1. **Mature Library** - Leaflet is battle-tested with 10+ years of development
|
|
2. **Better Performance** - Built-in optimizations and clustering
|
|
3. **Rich Ecosystem** - Many plugins available
|
|
4. **Better Documentation** - Extensive docs and community support
|
|
5. **Mobile Support** - Excellent touch and mobile support
|
|
6. **Type Safety** - Full TypeScript support
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ Test the map in development
|
|
2. ✅ Verify all markers appear correctly
|
|
3. ✅ Test marker clustering with many organizations
|
|
4. ✅ Verify connection lines work
|
|
5. ✅ Test on mobile devices
|
|
6. ⚠️ Monitor performance with many markers (100+)
|
|
|
|
---
|
|
|
|
**Migration completed successfully!** 🎉
|
|
|
|
The map now uses Leaflet, a mature, well-maintained library with excellent performance and features. All legacy code has been removed.
|