albums
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user