mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-19 05:26:47 +00:00
9494521ac7
- Paddle as a plannable tour type: one boat (kayak, canoe, SUP, other), river or lake, a pace that a boat change never overwrites; time is distance over pace - Hand-drawn legs beside routed ones, drawn dotted and labelled as not routed, kept through save, reopen and edits elsewhere - Reverse a tour and close it back to its start, each one undo step - GPX import shows a preview first (line, measures, duplicates, type) and only the confirmation stores the tour - Base maps and overlays per tour type in the planner: hike keeps topo and the via ferrata layer, paddle gets the OpenSeaMap seamark overlay
20 lines
1.0 KiB
TypeScript
20 lines
1.0 KiB
TypeScript
import type { TourGpxImportFields, TourGpxPreviewResponse, TourImportGpxResponse } from '@trek/shared';
|
|
import { postMultipart } from './client';
|
|
|
|
/** A GPX file and the fields beside it, as the Tours import routes read a multipart body. */
|
|
function gpxForm(file: File, fields?: TourGpxImportFields): FormData {
|
|
const fd = new FormData();
|
|
fd.append('file', file);
|
|
for (const [key, value] of Object.entries(fields ?? {})) if (value !== undefined) fd.append(key, value);
|
|
return fd;
|
|
}
|
|
|
|
/** The Tours GPX import: a file read for its preview first (PAD-02), then imported as the type chosen. */
|
|
export const tourGpxApi = {
|
|
/** What the file holds, read by the import's own parser; nothing is stored. */
|
|
preview: (tripId: number | string, file: File): Promise<TourGpxPreviewResponse> =>
|
|
postMultipart(`/trips/${tripId}/tours/import/gpx/preview`, gpxForm(file)),
|
|
import: (tripId: number | string, file: File, fields?: TourGpxImportFields): Promise<TourImportGpxResponse> =>
|
|
postMultipart(`/trips/${tripId}/tours/import/gpx`, gpxForm(file, fields)),
|
|
};
|