| 
							- <template>
 -   <div class="invalidation-view">
 -     <qrcode-stream
 -       v-if="!token"
 -       @decode="onDecode"
 -       @init="onInit">
 -     </qrcode-stream>
 -     <div v-else>
 -       <div v-if="status && !status.valid">
 -         reservation {{ token }} from {{status.anzeigename}} is not valid!<br>
 -         reason: {{status.reason || status.detail}}<br><br>
 -         <button @click="onReset" class="btn reset-btn">reset</button>
 -       </div>
 -       <div v-if="status && status.valid">
 -         reservation from {{status.anzeigename}} is valid :) <br>
 -         <div>
 -           <button @click="onInvalidate" class="btn invalidate-btn">invalidate now</button>
 -           <button @click="onReset" class="btn reset-btn">reset</button>
 -         </div>
 -         <div v-if="error">
 -           {{error}}
 -         </div>
 -       </div>
 -     </div>
 -     <!-- {{status}} -->
 -   </div>
 - </template>
 - 
 - <script>
 - import { QrcodeStream } from 'vue-qrcode-reader'
 - export default {
 -   name: 'Invalidate',
 -   components: {
 -     QrcodeStream,
 -   },
 -   data() {
 -     return {
 -       token: null,
 -       status: null,
 -       success: null,
 -       error: null,
 -     }
 -   },
 -   methods: {
 -     async onDecode(token) {
 -       this.token = token
 -       this.status = await this.getStatus(token)
 -     },
 -     async getStatus (token) {
 -       const response = await fetch(`${process.env.VUE_APP_API_URL}guest/${token}`)
 -       const data = await response.json()
 -       return data
 -     },
 -     onInit(promise) {
 -       promise
 -         .then(console.log)
 -         .catch(console.error)
 -     },
 -     onReset() {
 -       this.token = null
 -       this.status = null
 -       this.success = null
 -       this.error = null
 -     },
 -     async onInvalidate() {
 -       let data = {
 -         token: this.token
 -       }
 -       const response = await fetch(
 -         `${process.env.VUE_APP_API_URL}guest/invalidate`, {
 -           method: 'POST',
 -           headers: { 'Content-Type': 'application/json' },
 -           body: JSON.stringify(data),
 -         }
 -       )
 -       if (response.status === 200) {
 -         this.success = true
 -         this.onReset()
 -       } else {
 -         this.error = await response.json()
 -       }
 -     }
 - 
 -   },
 - }
 - </script>
 - 
 - <style>
 - .invalidation-view {
 -   min-height: 100vh;
 -   display: flex;
 -   align-items: center;
 -   justify-content: center;
 -   text-align: center;
 - }
 - .btn {
 -   padding: 1em;
 -   font-size: 2em;
 -   border: none;
 -   outline: none;
 -   margin: .2em 0;
 - }
 - .invalidate-btn {
 -   background: rgb(255, 255, 255);
 -   color: #000;
 -   margin-right: 1em;
 - }
 - .reset-btn {
 -   background: rgb(138, 138, 138);
 -   color: #000;
 - }
 - 
 - </style>
 
 
  |