Files
wails_tools/examples/wails3_init_updater/frontend/src/main.ts
2026-03-12 22:16:34 +01:00

63 lines
2.2 KiB
TypeScript

import { Events } from "@wailsio/runtime";
import { UpdateService } from "../bindings/github.com/Eriyc/rules_wails/examples/wails3_init_updater";
type Snapshot = {
state: string;
currentVersion: string;
channel: string;
candidate?: {
version: string;
notesMarkdown?: string;
};
lastError?: {
message: string;
};
};
const currentVersionElement = document.getElementById("current-version")! as HTMLDivElement;
const channelElement = document.getElementById("channel")! as HTMLDivElement;
const stateElement = document.getElementById("state")! as HTMLDivElement;
const candidateVersionElement = document.getElementById("candidate-version")! as HTMLDivElement;
const lastErrorElement = document.getElementById("last-error")! as HTMLDivElement;
const releaseNotesElement = document.getElementById("release-notes")! as HTMLDivElement;
const checkButton = document.getElementById("check")! as HTMLButtonElement;
const downloadButton = document.getElementById("download")! as HTMLButtonElement;
const applyButton = document.getElementById("apply")! as HTMLButtonElement;
function render(snapshot: Snapshot) {
currentVersionElement.innerText = snapshot.currentVersion ?? "unknown";
channelElement.innerText = snapshot.channel ?? "unknown";
stateElement.innerText = snapshot.state ?? "idle";
candidateVersionElement.innerText = snapshot.candidate?.version ?? "none";
lastErrorElement.innerText = snapshot.lastError?.message ?? "none";
releaseNotesElement.innerText = snapshot.candidate?.notesMarkdown ?? "No release selected.";
}
async function refreshSnapshot() {
render((await UpdateService.Snapshot()) as Snapshot);
}
checkButton.addEventListener("click", async () => {
render((await UpdateService.Check()) as Snapshot);
});
downloadButton.addEventListener("click", async () => {
render((await UpdateService.Download()) as Snapshot);
});
applyButton.addEventListener("click", async () => {
try {
await UpdateService.ApplyAndRestart();
} catch (error) {
lastErrorElement.innerText = String(error);
}
});
Events.On("updates:state", (event) => {
render(event.data as Snapshot);
});
refreshSnapshot().catch((error) => {
lastErrorElement.innerText = String(error);
});