diff --git a/src/kicanvas/elements/common/project-panel.ts b/src/kicanvas/elements/common/project-panel.ts index 4a0c543c..d63b5a8e 100644 --- a/src/kicanvas/elements/common/project-panel.ts +++ b/src/kicanvas/elements/common/project-panel.ts @@ -65,6 +65,7 @@ export class KCProjectPanelElement extends KCUIElement { ]; #menu: KCUIMenuElement; + #selected_name: string | null = null; project: Project; override connectedCallback() { @@ -105,11 +106,14 @@ export class KCProjectPanelElement extends KCUIElement { } get selected() { - return this.#menu.selected?.name ?? null; + return this.#menu?.selected?.name ?? this.#selected_name; } set selected(name: string | null) { - this.#menu.selected = name; + this.#selected_name = name; + if (this.#menu) { + this.#menu.selected = name; + } } @no_self_recursion @@ -124,6 +128,12 @@ export class KCProjectPanelElement extends KCUIElement { return html``; } + // Update selected_name from active page if not already set + const active_path = this.project.active_page?.project_path ?? null; + if (active_path !== null && this.#selected_name !== active_path) { + this.#selected_name = active_path; + } + for (const page of this.project.pages()) { const icon = page.type == "schematic" @@ -161,6 +171,10 @@ export class KCProjectPanelElement extends KCUIElement { ${file_btn_elms} ` as KCUIMenuElement; + if (this.#selected_name !== null) { + this.#menu.selected = this.#selected_name; + } + return html` ${this.#menu} diff --git a/src/kicanvas/elements/kicanvas-shell.ts b/src/kicanvas/elements/kicanvas-shell.ts index 603d436d..aecb6c8a 100644 --- a/src/kicanvas/elements/kicanvas-shell.ts +++ b/src/kicanvas/elements/kicanvas-shell.ts @@ -129,7 +129,32 @@ class KiCanvasShellElement extends KCUIElement { try { await this.project.load(vfs); - this.project.set_active_page(this.project.first_page); + // Determine which page to activate based on URL query parameter "sheet" + const url_params = new URLSearchParams(window.location.search); + const sheet_param = url_params.get("sheet"); + let target_page = this.project.first_page; + if (sheet_param) { + // Try to find a matching page + for (const page of this.project.pages()) { + if (page.page === sheet_param) { + target_page = page; + break; + } + if ( + page.name + ?.toLowerCase() + .includes(sheet_param.toLowerCase()) + ) { + target_page = page; + break; + } + if (page.filename === sheet_param) { + target_page = page; + break; + } + } + } + this.project.set_active_page(target_page); this.loaded = true; } catch (e) { console.error(e);