fix(vehicles): use store ID for selectedVehicle instead of index
This commit is contained in:
@ -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);
|
||||||
|
|||||||
@ -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,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -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() : "",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user