import getUri from '../lib/ids'; import { appendToArray, putNewGpx } from './gpx'; import { getFamily, put } from './lib'; export const emptyTrk: Trk = { name: undefined, cmt: undefined, desc: undefined, src: undefined, link: undefined, number: 0, type: undefined, extensions: undefined, trkseg: undefined, }; export const putNewTrk = async (id?: IdTrk | IdGpx) => { let finalId = { ...id }; if (!('trk' in finalId)) { const gpxId = await putNewGpx(id); finalId = { ...gpxId, trk: 0 }; } const uri = getUri('trk', finalId); await put( uri, 'trk', (trk) => { return trk; }, emptyTrk ); return finalId as IdTrk; }; export const getTrk = async (params: any) => { const { id } = params; const docs = await getFamily(id, { include_docs: true }); let target: any[]; let trk: Trk | undefined = undefined; docs.rows.every((row: any) => { // level 0 if (row.doc.type === 'trk') { if (!!trk) { return false; // Hack to stop if getFamily fails } target = [row.doc.doc]; trk = row.doc.doc; } //level 1 if (row.doc.type === 'trkseg') { target.splice(1); appendToArray(target.at(-1), row.doc.type, row.doc._id); target.push(row.doc.doc); } return true; }); return trk; }; export const deleteTrk = async (params: any) => { const { id } = params; const docs = await getFamily(id, { include_docs: false }); console.log({ caller: 'deleteTrk' }, id, docs); const deletedDocs = docs.rows.reverse().map((doc: any) => ({ _deleted: true, _id: doc.id, _rev: doc.value.rev, })); console.log({ caller: 'deleteTrk' }, id, docs, deletedDocs); await db.bulkDocs(deletedDocs); return id; };