Archived
fix: keep federated docker updates tab visible
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
import type { PiWebInstallationInfo, PiWebStatusMessage, PiWebStatusResponse, PluginRuntimeState } from "@jmfederico/pi-web/plugin-api";
|
||||
import type { PiWebDockerMode, PiWebInstallationInfo, PiWebStatusMessage, PiWebStatusResponse, PluginRuntimeState } from "@jmfederico/pi-web/plugin-api";
|
||||
|
||||
export interface CommandEntry {
|
||||
label: string;
|
||||
command: string;
|
||||
}
|
||||
|
||||
export interface UpdatesRuntimeHint {
|
||||
dockerMode?: PiWebDockerMode;
|
||||
}
|
||||
|
||||
// The single command users should run when they do not want to think: if an
|
||||
// update is available, `commands.update` already chains the update and a full
|
||||
// restart; otherwise, when anything is stale, a full restart is enough.
|
||||
@@ -49,14 +53,43 @@ export function isSelfManagedInstallation(installation: PiWebInstallationInfo |
|
||||
return installation === undefined || installation.kind === "local" || installation.kind === "docker" || installation.kind === "unknown";
|
||||
}
|
||||
|
||||
export function shouldShowUpdatesPanel(state: PluginRuntimeState | undefined): boolean {
|
||||
export function shouldShowUpdatesPanel(state: PluginRuntimeState | undefined, hint: UpdatesRuntimeHint = {}): boolean {
|
||||
const status = statusFor(state);
|
||||
if (hint.dockerMode !== undefined) return true;
|
||||
if (messageCount(state) > 0) return true;
|
||||
if (status === undefined) return false;
|
||||
return isSelfManagedInstallation(status.components.web.installation)
|
||||
|| isSelfManagedInstallation(status.components.sessiond.installation);
|
||||
}
|
||||
|
||||
export function fallbackDockerStatus(hint: UpdatesRuntimeHint, generatedAt = "federated status unavailable"): PiWebStatusResponse | undefined {
|
||||
if (hint.dockerMode === undefined) return undefined;
|
||||
const commandPrefix = hint.dockerMode === "dev" ? "pi-web-docker --dev" : "pi-web-docker";
|
||||
const installation: PiWebInstallationInfo = { kind: "docker", dockerMode: hint.dockerMode };
|
||||
return {
|
||||
packageName: "@jmfederico/pi-web",
|
||||
generatedAt,
|
||||
components: {
|
||||
web: { component: "web", label: "Web/UI", stale: false, available: true, installation },
|
||||
sessiond: { component: "sessiond", label: "Session daemon", stale: false, available: true, installation },
|
||||
},
|
||||
release: { packageName: "@jmfederico/pi-web", updateAvailable: false, skipped: true },
|
||||
commands: {
|
||||
update: `${commandPrefix} update`,
|
||||
restart: `${commandPrefix} restart`,
|
||||
restartWeb: `${commandPrefix} restart-web`,
|
||||
restartSessiond: `${commandPrefix} restart-sessiond`,
|
||||
status: `${commandPrefix} status`,
|
||||
},
|
||||
messages: [{
|
||||
id: "docker-status-compatibility",
|
||||
severity: "info",
|
||||
title: "Docker update commands available",
|
||||
body: "This Updates plugin was loaded from a Docker PI WEB runtime, but the gateway has not provided Docker-aware status details yet. The Docker maintenance commands below are still available.",
|
||||
}],
|
||||
};
|
||||
}
|
||||
|
||||
export function formatVersion(version: string | undefined): string {
|
||||
return version === undefined || version === "" ? "unknown" : version;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user