Files
ComfyUI_frontend/src/platform/secrets/composables/useSecrets.ts
Christian Byrne 0f889a95d9 [backport core/1.41] fix: remove timeouts from error toasts so they persist until dismissed (#9543) (#9562)
Backport of #9543 to core/1.41.

Cherry-pick of merge commit 725a0a2b applied cleanly.

**Original PR:** https://github.com/Comfy-Org/ComfyUI_frontend/pull/9543
**Pipeline ticket:** 15e1f241-efaa-4fe5-88ca-4ccc7bfb3345

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9562-backport-core-1-41-fix-remove-timeouts-from-error-toasts-so-they-persist-until-dismiss-31d6d73d365081caa825ff32ca622b2c)
by [Unito](https://www.unito.io)
2026-03-07 18:18:12 -08:00

85 lines
2.1 KiB
TypeScript

import { computed, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import { useToastStore } from '@/platform/updates/common/toastStore'
import {
deleteSecret as deleteSecretApi,
listSecrets,
SecretsApiError
} from '../api/secretsApi'
import type { SecretMetadata, SecretProvider } from '../types'
export function useSecrets() {
const { t } = useI18n()
const toastStore = useToastStore()
const loading = ref(false)
const secrets = ref<SecretMetadata[]>([])
const operatingSecretId = ref<string | null>(null)
const existingProviders = computed<SecretProvider[]>(() =>
secrets.value
.map((s) => s.provider)
.filter((p): p is SecretProvider => p !== undefined)
)
async function fetchSecrets() {
loading.value = true
try {
secrets.value = await listSecrets()
} catch (err) {
if (err instanceof SecretsApiError) {
toastStore.add({
severity: 'error',
summary: t('g.error'),
detail: err.message
})
} else {
console.error('Unexpected error fetching secrets:', err)
toastStore.add({
severity: 'error',
summary: t('g.error'),
detail: t('g.unknownError')
})
}
} finally {
loading.value = false
}
}
async function deleteSecret(secret: SecretMetadata) {
operatingSecretId.value = secret.id
try {
await deleteSecretApi(secret.id)
secrets.value = secrets.value.filter((s) => s.id !== secret.id)
} catch (err) {
if (err instanceof SecretsApiError) {
toastStore.add({
severity: 'error',
summary: t('g.error'),
detail: err.message
})
} else {
console.error('Unexpected error deleting secret:', err)
toastStore.add({
severity: 'error',
summary: t('g.error'),
detail: t('g.unknownError')
})
}
} finally {
operatingSecretId.value = null
}
}
return {
loading,
secrets,
operatingSecretId,
existingProviders,
fetchSecrets,
deleteSecret
}
}