diff --git a/src/client/src/components/MachineList.ts b/src/client/src/components/MachineList.ts index 94b5bc7..afc33c7 100644 --- a/src/client/src/components/MachineList.ts +++ b/src/client/src/components/MachineList.ts @@ -21,12 +21,12 @@ export class MachineList extends LitElement {
{ activateSelectableRow(event, () => this.onSelect?.(machine)); }} @keydown=${(event: KeyboardEvent) => { activateSelectableRowFromKeyboard(event, () => this.onSelect?.(machine)); }} >
- ${machine.name}${machine.kind === "local" ? "Local Pi Web" : machine.baseUrl} + ${machine.name}${machine.kind === "local" ? "Local Pi Web" : `${machine.baseUrl ?? "Remote Pi Web"} ยท projects coming soon`}
`)} diff --git a/src/client/src/components/PiWebApp.ts b/src/client/src/components/PiWebApp.ts index 36e48e6..dfdbb78 100644 --- a/src/client/src/components/PiWebApp.ts +++ b/src/client/src/components/PiWebApp.ts @@ -315,6 +315,7 @@ export class PiWebApp extends LitElement { private async restoreRoute(updateUrl: boolean) { const route = readRoute(); + await this.restoreRouteMachine(route, updateUrl); const selectedFilePath = readNamespacedString(queryNamespace("core:workspace.files"), "file"); const selectedDiffPath = readNamespacedString(queryNamespace("core:workspace.git"), "diff"); const selectedTerminalId = readNamespacedString(TERMINAL_ROUTE_NAMESPACE, "terminal"); @@ -342,8 +343,17 @@ export class PiWebApp extends LitElement { } } + private async restoreRouteMachine(route: AppRoute, updateUrl: boolean): Promise { + const routeMachineId = route.machineId ?? "local"; + if (this.state.selectedMachine?.id === routeMachineId) return; + const machine = this.state.machines.find((candidate) => candidate.id === routeMachineId); + if (machine === undefined) return; + await this.machines.selectMachine(machine, { updateUrl }); + } + private routeMatchesCurrentSelection(route: AppRoute): boolean { - return route.workspaceId !== undefined + return (route.machineId ?? "local") === (this.state.selectedMachine?.id ?? "local") + && route.workspaceId !== undefined && route.workspaceId !== "" && this.state.selectedProject?.id === route.projectId && this.state.selectedWorkspace?.id === route.workspaceId diff --git a/src/client/src/controllers/machineController.ts b/src/client/src/controllers/machineController.ts index ef0f25a..8cd9466 100644 --- a/src/client/src/controllers/machineController.ts +++ b/src/client/src/controllers/machineController.ts @@ -19,7 +19,7 @@ export class MachineController { } } - async selectMachine(machine: Machine): Promise { + async selectMachine(machine: Machine, options: { updateUrl?: boolean | undefined } = {}): Promise { if (this.getState().selectedMachine?.id === machine.id) return; this.setState({ selectedMachine: machine, @@ -35,7 +35,7 @@ export class MachineController { activity: undefined, ...resetWorkspaceScopedState(), }); - this.updateUrl(); + if (options.updateUrl !== false) this.updateUrl(); await this.projects.loadProjects(); } } diff --git a/src/client/src/controllers/projectController.ts b/src/client/src/controllers/projectController.ts index 21528a6..3b751f0 100644 --- a/src/client/src/controllers/projectController.ts +++ b/src/client/src/controllers/projectController.ts @@ -6,6 +6,11 @@ export class ProjectController { constructor(private readonly getState: GetState, private readonly setState: SetState, private readonly workspaces: WorkspaceController) {} async loadProjects() { + const machine = this.getState().selectedMachine; + if (machine?.kind === "remote") { + this.setState({ projects: [], workspacesByProjectId: {}, error: "Remote project browsing is not available yet." }); + return; + } this.setState({ error: "", isLoadingProjects: true }); try { const projects = await api.projects(); @@ -20,6 +25,10 @@ export class ProjectController { } async addProject(path: string, create?: boolean) { + if (this.getState().selectedMachine?.kind === "remote") { + this.setState({ error: "Adding projects to remote machines is not available yet." }); + return; + } if (path.trim() === "") return; try { const project = await api.addProject(path.trim(), undefined, create);