limit release toast to folder view
This commit is contained in:
@@ -1,30 +1,68 @@
|
|||||||
import { createSignal } from "solid-js"
|
import { createEffect, createSignal } from "solid-js"
|
||||||
import type { LatestReleaseInfo, WorkspaceEventPayload } from "../../../server/src/api-types"
|
import type { LatestReleaseInfo, WorkspaceEventPayload } from "../../../server/src/api-types"
|
||||||
import { getServerMeta } from "../lib/server-meta"
|
import { getServerMeta } from "../lib/server-meta"
|
||||||
import { serverEvents } from "../lib/server-events"
|
import { serverEvents } from "../lib/server-events"
|
||||||
import { showToastNotification, ToastHandle } from "../lib/notifications"
|
import { showToastNotification, ToastHandle } from "../lib/notifications"
|
||||||
import { getLogger } from "../lib/logger"
|
import { getLogger } from "../lib/logger"
|
||||||
|
import { hasInstances, showFolderSelection } from "./ui"
|
||||||
|
|
||||||
const log = getLogger("actions")
|
const log = getLogger("actions")
|
||||||
|
|
||||||
const [availableRelease, setAvailableRelease] = createSignal<LatestReleaseInfo | null>(null)
|
const [availableRelease, setAvailableRelease] = createSignal<LatestReleaseInfo | null>(null)
|
||||||
|
|
||||||
let initialized = false
|
let initialized = false
|
||||||
|
let visibilityEffectInitialized = false
|
||||||
let activeToast: ToastHandle | null = null
|
let activeToast: ToastHandle | null = null
|
||||||
|
let activeToastVersion: string | null = null
|
||||||
|
|
||||||
function dismissActiveToast() {
|
function dismissActiveToast() {
|
||||||
if (activeToast) {
|
if (activeToast) {
|
||||||
activeToast.dismiss()
|
activeToast.dismiss()
|
||||||
activeToast = null
|
activeToast = null
|
||||||
|
activeToastVersion = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ensureVisibilityEffect() {
|
||||||
|
if (visibilityEffectInitialized) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
visibilityEffectInitialized = true
|
||||||
|
|
||||||
|
createEffect(() => {
|
||||||
|
const release = availableRelease()
|
||||||
|
const shouldShow = Boolean(release) && (!hasInstances() || showFolderSelection())
|
||||||
|
|
||||||
|
if (!shouldShow || !release) {
|
||||||
|
dismissActiveToast()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!activeToast || activeToastVersion !== release.version) {
|
||||||
|
dismissActiveToast()
|
||||||
|
activeToast = showToastNotification({
|
||||||
|
title: `CodeNomad ${release.version}`,
|
||||||
|
message: release.channel === "dev" ? "Dev release build available." : "New stable build on GitHub.",
|
||||||
|
variant: "info",
|
||||||
|
duration: Number.POSITIVE_INFINITY,
|
||||||
|
position: "bottom-right",
|
||||||
|
action: {
|
||||||
|
label: "View release",
|
||||||
|
href: release.url,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
activeToastVersion = release.version
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function initReleaseNotifications() {
|
export function initReleaseNotifications() {
|
||||||
if (initialized) {
|
if (initialized) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
initialized = true
|
initialized = true
|
||||||
|
|
||||||
|
ensureVisibilityEffect()
|
||||||
void refreshFromMeta()
|
void refreshFromMeta()
|
||||||
|
|
||||||
serverEvents.on("app.releaseAvailable", (event) => {
|
serverEvents.on("app.releaseAvailable", (event) => {
|
||||||
@@ -47,22 +85,9 @@ async function refreshFromMeta() {
|
|||||||
function applyRelease(release: LatestReleaseInfo | null | undefined) {
|
function applyRelease(release: LatestReleaseInfo | null | undefined) {
|
||||||
if (!release) {
|
if (!release) {
|
||||||
setAvailableRelease(null)
|
setAvailableRelease(null)
|
||||||
dismissActiveToast()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
setAvailableRelease(release)
|
setAvailableRelease(release)
|
||||||
dismissActiveToast()
|
|
||||||
activeToast = showToastNotification({
|
|
||||||
title: `CodeNomad ${release.version}`,
|
|
||||||
message: release.channel === "dev" ? "Dev release build available." : "New stable build on GitHub.",
|
|
||||||
variant: "info",
|
|
||||||
duration: Number.POSITIVE_INFINITY,
|
|
||||||
position: "bottom-right",
|
|
||||||
action: {
|
|
||||||
label: "View release",
|
|
||||||
href: release.url,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useAvailableRelease() {
|
export function useAvailableRelease() {
|
||||||
|
|||||||
Reference in New Issue
Block a user