Let a tap name a Ziel and download the view in front of you.

The same queue fetches that view at every prepared scale when Download-Knopf is on.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-09 08:38:35 +02:00
co-authored by Cursor
parent 6e635320e5
commit 2f1fab202e
9 changed files with 667 additions and 20 deletions
+17 -6
View File
@@ -1,4 +1,4 @@
import type { MarksPort } from "../karte/types";
import type { MarksPort, RememberedMarks } from "../karte/types";
const DB_NAME = "karte";
const STORE = "marks";
@@ -21,16 +21,23 @@ function stringsFrom(value: unknown): string[] {
return value.filter((item): item is string => typeof item === "string");
}
function rememberedFrom(value: unknown): { heruntergeladen: string[]; ziele: string[] } {
if (Array.isArray(value)) return { heruntergeladen: stringsFrom(value), ziele: [] };
function rememberedFrom(value: unknown): RememberedMarks {
if (Array.isArray(value)) {
return { heruntergeladen: stringsFrom(value), ziele: [], downloadKnopf: false };
}
if (value && typeof value === "object") {
const record = value as { heruntergeladen?: unknown; ziele?: unknown };
const record = value as {
heruntergeladen?: unknown;
ziele?: unknown;
downloadKnopf?: unknown;
};
return {
heruntergeladen: stringsFrom(record.heruntergeladen),
ziele: stringsFrom(record.ziele),
downloadKnopf: record.downloadKnopf === true,
};
}
return { heruntergeladen: [], ziele: [] };
return { heruntergeladen: [], ziele: [], downloadKnopf: false };
}
function settle(tx: IDBTransaction, value: () => unknown): Promise<unknown> {
@@ -60,7 +67,11 @@ export function createMarksDb(): MarksPort {
try {
const tx = db.transaction(STORE, "readwrite");
tx.objectStore(STORE).put(
{ heruntergeladen: state.heruntergeladen, ziele: state.ziele },
{
heruntergeladen: state.heruntergeladen,
ziele: state.ziele,
downloadKnopf: state.downloadKnopf,
},
KEY,
);
await settle(tx, () => undefined);