feat(map): add event-driven GPS update
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user