Browse Source

fix: silence device poll toasts and unblock detail id switch

main
xiaosi 2 weeks ago
parent
commit
e9b28cedd8
  1. 12
      src/stores/modules/devicesStore.js
  2. 4
      src/views/DeviceDetailView/DeviceDetailView.vue
  3. 2
      src/views/MonitorView/MonitorView.vue

12
src/stores/modules/devicesStore.js

@ -173,17 +173,19 @@ export const useDeviceStore = defineStore('devices', () => {
return request.post(urls.DOCK_COMMAND(dock.id), { type, params, droneSn: rec.droneSn }) return request.post(urls.DOCK_COMMAND(dock.id), { type, params, droneSn: rec.droneSn })
} }
async function load() {
async function load(options = {}) {
const silent = Boolean(options.silent)
const reqOpts = silent ? { skipErrorToast: true } : {}
const [dockPage, dronePage] = await Promise.all([ const [dockPage, dronePage] = await Promise.all([
request.get(urls.DOCKS, { params: { pageNum: 1, pageSize: 100 } }),
request.get(urls.DRONES, { params: { pageNum: 1, pageSize: 100 } })
request.get(urls.DOCKS, { params: { pageNum: 1, pageSize: 100 }, ...reqOpts }),
request.get(urls.DRONES, { params: { pageNum: 1, pageSize: 100 }, ...reqOpts })
]) ])
const dockList = dockPage?.records || [] const dockList = dockPage?.records || []
const droneList = dronePage?.records || [] const droneList = dronePage?.records || []
const [dockDetails, droneDetails] = await Promise.all([ const [dockDetails, droneDetails] = await Promise.all([
Promise.all(dockList.map((d) => request.get(urls.DOCK(d.id)).then((r) => r || {}).catch(() => ({})))),
Promise.all(droneList.map((d) => request.get(urls.DRONE(d.id)).then((r) => r || {}).catch(() => ({}))))
Promise.all(dockList.map((d) => request.get(urls.DOCK(d.id), reqOpts).then((r) => r || {}).catch(() => ({})))),
Promise.all(droneList.map((d) => request.get(urls.DRONE(d.id), reqOpts).then((r) => r || {}).catch(() => ({}))))
]) ])
const coords = dockList const coords = dockList
.map((d) => ({ longitude: coordinate(d.longitude, -180, 180), latitude: coordinate(d.latitude, -90, 90) })) .map((d) => ({ longitude: coordinate(d.longitude, -180, 180), latitude: coordinate(d.latitude, -90, 90) }))

4
src/views/DeviceDetailView/DeviceDetailView.vue

@ -365,7 +365,7 @@ async function pollCurrentDetail() {
if (!id || !rec) return if (!id || !rec) return
const gen = detailPollGen const gen = detailPollGen
const url = rec.kind === 'drone' ? urls.DRONE(id) : urls.DOCK(id) const url = rec.kind === 'drone' ? urls.DRONE(id) : urls.DOCK(id)
detailPollInflight = request.get(url)
detailPollInflight = request.get(url, { skipErrorToast: true })
try { try {
const detail = await detailPollInflight const detail = await detailPollInflight
if (detailDisposed || gen !== detailPollGen) return if (detailDisposed || gen !== detailPollGen) return
@ -394,6 +394,7 @@ function stopDetailPolling() {
function restartDetailPolling() { function restartDetailPolling() {
detailPollGen += 1 detailPollGen += 1
detailPollInflight = null // allow immediate new-id fetch; old response dropped by gen
stopDetailPolling() stopDetailPolling()
void pollCurrentDetail() void pollCurrentDetail()
startDetailPolling() startDetailPolling()
@ -405,6 +406,7 @@ function onDetailVisibility() {
stopDetailPolling() stopDetailPolling()
return return
} }
detailPollInflight = null
void pollCurrentDetail() void pollCurrentDetail()
startDetailPolling() startDetailPolling()
} }

2
src/views/MonitorView/MonitorView.vue

@ -162,7 +162,7 @@ async function pollDevices({ toastOnSuccess = false } = {}) {
if (monitorDisposed) return if (monitorDisposed) return
if (devicePollInflight) return if (devicePollInflight) return
const gen = devicePollGen const gen = devicePollGen
devicePollInflight = devices.load()
devicePollInflight = toastOnSuccess ? devices.load() : devices.load({ silent: true })
try { try {
await devicePollInflight await devicePollInflight
if (monitorDisposed || gen !== devicePollGen) return if (monitorDisposed || gen !== devicePollGen) return

Loading…
Cancel
Save