This commit is contained in:
xds
2026-02-08 22:49:37 +03:00
parent 0b9746bce8
commit c73bffc9f4
8 changed files with 2867 additions and 0 deletions

View File

@@ -13,15 +13,22 @@ import MultiSelect from 'primevue/multiselect'
import ProgressSpinner from 'primevue/progressspinner'
import ProgressBar from 'primevue/progressbar'
import Message from 'primevue/message'
import Skeleton from 'primevue/skeleton'
import { useAlbumStore } from '../stores/albums'
const router = useRouter()
const API_URL = import.meta.env.VITE_API_URL
const albumStore = useAlbumStore()
// --- State ---
const prompt = ref('')
const selectedCharacter = ref(null)
const selectedAssets = ref([])
// Album Picker State
const isAlbumPickerVisible = ref(false)
const generationToAdd = ref(null)
const selectedAlbumForAdd = ref(null)
// Asset Picker State
const isAssetPickerVisible = ref(false)
const assetPickerTab = ref('all') // 'all', 'uploaded', 'generated'
@@ -437,6 +444,26 @@ watch(assetPickerTab, () => {
}
})
// --- Album Picker Logic ---
const openAlbumPicker = (gen) => {
generationToAdd.value = gen
isAlbumPickerVisible.value = true
albumStore.fetchAlbums() // Fetch albums when opening picker
}
const confirmAddToAlbum = async () => {
if (!generationToAdd.value || !selectedAlbumForAdd.value) return
try {
await albumStore.addGenerationToAlbum(selectedAlbumForAdd.value.id, generationToAdd.value.id)
isAlbumPickerVisible.value = false
selectedAlbumForAdd.value = null
generationToAdd.value = null
// Optional: Show success toast
} catch (e) {
console.error('Failed to add to album', e)
}
}
</script>
<template>
@@ -504,6 +531,9 @@ watch(assetPickerTab, () => {
v-tooltip.left="'Edit (Use Result)'"
class="!w-6 !h-6 !rounded-full !bg-white/20 !border-none !text-white text-[10px] hover:!bg-violet-500"
@click.stop="useResultAsAsset(gen)" />
<Button icon="pi pi-folder-plus" v-tooltip.left="'Add to Album'"
class="!w-6 !h-6 !rounded-full !bg-white/20 !border-none !text-white text-[10px] hover:!bg-violet-500"
@click.stop="openAlbumPicker(gen)" />
</div>
</div>
@@ -757,6 +787,36 @@ watch(assetPickerTab, () => {
</template>
</Dialog>
<Dialog v-model:visible="isAlbumPickerVisible" modal header="Add to Album" :style="{ width: '400px' }"
:pt="{ root: { class: '!bg-slate-900 !border !border-white/10' }, header: { class: '!bg-slate-900 !border-b !border-white/5 !text-white' }, content: { class: '!bg-slate-900 !p-4' }, footer: { class: '!bg-slate-900 !border-t !border-white/5 !p-4' }, closeButton: { class: '!text-slate-400 hover:!text-white' } }">
<div class="flex flex-col gap-4">
<div v-if="albumStore.loading" class="flex justify-center p-4">
<i class="pi pi-spin pi-spinner text-violet-500 text-2xl"></i>
</div>
<div v-else-if="albumStore.albums.length === 0" class="text-center text-slate-400">
No albums found. Create one first!
</div>
<Dropdown v-else v-model="selectedAlbumForAdd" :options="albumStore.albums" optionLabel="name" placeholder="Select an Album"
class="w-full !bg-slate-800 !border-white/10 !text-white"
:pt="{
root: { class: '!bg-slate-800' },
input: { class: '!text-white' },
trigger: { class: '!text-slate-400' },
panel: { class: '!bg-slate-900 !border-white/10' },
item: { class: '!text-slate-300 hover:!bg-white/10 hover:!text-white' }
}" />
</div>
<template #footer>
<div class="flex justify-end gap-2">
<Button label="Cancel" @click="isAlbumPickerVisible = false" class="!text-slate-300 hover:!bg-white/5" text />
<Button label="Add" @click="confirmAddToAlbum" :disabled="!selectedAlbumForAdd"
class="!bg-violet-600 !border-none hover:!bg-violet-500" />
</div>
</template>
</Dialog>
</div>
</template>