fix(front): channel create album modal

This commit is contained in:
ArneBo 2025-04-07 13:07:16 +02:00
parent 28a5e53850
commit ab715611ab
2 changed files with 17 additions and 21 deletions

View File

@ -3,7 +3,7 @@ import type { Channel, BackendError } from '~/types'
import axios from 'axios' import axios from 'axios'
import { watch, ref } from 'vue' import { watch, computed, ref } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useModal } from '~/ui/composables/useModal.ts' import { useModal } from '~/ui/composables/useModal.ts'
@ -20,20 +20,14 @@ const emit = defineEmits(['created'])
const newAlbumTitle = ref<string>('') const newAlbumTitle = ref<string>('')
const isLoading = ref(false) const isLoading = ref(false)
const submittable = ref(false) const submittable = computed(() => newAlbumTitle.value.length > 0)
const errors = ref<string[]>([]) const errors = ref<string[]>([])
const { isOpen: show } = useModal('album') const isOpen = useModal('album').isOpen
watch(show, () => { watch(isOpen, () => {
isLoading.value = false isLoading.value = false
submittable.value = false newAlbumTitle.value = '' // Reset the title to ensure submittable becomes false
})
// Create a new Album and tell the parent to re-fetch all albums
defineExpose({
show
}) })
const submit = async () => { const submit = async () => {
@ -43,29 +37,32 @@ const submit = async () => {
try { try {
await axios.post('albums/', { await axios.post('albums/', {
title: newAlbumTitle.value, title: newAlbumTitle.value,
artist_credit: [channel.value.artist?.id] artist: channel.value.artist?.id
}) })
emit('created')
} catch (error) { } catch (error) {
errors.value = (error as BackendError).backendErrors errors.value = (error as BackendError).backendErrors
} finally {
isLoading.value = false
isOpen.value = false // TODO: Fix the @created event to close the modal in channels/DetailOverview.vue
} }
emit('created')
isLoading.value = false
} }
defineExpose({
submit
})
</script> </script>
<template> <template>
<Modal <Modal
v-model="show" v-model="isOpen"
:title="channel?.artist?.content_category === 'podcast' ? t('components.channels.AlbumModal.header.newSeries') : t('components.channels.AlbumModal.header.newAlbum')" :title="channel?.artist?.content_category === 'podcast' ? t('components.channels.AlbumModal.header.newSeries') : t('components.channels.AlbumModal.header.newAlbum')"
class="small" class="small"
:cancel="t('components.channels.AlbumModal.button.cancel')" :cancel="t('components.channels.AlbumModal.button.cancel')"
> >
<template #alert> <template #alert>
<Alert <Alert
v-if="errors.length > 0" v-if="errors?.length > 0"
red red
> >
<h4 class="header"> <h4 class="header">

View File

@ -94,8 +94,6 @@ if (isOwner.value) {
}) })
}) })
} }
const albumModal = ref()
</script> </script>
<template> <template>
@ -207,7 +205,8 @@ const albumModal = ref()
<album-modal <album-modal
v-if="isOwner" v-if="isOwner"
:model-value="object" :model-value="object"
@created="albumModal.show = false; seriesKey = new Date()" :channel="object"
@created="useModal('album').isOpen.value = false; seriesKey = new Date()"
/> />
</section> </section>
</template> </template>