fix(vehicles): use store ID for selectedVehicle instead of index
Some checks failed
TrafficCue CI / check (push) Failing after 1m32s
TrafficCue CI / build (push) Successful in 9m35s
TrafficCue CI / build-android (push) Successful in 25m14s

This commit is contained in:
2025-10-03 15:22:00 +02:00
parent 6e11b438a2
commit fd7edc217d
3 changed files with 11 additions and 17 deletions

View File

@ -44,7 +44,7 @@
<Drawer.Trigger <Drawer.Trigger
class={buttonVariants({ variant: "secondary", class: "w-full p-5" })} class={buttonVariants({ variant: "secondary", class: "w-full p-5" })}
> >
{@const vehicle = selectedVehicle() ?? DefaultVehicle} {@const vehicle = selectedVehicle()?.data ?? DefaultVehicle}
{@const Icon = getVehicleIcon(vehicle.type)} {@const Icon = getVehicleIcon(vehicle.type)}
<Icon /> <Icon />
{vehicle.name} {vehicle.name}
@ -60,7 +60,7 @@
{#each vehicles.current as vehicle (vehicle.name)} {#each vehicles.current as vehicle (vehicle.name)}
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<Button <Button
variant={selectedVehicle() === vehicle.data ? "default" : "secondary"} variant={selectedVehicle()?.data === vehicle.data ? "default" : "secondary"}
class="w-[calc(100%-48px-8px)] p-5" class="w-[calc(100%-48px-8px)] p-5"
onclick={() => { onclick={() => {
selectVehicle(vehicle.data); selectVehicle(vehicle.data);

View File

@ -89,7 +89,7 @@
lat: parseFloat(toLocation.split(",")[0]), lat: parseFloat(toLocation.split(",")[0]),
lon: parseFloat(toLocation.split(",")[1]), lon: parseFloat(toLocation.split(",")[1]),
}; };
const req = createValhallaRequest(selectedVehicle() ?? DefaultVehicle, [ const req = createValhallaRequest(selectedVehicle()?.data ?? DefaultVehicle, [
FROM, FROM,
TO, TO,
]); ]);

View File

@ -78,15 +78,12 @@ interface StateValue<T> {
v: T; v: T;
} }
export const vehicles: WrappedValue<StoreValue<Vehicle>[]> = stores("vehicle"); export const vehicles: WrappedValue<StoreValue<Vehicle>[]> = stores("vehicle");
export const selectedVehicleIdx: StateValue<number | null> = $state({ export const selectedVehicleId: StateValue<string | null> = $state({
v: localStorage.getItem("selectedVehicle") v: localStorage.getItem("selectedVehicle") ?? null
? parseInt(localStorage.getItem("selectedVehicle")!)
: null,
}); });
export const selectedVehicle: () => Vehicle | null = () => { export const selectedVehicle: () => StoreValue<Vehicle> | null = () => {
return ( return (
vehicles.current[selectedVehicleIdx.v !== null ? selectedVehicleIdx.v : 0] vehicles.current.find((v) => v.id === selectedVehicleId.v) ?? null
?.data ?? null
); );
}; };
@ -104,18 +101,15 @@ export async function addVehicle(vehicle: Vehicle) {
export function selectVehicle(vehicle: Vehicle | null) { export function selectVehicle(vehicle: Vehicle | null) {
if (vehicle == null) { if (vehicle == null) {
selectedVehicleIdx.v = null; selectedVehicleId.v = null;
} else { } else {
selectedVehicleIdx.v = vehicles.current.findIndex( selectedVehicleId.v = vehicles.current.find(
(v) => v.name === vehicle.name, (v) => v.name === vehicle.name,
); )?.id ?? null;
if (selectedVehicleIdx.v === -1) {
selectedVehicleIdx.v = null;
}
} }
localStorage.setItem( localStorage.setItem(
"selectedVehicle", "selectedVehicle",
selectedVehicleIdx.v !== null ? selectedVehicleIdx.v.toString() : "", selectedVehicleId.v !== null ? selectedVehicleId.v.toString() : "",
); );
} }