import { getWpt } from '../db/wpt'; import { returnAgain } from '../workers/dispatcher-worker'; import { getAllGpxes, getGpx } from './gpx'; import { put } from './lib'; import { getRte } from './rte'; import { getTrk } from './trk'; import { getTrkseg } from './trkseg'; declare global { var watches: Map; } const methods = { getAllGpxes, getGpx, getTrk, getTrkseg, getWpt, getRte, }; const sendUpdate = async (params: any) => { if (params) { console.log({ caller: 'ChangeHandler / sendUpdate', params }); const { method, _dispatchId, id, ...otherParams } = params; const returnValue = await methods[method](params); if (returnValue) { returnAgain(_dispatchId, returnValue); } } }; const changeHandler = async (change: any) => { console.log({ caller: 'ChangeHandler', change }); const { id } = change; if (!globalThis.watches) { globalThis.watches = new Map(); } sendUpdate(globalThis.watches.get(id)); const parentId = id.substring(0, id.lastIndexOf('/')); if (parentId === 'gpx') { const gpxes = await getAllGpxes(); console.log({ caller: 'changeHandler / gpxes', gpxes, id }); if (!gpxes.includes(id)) { await put( parentId, `idx-${parentId}`, (doc) => { console.log({ caller: 'changeHandler / gpxes', doc }); doc.push(id); doc.reverse().sort().reverse(); return doc; }, [] ); } } sendUpdate(globalThis.watches.get(parentId)); }; export default changeHandler; export const getAndWatch = async (params: any) => { const { method, _dispatchId, id, ...otherParams } = params; if (!globalThis.watches) { globalThis.watches = new Map(); } globalThis.watches.set(id, params); const returnValue = await methods[method](params); return returnValue; }; export const cancelWatch = (params: any) => { if (!globalThis.watches) { globalThis.watches = new Map(); } const { id } = params; globalThis.watches.delete(id); };