Files
Laca-City/frontend/.next/cache/eslint/.cache_1jfmmjv
PhongPham c65cc97a33 🎯 MapView v2.0 - Global Deployment Ready
 MAJOR FEATURES:
• Auto-zoom intelligence với smart bounds fitting
• Enhanced 3D GPS markers với pulsing effects
• Professional route display với 6-layer rendering
• Status-based parking icons với availability indicators
• Production-ready build optimizations

🗺️ AUTO-ZOOM FEATURES:
• Smart bounds fitting cho GPS + selected parking
• Adaptive padding (50px) cho visual balance
• Max zoom control (level 16) để tránh quá gần
• Dynamic centering khi không có selection

🎨 ENHANCED VISUALS:
• 3D GPS marker với multi-layer pulse effects
• Advanced parking icons với status colors
• Selection highlighting với animation
• Dimming system cho non-selected items

🛣️ ROUTE SYSTEM:
• OpenRouteService API integration
• Multi-layer route rendering (glow, shadow, main, animated)
• Real-time distance & duration calculation
• Visual route info trong popup

📱 PRODUCTION READY:
• SSR safe với dynamic imports
• Build errors resolved
• Global deployment via Vercel
• Optimized performance

🌍 DEPLOYMENT:
• Vercel: https://whatever-ctk2auuxr-phong12hexdockworks-projects.vercel.app
• Bundle size: 22.8 kB optimized
• Global CDN distribution
• HTTPS enabled

💾 VERSION CONTROL:
• MapView-v2.0.tsx backup created
• MAPVIEW_VERSIONS.md documentation
• Full version history tracking
2025-07-20 19:52:16 +07:00

1 line
12 KiB
Plaintext

