mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
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)
85 lines
2.1 KiB
TypeScript
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
|
|
}
|
|
}
|