diff --git a/src/lib/api/base.ts b/src/lib/api/base.ts index c25771d..2b4f37f 100644 --- a/src/lib/api/base.ts +++ b/src/lib/api/base.ts @@ -18,16 +18,37 @@ export async function fetchAPI(endpoint: string, options: RequestInit = {}): try { const response = await fetch(url, options); if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); + let errorText = await response.json(); + if ( + errorText && + typeof errorText === "object" && + ("detail" in errorText || "field_errors" in errorText || "non_field_errors" in errorText) + ) { + // Handle structured error responses + if ("detail" in errorText) { + errorText = errorText.detail; + } else if ("field_errors" in errorText) { + errorText = Object.values(errorText.field_errors).join(", "); + } else if ("non_field_errors" in errorText) { + errorText = errorText.non_field_errors.join(", "); + } + } else { + errorText = `Unexpected error: ${response.statusText}`; + } + throw new Error(`${errorText}`); } if (response.status === 204) { // No content response return {} as T; // Return an empty object for 204 responses } - return await response.json() as T; + return (await response.json()) as T; } catch (error) { console.error(`Error fetching ${url}:`, error); - throw error; + if (error instanceof Error) { + // If the error is an instance of Error, rethrow it + return Promise.reject(new Error(`${error.message}`)); + } + return Promise.reject(new Error(`${error}`)); } } @@ -61,4 +82,4 @@ export function deleteAPI(endpoint: string): Promise { return fetchAPI(endpoint, { method: "DELETE", }); -} \ No newline at end of file +} diff --git a/src/lib/components/ControlPanel.svelte b/src/lib/components/ControlPanel.svelte index c1bd305..843cd10 100644 --- a/src/lib/components/ControlPanel.svelte +++ b/src/lib/components/ControlPanel.svelte @@ -40,8 +40,6 @@ $: $SavedPointsStore, setCoordinatesFromSavedPoint(); - $: inputLat, inputLng, setToCustomOnChange(); - function setCoordinatesFromSavedPoint() { console.log("Start point changed:", startPoint); @@ -135,6 +133,7 @@ console.log("Launch position updated:", lat, lng); inputLat = lat.toFixed(6).toString(); inputLng = lng.toFixed(6).toString(); + setToCustomOnChange(); }; export const getElement = () => { @@ -253,9 +252,9 @@ - + / - + @@ -278,6 +277,7 @@ type="number" id="startHeight" class="form-control-sm" + on:change={setToCustomOnChange} bind:value={$FlightParametersStore.launch_altitude} /> diff --git a/src/lib/components/PointListModal.svelte b/src/lib/components/PointListModal.svelte index 34eaa30..a7866cd 100644 --- a/src/lib/components/PointListModal.svelte +++ b/src/lib/components/PointListModal.svelte @@ -1,45 +1,57 @@ - + -