import getUri from '../lib/ids'; import { appendToArray, putNewGpx } from './gpx'; import { getFamily, put } from './lib'; export const emptyRte: Rte = { name: undefined, cmt: undefined, desc: undefined, src: undefined, link: undefined, number: 0, type: undefined, extensions: undefined, rtept: undefined, }; export const putNewRte = async (id?: IdRte | IdGpx) => { let finalId = { ...id }; if (!('rte' in finalId)) { const gpxId = await putNewGpx(id); finalId = { ...gpxId, rte: 0 }; } const uri = getUri('rte', finalId); await put( uri, 'rte', (rte) => { return rte; }, emptyRte ); return finalId as IdRte; }; export const getRte = async (params: any) => { const { id } = params; const docs = await getFamily(id, { include_docs: true }); let target: any[]; let rte: Rte | undefined = undefined; docs.rows.every((row: any) => { // level 0 if (row.doc.type === 'rte') { if (!!rte) { return false; // Hack to stop if getFamily fails } target = [row.doc.doc]; rte = row.doc.doc; } //level 1 if (row.doc.type === 'rtept') { target.splice(1); row.doc.doc.id = row.doc._id; appendToArray(target.at(-1), row.doc.type, row.doc.doc); target.push(row.doc.doc); } return true; }); return rte; }; export const putRte = async (params: any) => { const { id, rte } = params; rte.rtept = undefined; await put(id, 'rte', (doc) => rte, rte); return rte; };