Skip to content
Snippets Groups Projects
AddShowModal.vue 5.43 KiB
Newer Older
  • Learn to ignore specific revisions
  •     <!-- Modal for adding new shows -->
    
        <b-modal
          ref="modalAddShow"
          title="Create a new show"
          size="lg"
          @ok="addShow"
        >
          <b-container fluid>
            <b-row>
    
                <b-form-input
                  v-model="newShow.name"
                  type="text"
                  placeholder="Enter a title for this new show"
                />
              </b-col>
    
                <small class="slug">Slug: {{ temporarySlug }}</small>
              </b-col>
            </b-row>
            <br>
    
                <b-form-input
                  v-model="newShow.short_description"
                  type="text"
                  placeholder="Enter a short description for this show"
                />
              </b-col>
            </b-row>
    
            <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>
      </div>
    </template>
    
    <script>
    import slugify from '../mixins/slugify.js'
    
    import { mapGetters } from 'vuex'
    
      data () {
        return {
          newShow: {
            name: "",
            slug: "",
            short_description: "",
    
            category: [],
            hosts: [],
            owners: [],
            language: [],
            topic: [],
    
        loaded () { return this.$store.state.shows.loaded },
    
    
        temporarySlug: function () {
    
          return this.slugify(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
        },
    
    
        ...mapGetters({
          types: 'shows/types',
          fundingcategories: 'shows/fundingcategories',
          users: 'auth/users',
        })
    
        // create a new show and POST it to the steering API
        // new shows have to at least contain a name, a slug and a short-description.
        // also a valide show type and funding category have to be choosen.
        // for all other categories we can use an empty array and let the user fill
        // it out through the existing show manager modals, after the show is created
    
        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.')
    
            return
          }
          // also the type and funding category have to be set
          if (this.types.findIndex(type => type.id === this.newShow.type) === -1) {
            // TODO: make this nicer UI-wise (red text annotations next to input fields instead of simple alert)
            alert('Please choose a type for this show.')
            return
          }
          if (this.fundingcategories.findIndex(cat => cat.id === this.newShow.fundingcategory) === -1) {
            // TODO: make this nicer UI-wise (red text annotations next to input fields instead of simple alert)
            alert('Please choose a funding category for this show.')
            return
    
    
          // as the slug is a computed property we have to assign it to the new show's slug property
          this.newShow.slug = this.temporarySlug
    
    
          let modal = this.$refs.modalAddShow
          this.$store.dispatch('shows/submitShow', {
            show: this.newShow,
            callback: () => {
              modal.hide()
            }
    
        // clear and fetch modal data and open the modal to add new shows
    
          this.newShow.name = ''
          this.newShow.slug = ''
          this.newShow.short_description = ''
          this.$refs.modalAddShow.show()