✨ 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
80 lines
2.1 KiB
JavaScript
80 lines
2.1 KiB
JavaScript
import { BroadcastChannel } from 'broadcast-channel';
|
|
export function broadcastQueryClient(_ref) {
|
|
var queryClient = _ref.queryClient,
|
|
_ref$broadcastChannel = _ref.broadcastChannel,
|
|
broadcastChannel = _ref$broadcastChannel === void 0 ? 'react-query' : _ref$broadcastChannel;
|
|
var transaction = false;
|
|
|
|
var tx = function tx(cb) {
|
|
transaction = true;
|
|
cb();
|
|
transaction = false;
|
|
};
|
|
|
|
var channel = new BroadcastChannel(broadcastChannel, {
|
|
webWorkerSupport: false
|
|
});
|
|
var queryCache = queryClient.getQueryCache();
|
|
queryClient.getQueryCache().subscribe(function (queryEvent) {
|
|
var _queryEvent$action;
|
|
|
|
if (transaction || !(queryEvent == null ? void 0 : queryEvent.query)) {
|
|
return;
|
|
}
|
|
|
|
var _queryEvent$query = queryEvent.query,
|
|
queryHash = _queryEvent$query.queryHash,
|
|
queryKey = _queryEvent$query.queryKey,
|
|
state = _queryEvent$query.state;
|
|
|
|
if (queryEvent.type === 'queryUpdated' && ((_queryEvent$action = queryEvent.action) == null ? void 0 : _queryEvent$action.type) === 'success') {
|
|
channel.postMessage({
|
|
type: 'queryUpdated',
|
|
queryHash: queryHash,
|
|
queryKey: queryKey,
|
|
state: state
|
|
});
|
|
}
|
|
|
|
if (queryEvent.type === 'queryRemoved') {
|
|
channel.postMessage({
|
|
type: 'queryRemoved',
|
|
queryHash: queryHash,
|
|
queryKey: queryKey
|
|
});
|
|
}
|
|
});
|
|
|
|
channel.onmessage = function (action) {
|
|
if (!(action == null ? void 0 : action.type)) {
|
|
return;
|
|
}
|
|
|
|
tx(function () {
|
|
var type = action.type,
|
|
queryHash = action.queryHash,
|
|
queryKey = action.queryKey,
|
|
state = action.state;
|
|
|
|
if (type === 'queryUpdated') {
|
|
var query = queryCache.get(queryHash);
|
|
|
|
if (query) {
|
|
query.setState(state);
|
|
return;
|
|
}
|
|
|
|
queryCache.build(queryClient, {
|
|
queryKey: queryKey,
|
|
queryHash: queryHash
|
|
}, state);
|
|
} else if (type === 'queryRemoved') {
|
|
var _query = queryCache.get(queryHash);
|
|
|
|
if (_query) {
|
|
queryCache.remove(_query);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
} |