From ec4dd5dd3be35e7997833e79421d4076b91686ef Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Tue, 24 Mar 2026 12:47:39 +0000 Subject: [PATCH] Move 'LocationFilter' fetching to API Lib package --- package-lock.json | 17 +++++++++-------- package.json | 3 ++- src/lib/components/ui/LocationSearchBox.svelte | 5 +++-- src/lib/locations-object.svelte.ts | 18 +++++++----------- src/routes/+layout.svelte | 4 ++-- src/routes/pis/+page.svelte | 10 +++++----- 6 files changed, 28 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 84968d6..00a4389 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,8 @@ "devDependencies": { "@eslint/compat": "^2.0.2", "@eslint/js": "^9.39.2", - "@owlboard/owlboard-ts": "^3.0.0-dev.20260319T2004", + "@owlboard/api-schema-types": "^3.0.2-alpha1", + "@owlboard/owlboard-ts": "^3.0.0-dev.20260324T1240", "@playwright/test": "^1.58.1", "@sveltejs/adapter-static": "^3.0.10", "@sveltejs/kit": "^2.50.2", @@ -780,20 +781,20 @@ } }, "node_modules/@owlboard/api-schema-types": { - "version": "3.0.1-alpha3", - "resolved": "https://git.fjla.uk/api/packages/OwlBoard/npm/%40owlboard%2Fapi-schema-types/-/3.0.1-alpha3/api-schema-types-3.0.1-alpha3.tgz", - "integrity": "sha512-5CVm1k/C++/VrtAw4NkvclDunH+RmYLnDZZMSWTM1mm+WlEVnmD+MVnTgC/FhcsAmsNHV8swm66RCqkCuhbOnA==", + "version": "3.0.2-alpha1", + "resolved": "https://git.fjla.uk/api/packages/OwlBoard/npm/%40owlboard%2Fapi-schema-types/-/3.0.2-alpha1/api-schema-types-3.0.2-alpha1.tgz", + "integrity": "sha512-3yqWw28y2DZQmNXgAz8emCN5avX/upBXrTOXj9XLuay3gdVcdELd7BiYODBWfgtwZnSbT0fCgVXgKeTzbhHoSQ==", "dev": true, "license": "MIT" }, "node_modules/@owlboard/owlboard-ts": { - "version": "3.0.0-dev.20260319T2004", - "resolved": "https://git.fjla.uk/api/packages/OwlBoard/npm/%40owlboard%2Fowlboard-ts/-/3.0.0-dev.20260319T2004/owlboard-ts-3.0.0-dev.20260319t2004.tgz", - "integrity": "sha512-pphq1/l/8eOH4C0O7ocwBOUzt0HkCWGUlhy1itzKnQbmog7oPUEdyaxzS4Evw8onLsxZwkyqsLAyK7okYi+4XA==", + "version": "3.0.0-dev.20260324T1240", + "resolved": "https://git.fjla.uk/api/packages/OwlBoard/npm/%40owlboard%2Fowlboard-ts/-/3.0.0-dev.20260324T1240/owlboard-ts-3.0.0-dev.20260324t1240.tgz", + "integrity": "sha512-s528RtkKLZmx6jZPdj159eKOBEmDHAjKDV0dSEU8/55JMt+7cSXYEqdXC3Cqs6t39wDxsOaPe8P0Q2z6P+d0jg==", "dev": true, "license": "GPL-3.0", "dependencies": { - "@owlboard/api-schema-types": "^3.0.1-alpha3" + "@owlboard/api-schema-types": "^3.0.2-alpha1" } }, "node_modules/@playwright/test": { diff --git a/package.json b/package.json index df049c2..379ed05 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "devDependencies": { "@eslint/compat": "^2.0.2", "@eslint/js": "^9.39.2", - "@owlboard/owlboard-ts": "^3.0.0-dev.20260319T2004", + "@owlboard/api-schema-types": "^3.0.2-alpha1", + "@owlboard/owlboard-ts": "^3.0.0-dev.20260324T1240", "@playwright/test": "^1.58.1", "@sveltejs/adapter-static": "^3.0.10", "@sveltejs/kit": "^2.50.2", diff --git a/src/lib/components/ui/LocationSearchBox.svelte b/src/lib/components/ui/LocationSearchBox.svelte index 5142dde..0a05424 100644 --- a/src/lib/components/ui/LocationSearchBox.svelte +++ b/src/lib/components/ui/LocationSearchBox.svelte @@ -4,7 +4,8 @@ import { fade } from 'svelte/transition'; import { goto } from '$app/navigation'; - import { LOCATIONS } from '$lib/locations-object.svelte.ts'; + import { LOCATIONS } from '$lib/locations-object.svelte'; + import type { ApiLocationFilter } from '@owlboard/api-schema-types'; let { value = $bindable() } = $props(); @@ -59,7 +60,7 @@ } }); - function choose(loc: LocationRecord) { + function choose(loc: ApiLocationFilter.LocationFilterObject) { showResults = false; selectedIndex = -1; value = ''; diff --git a/src/lib/locations-object.svelte.ts b/src/lib/locations-object.svelte.ts index a0a4a6d..ac36287 100644 --- a/src/lib/locations-object.svelte.ts +++ b/src/lib/locations-object.svelte.ts @@ -1,27 +1,23 @@ -interface LocationRecord { - n: string; // name - t: string; // tiploc - c?: string; // crs - s: string; // search string -} +import { OwlClient } from "./owlClient"; +import type { ApiLocationFilter } from "@owlboard/api-schema-types"; class LocationStore { - data = $state([]); + data = $state([]); loaded = $state(false); - async init(fetcher = fetch) { + async init() { if (this.loaded) return; try { - const res = await fetcher('/api/tiplocs'); - this.data = await res.json(); + const fetch = await OwlClient.locationFilter.getLocationFilterData() + this.data = fetch.data; this.loaded = true; } catch (err) { console.error('Failed to load locations', err); } } - find(id: string | null): LocationRecord | undefined { + find(id: string | null): ApiLocationFilter.LocationFilterObject | undefined { if (!id) return undefined; const query = id.toUpperCase().trim(); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 0f6b99d..441baab 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -3,7 +3,7 @@ import { slide, fade } from 'svelte/transition'; import { onMount } from 'svelte'; - import { LOCATIONS } from '$lib/locations-object.svelte.ts'; + import { LOCATIONS } from '$lib/locations-object.svelte'; import '$lib/global.css'; @@ -13,7 +13,7 @@ import { IconHome, IconDialpad, IconSettings, IconHelp, IconDots } from '@tabler/icons-svelte'; - onMount(() => LOCATIONS.init(fetch)); + onMount(() => LOCATIONS.init()); let { children } = $props(); diff --git a/src/routes/pis/+page.svelte b/src/routes/pis/+page.svelte index c33db91..9e6f791 100644 --- a/src/routes/pis/+page.svelte +++ b/src/routes/pis/+page.svelte @@ -2,11 +2,11 @@ import PisStartEndCard from '$lib/components/ui/cards/pis/PisStartEndCard.svelte'; import PisCode from '$lib/components/ui/cards/pis/PisCode.svelte'; import Button from '$lib/components/ui/Button.svelte'; - import type { PisObjects } from '@owlboard/api-schema-types'; + import type { ApiPisObject } from '@owlboard/api-schema-types'; import { OwlClient, ApiError, ValidationError } from '$lib/owlClient'; import TocStyle from '$lib/components/ui/TocStyle.svelte'; - let results = $state([]); + let results = $state([]); let resultsLoaded = $state(false); let errorState = $state<{status: number, message: string} | null>(null); @@ -16,7 +16,7 @@ try { const response = await OwlClient.pis.getByStartEndCrs(start, end); - results = await response.data || []; + results = response.data || []; } catch (e) { if (e instanceof ValidationError) { errorState = { status: 400, message: e.message }; @@ -80,9 +80,9 @@ {#each results as result} - + {result.code} - {result.crsStops.join(' ')} + {result.crsStops?.join(' ') || ''} {/each}