Newer
Older
<template>
<div>
<!-- Modal for adding new shows -->
<b-modal
ref="modalAddShow"
title="Create a new show"
size="lg"
@ok="addShow"
>
<b-container fluid>
<b-row>
<b-col cols="3">
Name of the show:
</b-col>
<b-col cols="9">
<b-form-input
v-model="newShow.name"
type="text"
placeholder="Enter a title for this new show"
/>
</b-col>
<b-col cols="3" />
<b-col cols="9">
<small class="slug">Slug: {{ temporarySlug }}</small>
</b-col>
</b-row>
<br>
<b-col cols="3">
Short description:
</b-col>
<b-col cols="9">
<b-form-input
v-model="newShow.short_description"
type="text"
placeholder="Enter a short description for this show"
/>
</b-col>
</b-row>
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<br>
<b-row>
<b-col cols="3">
Show type:
</b-col>
<b-col cols="9">
<div v-if="!loaded.types">
<img
src="../assets/radio.gif"
alt="loading data"
>
</div>
<div v-else>
<b-form-select
v-model="newShow.type"
:options="showTypeSelector"
/>
</div>
</b-col>
</b-row>
<b-row>
<b-col cols="3">
Funding category:
</b-col>
<b-col cols="9">
<div v-if="!loaded.fundingcategories">
<img
src="../assets/radio.gif"
alt="loading data"
>
</div>
<div v-else>
<b-form-select
v-model="newShow.fundingcategory"
:options="showFundingCategorySelector"
/>
</div>
</b-col>
</b-row>
</b-container>
</b-modal>
<!-- Modal to confirm and delete a show -->
<b-modal
ref="modalDeleteShow"
title="Delete a show"
size="lg"
@ok="deleteShow"
>
<b-alert
variant="danger"
show
>
You are about to delete the show <b>{{ deletedShow.name }}</b>!
</b-alert>
<div align="center">
Are you sure you want to continue?
</div>
</b-modal>
</div>
</template>
<script>
import axios from 'axios'
import slugify from '../mixins/slugify.js'
export default {
mixins: [ slugify ],
data () {
return {
newShow: {
name: "",
slug: "",
short_description: "",
type: 0,
fundingcategory: 0,
category: [],
hosts: [],
owners: [],
language: [],
topic: [],
musicfocus: [],
},
deletedShow: {
id: null,
name: '',
},
loaded: {
types: false,
fundingcategories: false,
},
types: [],
fundingcategories: [],
computed: {
temporarySlug: function () {
return this.slug(this.newShow.name)
},
showTypeSelector: function () {
let options = []
for (let i in this.types) {
options.push({
value: this.types[i].id,
text: this.types[i].type
})
}
return options
},
showFundingCategorySelector: function () {
let options = []
for (let i in this.fundingcategories) {
options.push({
value: this.fundingcategories[i].id,
text: this.fundingcategories[i].abbrev + ' (' + this.fundingcategories[i].fundingcategory + ')'
})
}
return options
},
methods: {
addShow (event) {
// prevent the modal from closing automatically on click
event.preventDefault()
// only try to add a new show if name and short description are filled out
if (this.newShow.name.trim() === '' || this.newShow.short_description.trim() === '' ) {
// TODO: make this nicer UI-wise (red text annotations next to input fields instead of simple alert)
alert('Please provide at least a title and a short description for this show.')
} else {
// as the slug is a computed property we to assign it to the new show's slug variable
this.newShow.slug = this.temporarySlug
let uri = process.env.VUE_APP_API_STEERING_SHOWS
axios.post(uri, this.newShow, {
withCredentials: true,
headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token }
}).then(response => {
// everything was fine, we can close the modal now
this.$refs.modalAddShow.hide()
this.$parent.loadAndSwitch(response.data.id)
}).catch(error => {
this.$log.error(error.response.status + ' ' + error.response.statusText)
this.$log.error(error.response)
alert('Error: could not add new show. See console for details.')
// and we leave the modal open, so no call to its .hide function here
})
}
},
deleteShow (event) {
// prevent the modal from closing automatically on click
event.preventDefault()
let uri = process.env.VUE_APP_API_STEERING_SHOWS + this.deletedShow.id
axios.delete(uri, {
withCredentials: true,
headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token }
}).then(() => {
this.$refs.modalDeleteShow.hide()
this.$parent.loadAndSwitch(null)
}).catch(error => {
this.$log.error(error.response.status + ' ' + error.response.statusText)
this.$log.error(error.response)
alert('Error: could not delete show. See console for details.')
// and we leave the modal open, so no call to its .hide function here
})
},
// clear and fetch modal data and open the modal to add new shows
showModalAddShow () {
this.newShow.name = ''
this.newShow.slug = ''
this.newShow.short_description = ''
this.loadTypes()
this.loadFundingCategories()
this.$refs.modalAddShow.show()
// open the deletion confirmation modal
showModalDeleteShow (id, name) {
this.deletedShow.id = id
this.deletedShow.name = name
this.$refs.modalDeleteShow.show()
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
},
// fetch all available (that is: active) show type from steering
loadTypes () {
this.loaded.types = false
axios.get(process.env.VUE_APP_API_STEERING + 'types/?active=true', {
withCredentials: true,
headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token }
}).then(response => {
this.types = response.data
this.loaded.types = true
}).catch(error => {
this.$log.error(error.response.status + ' ' + error.response.statusText)
this.$log.error(error.response)
alert('Error: could not load available show types. See console for details.')
})
},
// fetch all available (that is: active) funding categories from steering
loadFundingCategories () {
this.loaded.fundingcategories = false
axios.get(process.env.VUE_APP_API_STEERING + 'fundingcategories/?active=true', {
withCredentials: true,
headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token }
}).then(response => {
this.fundingcategories = response.data
this.loaded.fundingcategories = true
}).catch(error => {
this.$log.error(error.response.status + ' ' + error.response.statusText)
this.$log.error(error.response)
alert('Error: could not load available funding categories. See console for details.')
})
},