|
| 1 | +<template> |
| 2 | + <div |
| 3 | + v-if="showVueNodesBanner" |
| 4 | + class="pointer-events-auto relative w-full h-10 bg-gradient-to-r from-blue-600 to-blue-700 flex items-center justify-center px-4" |
| 5 | + > |
| 6 | + <div class="flex items-center"> |
| 7 | + <i class="icon-[lucide--sparkles]"></i> |
| 8 | + <span class="pl-2">{{ $t('vueNodesBanner.message') }}</span> |
| 9 | + <Button |
| 10 | + class="cursor-pointer bg-transparent rounded h-7 px-3 border border-white text-white ml-4 text-xs" |
| 11 | + @click="handleTryItOut" |
| 12 | + > |
| 13 | + {{ $t('vueNodesBanner.tryItOut') }} |
| 14 | + </Button> |
| 15 | + </div> |
| 16 | + <Button |
| 17 | + class="cursor-pointer bg-transparent border-0 outline-0 grid place-items-center absolute right-4" |
| 18 | + unstyled |
| 19 | + @click="handleDismiss" |
| 20 | + > |
| 21 | + <i class="w-5 h-5 icon-[lucide--x]"></i> |
| 22 | + </Button> |
| 23 | + </div> |
| 24 | +</template> |
| 25 | + |
| 26 | +<script setup lang="ts"> |
| 27 | +import { useLocalStorage } from '@vueuse/core' |
| 28 | +import Button from 'primevue/button' |
| 29 | +import { computed } from 'vue' |
| 30 | +
|
| 31 | +import { useSettingStore } from '@/platform/settings/settingStore' |
| 32 | +
|
| 33 | +const STORAGE_KEY = 'vueNodesBannerDismissed' |
| 34 | +
|
| 35 | +const settingStore = useSettingStore() |
| 36 | +const bannerDismissed = useLocalStorage(STORAGE_KEY, false) |
| 37 | +
|
| 38 | +const vueNodesEnabled = computed(() => { |
| 39 | + try { |
| 40 | + return settingStore.get('Comfy.VueNodes.Enabled') ?? false |
| 41 | + } catch { |
| 42 | + return false |
| 43 | + } |
| 44 | +}) |
| 45 | +
|
| 46 | +const showVueNodesBanner = computed(() => { |
| 47 | + if (vueNodesEnabled.value) { |
| 48 | + return false |
| 49 | + } |
| 50 | +
|
| 51 | + if (bannerDismissed.value) { |
| 52 | + return false |
| 53 | + } |
| 54 | +
|
| 55 | + return true |
| 56 | +}) |
| 57 | +
|
| 58 | +const handleDismiss = (): void => { |
| 59 | + bannerDismissed.value = true |
| 60 | +} |
| 61 | +
|
| 62 | +const handleTryItOut = async (): Promise<void> => { |
| 63 | + try { |
| 64 | + await settingStore.set('Comfy.VueNodes.Enabled', true) |
| 65 | + } catch (error) { |
| 66 | + console.error('Failed to enable Vue nodes:', error) |
| 67 | + } finally { |
| 68 | + handleDismiss() |
| 69 | + } |
| 70 | +} |
| 71 | +</script> |
0 commit comments