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);