feat(map): add event-driven GPS update

This commit is contained in:
Lê Tuấn Anh
2025-11-20 09:05:07 +07:00
parent eed98f7c29
commit dea435a4ec
11 changed files with 333 additions and 159 deletions

View File

@@ -1,22 +1,43 @@
// src/models/useGetGpsModel.ts
import { getGPS } from '@/services/controller/DeviceController';
import { useCallback, useState } from 'react';
import { useCallback, useState, useEffect } from 'react';
import { eventBus } from '@/utils/eventBus';
export default function useGetGpsModel() {
const [gpsData, setGpsData] = useState<API.GPSResonse | null>(null);
const [loading, setLoading] = useState(false);
const getGPSData = useCallback(async () => {
const getGPSData = useCallback(async () => {
setLoading(true);
try {
const res = await getGPS(); // đổi URL cho phù hợp
console.log('GPS Data fetched:', res);
// Bypass cache để GPS luôn realtime, gọi trực tiếp API
const data = await getGPS();
console.log('GPS fetched from API:', data);
setGpsData(res);
setGpsData(data);
// Luôn emit event GPS để đảm bảo realtime
try {
eventBus.emit('gpsData:update', data);
} catch (e) {
console.warn('Failed to emit gpsData:update event', e);
}
} catch (err) {
console.error('Fetch gps data failed', err);
} finally {
setLoading(false);
}
}, []);
// ✅ Lắng nghe event cập nhật cache từ nơi khác (nếu có)
useEffect(() => {
const handleUpdate = (data: API.GPSResonse) => {
console.log('GPS cache updated via eventBus');
setGpsData(data);
};
eventBus.on('gpsData:update', handleUpdate);
return () => eventBus.off('gpsData:update', handleUpdate);
}, []);
return {
gpsData,
loading,