[{"/Users/phongworking/Git Repo/testing/frontend/src/app/layout.tsx":"1","/Users/phongworking/Git Repo/testing/frontend/src/app/page-hcmc.tsx":"2","/Users/phongworking/Git Repo/testing/frontend/src/app/page.tsx":"3","/Users/phongworking/Git Repo/testing/frontend/src/app/providers.tsx":"4","/Users/phongworking/Git Repo/testing/frontend/src/components/GPSSimulator.tsx":"5","/Users/phongworking/Git Repo/testing/frontend/src/components/HCMCGPSSimulator.tsx":"6","/Users/phongworking/Git Repo/testing/frontend/src/components/Header.tsx":"7","/Users/phongworking/Git Repo/testing/frontend/src/components/LocationDetector.tsx":"8","/Users/phongworking/Git Repo/testing/frontend/src/components/LocationPermissionDialog.tsx":"9","/Users/phongworking/Git Repo/testing/frontend/src/components/map/MapView.tsx":"10","/Users/phongworking/Git Repo/testing/frontend/src/components/parking/ParkingList.tsx":"11","/Users/phongworking/Git Repo/testing/frontend/src/components/parking/ParkingList.v1.0.tsx":"12","/Users/phongworking/Git Repo/testing/frontend/src/components/transportation/TransportationSelector.tsx":"13","/Users/phongworking/Git Repo/testing/frontend/src/components/ui/Button.tsx":"14","/Users/phongworking/Git Repo/testing/frontend/src/components/ui/ErrorMessage.tsx":"15","/Users/phongworking/Git Repo/testing/frontend/src/components/ui/Icon.tsx":"16","/Users/phongworking/Git Repo/testing/frontend/src/components/ui/LoadingSpinner.tsx":"17","/Users/phongworking/Git Repo/testing/frontend/src/hooks/api.ts":"18","/Users/phongworking/Git Repo/testing/frontend/src/hooks/useGeolocation.ts":"19","/Users/phongworking/Git Repo/testing/frontend/src/hooks/useParkingSearch-simple.ts":"20","/Users/phongworking/Git Repo/testing/frontend/src/hooks/useParkingSearch.ts":"21","/Users/phongworking/Git Repo/testing/frontend/src/hooks/useRouting-simple.ts":"22","/Users/phongworking/Git Repo/testing/frontend/src/hooks/useRouting.ts":"23","/Users/phongworking/Git Repo/testing/frontend/src/services/api.ts":"24","/Users/phongworking/Git Repo/testing/frontend/src/services/location.ts":"25","/Users/phongworking/Git Repo/testing/frontend/src/types/index.ts":"26","/Users/phongworking/Git Repo/testing/frontend/src/utils/map.ts":"27"},{"size":2143,"mtime":1752999340108,"results":"28","hashOfConfig":"29"},{"size":7357,"mtime":1753014427766,"results":"30","hashOfConfig":"29"},{"size":27025,"mtime":1753014482464,"results":"31","hashOfConfig":"29"},{"size":885,"mtime":1752995404508,"results":"32","hashOfConfig":"29"},{"size":6709,"mtime":1752995404566,"results":"33","hashOfConfig":"29"},{"size":25887,"mtime":1753005896458,"results":"34","hashOfConfig":"29"},{"size":4855,"mtime":1753001711557,"results":"35","hashOfConfig":"29"},{"size":5297,"mtime":1753014060543,"results":"36","hashOfConfig":"29"},{"size":4112,"mtime":1752995404566,"results":"37","hashOfConfig":"29"},{"size":39120,"mtime":1753014019690,"results":"38","hashOfConfig":"29"},{"size":16369,"mtime":1753010284411,"results":"39","hashOfConfig":"29"},{"size":15278,"mtime":1753007764247,"results":"40","hashOfConfig":"29"},{"size":2428,"mtime":1752995404566,"results":"41","hashOfConfig":"29"},{"size":1310,"mtime":1752997752583,"results":"42","hashOfConfig":"29"},{"size":0,"mtime":1753014282371,"results":"43","hashOfConfig":"29"},{"size":3034,"mtime":1752995403798,"results":"44","hashOfConfig":"29"},{"size":996,"mtime":1752995404527,"results":"45","hashOfConfig":"29"},{"size":3605,"mtime":1753014614380,"results":"46","hashOfConfig":"29"},{"size":2933,"mtime":1752995404566,"results":"47","hashOfConfig":"29"},{"size":16320,"mtime":1752998534912,"results":"48","hashOfConfig":"29"},{"size":16822,"mtime":1753004069600,"results":"49","hashOfConfig":"29"},{"size":3533,"mtime":1752997752583,"results":"50","hashOfConfig":"29"},{"size":3533,"mtime":1752996015795,"results":"51","hashOfConfig":"29"},{"size":3636,"mtime":1752995404547,"results":"52","hashOfConfig":"29"},{"size":6033,"mtime":1752995404566,"results":"53","hashOfConfig":"29"},{"size":7510,"mtime":1752995404527,"results":"54","hashOfConfig":"29"},{"size":5452,"mtime":1752995404547,"results":"55","hashOfConfig":"29"},{"filePath":"56","messages":"57","suppressedMessages":"58","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"gsokmh",{"filePath":"59","messages":"60","suppressedMessages":"61","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"62","messages":"63","suppressedMessages":"64","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"65","messages":"66","suppressedMessages":"67","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"68","messages":"69","suppressedMessages":"70","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"71","messages":"72","suppressedMessages":"73","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"74","messages":"75","suppressedMessages":"76","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"77","messages":"78","suppressedMessages":"79","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","suppressedMessages":"82","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"83","messages":"84","suppressedMessages":"85","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"86","messages":"87","suppressedMessages":"88","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"89","messages":"90","suppressedMessages":"91","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"92","messages":"93","suppressedMessages":"94","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"95","messages":"96","suppressedMessages":"97","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"98","messages":"99","suppressedMessages":"100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"101","messages":"102","suppressedMessages":"103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"104","messages":"105","suppressedMessages":"106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"107","messages":"108","suppressedMessages":"109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"110","messages":"111","suppressedMessages":"112","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"113","messages":"114","suppressedMessages":"115","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"116","messages":"117","suppressedMessages":"118","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"119","messages":"120","suppressedMessages":"121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"122","messages":"123","suppressedMessages":"124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"125","messages":"126","suppressedMessages":"127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"128","messages":"129","suppressedMessages":"130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"131","messages":"132","suppressedMessages":"133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"134","messages":"135","suppressedMessages":"136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Users/phongworking/Git Repo/testing/frontend/src/app/layout.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/app/page-hcmc.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/app/page.tsx",["137"],[],"/Users/phongworking/Git Repo/testing/frontend/src/app/providers.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/GPSSimulator.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/HCMCGPSSimulator.tsx",["138","139"],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/Header.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/LocationDetector.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/LocationPermissionDialog.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/map/MapView.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/parking/ParkingList.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/parking/ParkingList.v1.0.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/transportation/TransportationSelector.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/ui/Button.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/ui/ErrorMessage.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/ui/Icon.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/components/ui/LoadingSpinner.tsx",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/hooks/api.ts",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/hooks/useGeolocation.ts",["140"],[],"/Users/phongworking/Git Repo/testing/frontend/src/hooks/useParkingSearch-simple.ts",["141"],[],"/Users/phongworking/Git Repo/testing/frontend/src/hooks/useParkingSearch.ts",["142"],[],"/Users/phongworking/Git Repo/testing/frontend/src/hooks/useRouting-simple.ts",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/hooks/useRouting.ts",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/services/api.ts",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/services/location.ts",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/types/index.ts",[],[],"/Users/phongworking/Git Repo/testing/frontend/src/utils/map.ts",[],[],{"ruleId":"143","severity":1,"message":"144","line":375,"column":19,"nodeType":"145","endLine":379,"endColumn":21},{"ruleId":"143","severity":1,"message":"144","line":211,"column":15,"nodeType":"145","endLine":215,"endColumn":17},{"ruleId":"143","severity":1,"message":"144","line":358,"column":13,"nodeType":"145","endLine":362,"endColumn":15},{"ruleId":"146","severity":1,"message":"147","line":84,"column":6,"nodeType":"148","endLine":84,"endColumn":47,"suggestions":"149"},{"ruleId":"146","severity":1,"message":"150","line":567,"column":6,"nodeType":"148","endLine":567,"endColumn":8,"suggestions":"151"},{"ruleId":"146","severity":1,"message":"150","line":575,"column":6,"nodeType":"148","endLine":575,"endColumn":8,"suggestions":"152"},"@next/next/no-img-element","Using `<img>` could result in slower LCP and higher bandwidth. Consider using `<Image />` from `next/image` to automatically optimize images. This may incur additional usage or cost from your provider. See: https://nextjs.org/docs/messages/no-img-element","JSXOpeningElement","react-hooks/exhaustive-deps","React Hook useCallback has unnecessary dependencies: 'enableHighAccuracy', 'maximumAge', and 'timeout'. Either exclude them or remove the dependency array.","ArrayExpression",["153"],"React Hook useCallback has a missing dependency: 'mockParkingLots'. Either include it or remove the dependency array.",["154"],["155"],{"desc":"156","fix":"157"},{"desc":"158","fix":"159"},{"desc":"158","fix":"160"},"Update the dependencies array to be: []",{"range":"161","text":"162"},"Update the dependencies array to be: [mockParkingLots]",{"range":"163","text":"164"},{"range":"165","text":"164"},[2183,2224],"[]",[15234,15236],"[mockParkingLots]",[15655,15657]]